本日は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側が「条件に合致している」として
この参照方法に引っかかってしまう為、接続に失敗してしまいます。
対策としては、
・ユーザ作成の際に、ホストの指定を正しく行う(%以外の物を使用する)
・匿名ユーザを消去する
等が挙げられます。
関連したトピックス
- 各DBの権限とmetadataについて【リアルタイムレプリケーションツールDBMoto】
- OracleのNet Configuration Assistantでリモート接続時にORA-12541
- Oracleトランザクションセットアップ例(Log ReaderまたはLog Server Agent)[Syniti Data Replication]
- DBMotoレプリケーションに必要なSQL Serverユーザ権限
- MySQLで大文字のテーブル名を扱う&サーバ文字コード変更
- Google Cloud SQLへのレプリケーションを試してみました[DBMoto]
- PostgreSQLとMySQLのデータベースとしての機能の違い
- GlueSyncでNoSQL活用を加速:導入編
- DBMotoレプリケーションに必要なMySQLユーザ権限
- MySQLでバイナリログを使用したミラーリング【リアルタイムレプリケーションツールDBMoto】