おはようございます。じぇいかわさきです。
せっかくテーブルが完成し、データの取り込みをしようとして発生したMariaDBのアクセス権問題。
ユーザーを作り替えたりして対処したのですが、一向に解決しなかった問題がといアッと言う間に解決。
これは重要な事なので、忘れないように備忘録的にも記録しておこう。絶対に同じ過ちを繰り返す人のために。

解決策は意外な所にあった
自分がユーザーを作成したときに使用していたコマンドは以下の通りだった。
create user rasp@’%’ IDENTIFIED by ‘rasp’;
ユーザーも普通に追加されているので、特に問題は無いと自分では思っていた。
いろいろと調べていくと、まったく知らなかった事がここには隠されており、それが原因だったようなんだ。
この構文で何が問題なのか?
実は、このユーザーの作り方で構文自体は間違っていないのだ。
しかし、rasp@’%’とした部分にどうやら問題が有るようなんだ。
ここで取り扱っているユーザーの意味なんだが、raspと言うユーザーは@’%’と言うホストに対してアクセスができると言うことを表している。
‘%’ってなんだ?って思うよね。
実は自分も、よく理解しないままネットにあった例文を参考に」使っていたんだ。
ここに大きな問題が有ったんだね。
‘%’はワイルドカードを示している事になり、この場合raspと言うユーザーはどこのホストからでも接続できますよって事を言っているんだ。
これ自体は、正しいコマンドの使い方なのだが、このワイルドカードを使用した場合が、逆にあだになりデータベースのテーブルにアクセスできなくなっているようなんだ。
つまり、ワイルドカードを使用すると接続優先順位が下がり、問題が発生すると言うことだ。
データベースに接続するには優先順位が存在する
さて、ワイルドカードを使用すると、優先順位が下がるのだろうか?
これ自体、まったく意味が分からなかったのだが、いろいろと調べていくと意外な事が分かったんだ。
普通、最初に作ったデータベースのユーザーはroot@localhostしかないのだが、実は匿名でデータベースに接続できるユーザーが存在する。
いわゆるAnonymousなのだが。
[ads]
そして今回作ったユーザーはrasp@%と言うユーザー。
実は、この@%と言うワイルドカードは、どこからでも接続できると言う代わりに、具体的なホスト名が入らないと言うことになる。
データベースへの接続は、具体的なホスト名が書かれたユーザーからアクセス順番を付与されるようなんだ。
何を言いたいのか?
つまり、現状の自分の場合には以下の順番でアクセス順位を付与されているのではないかと判断される。
- root@localhost
- @localhost (匿名)
- rasp@%
つまり、rasp@%に到達する前に、匿名なのに具体的にlocalhostと表記している匿名ユーザーが先にアクセス権が与えられるので、raspにはアクセス権の順番が回って来ずにアクセスできないのではないか?
そう考えられるようなんだ。
それを解決するには、raspのホスト名を@%ではなく、具体的に@localhostにしてあげればよいのではないかと判断できる。
そうすることにより、優先順位が上がりデータベースにアクセスができるはずだ。
ユーザーの作り直しでアクセス権は解決したが・・・
それでは具体的にユーザーを作り直していこう。
まずは現状のユーザーを削除する。
drop user rasp;
これでユーザーは削除されたので、再度ユーザーを追加する。
create or replace user rasp@’localhost’ identified by ‘pasword’ ;
そして出来たユーザーにアクセス権を与える。
grant all privilages on iotada.* to ‘raso’@’localhost’;
そして、権限を反映させるために
flush privileges;
これで問題は解決したはずなので、実際に再度データべースに接続して、データをテーブルに流し込んでみる。

[ads]
やった、今度は問題なくデータベースのテーブルに接続でき、事前に作っておいたCSVファイルを流し込んでみる。
あれ?
おかしいじゃないですか。11個のデータが存在しているのに、取り込まれたのは4つだけで、その他はワーニングになっている。
なんで?
取り込まれたはずのテーブル内の状態を確認してみる。
中身を確認するコマンドを何度も間違えて、エラーの連発。
中身を見るのだからALLでOKだと思っていたら違った。
結局、単純なワイルドカードの*でみれるんじゃないですか。
select * from temphumd ;
結果は以下の通り。

確かに4つのデータしかないが、そのうち1つがCOLの内容にも見える。
なんでこうなったのか?また新たな問題が発生してしまった。
1つかいけつすると、新たな問題が発生で一進一退の状態がまだまだ続いている。
まとめ
自己流で進めてきたMariaDBの取り扱いですが、やはり自己流は得策ではないように感じました。
つまり、過去のほんの一握りの経験をもとに、今回はいろいろと挑戦してみたのですが、結果としてすべてが遠回りになっている。
過去の知識は重要ですが、それ以上に現在の状態を知ることですね。
よく、マニュアルを読め問いわれますが、確かにマニュアルには最新版の変化点が事細かく書かれているので、基本はマニュアルの熟読になりますね。
しかしながら、こう頻繁にアップデートしていくと、なかなかマニュアル内容を確認していくのも大変かと思います。
やはり、良いのはマニュアルと一緒に、出来る限り最新の参考書が有った方が、自己流の場合にはかなり改善対策に役立つ気がします。
この辺で、自分も1冊参考書を購入して、じっくり読んでみたいと思うようになりました。
さて次の課題は、何故11個のデータの内4つしか取り込めなかったのか、この原因を追究するのが今後の活動ですね。
まだまだMariaDBとの格闘は続きます。
[twt]
