MySQLの匿名ユーザについて


本日はMySQLの『匿名ユーザ』について説明します。

MySQLは、インストールと同時に『匿名ユーザ』と呼ばれる、
ユーザ名とパスワードが空のユーザが作成されます。
この匿名ユーザは、ホストがlocalhostに指定されているため、
userテーブルでソートを行うと、root、匿名ユーザ、自作ユーザという
順番に並べられます。

MySQL にログインする際は、ユーザ名とパスワードを user テーブルを
参照して照合しますが、その際レコードの上から順番に照合します。
また、MySQLはユーザを作成する際に、localhostの他にも%(全てのホスト)を
指定することができます。

%は『全てのホスト』という扱いなので、ホストを%で指定しても
問題なくログインの処理が行えるように感じますが、
実は照合方法に問題があり、実際にはログインを行うことができません。

例として、ユーザネームを『climb』、パスワードを『itsq』ホストを『%』に指定して
ユーザを作成しても、MySQLはまず始めに
1:『localhost』のホストの中の
2:『climb』というユーザーネームがあるか
を参照しに行きます。
合致したデータが無い場合、次は
1:『localhost』のホストの中の
2:『匿名ユーザ』(実際には名前・パスワード共に何も無い物)
を参照しに行きます。
そして最後に
1:『%(全てのホスト)』の中の
2:『climb』というユーザ
を参照しに行きます。

ホストに%を指定した場合、こちらが望む3番目の参照方法の前に
2番目の参照方法で、MySQL側が「条件に合致している」として
この参照方法に引っかかってしまう為、接続に失敗してしまいます。

対策としては、
・ユーザ作成の際に、ホストの指定を正しく行う(%以外の物を使用する)
・匿名ユーザを消去する
等が挙げられます。

関連したトピックス

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください