MySQLサーバーに接続する際にはMySQLのユーザー名とパスワードが必要になります。MySQLインストール時にデフォルトで匿名ユーザーが作られているので、MySQLユーザーを作成しなくてもその匿名ユーザーを使ってすぐに作業することもできます。
しかし、この匿名ユーザーのパスワードは設定されていなく、誰でもログインできてしまう状態で、セキュリティ上問題があります。匿名ユーザーのパスワードを設定するか、匿名ユーザーが不要ならば削除する事が推奨されています。
以下、MySQL5.1の環境での確認、対応例を示します。
1)匿名ユーザーにパスワードが設定されていないと・・・
匿名ユーザーは、ユーザー名が空で名前がないユーザーで、パスワードが設定されていないと、下記のようにユーザー名、パスワードを入力しなくてもMySQLサーバーに接続できてしまいます。
$ mysql Welcome to the MySQL monitor. Commands end with ; or \g. : : Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
2)匿名ユーザーにパスワードを設定
①現状の設定確認
MySQLのユーザーは”mysql”という名前のデータベースの”user”テーブルに保存されています。
例)
mysql> SELECT Host, User,Password FROM mysql.user where User = '' and Host = 'localhost'; +-----------+------+----------+ | Host | User | Password | +-----------+------+----------+ | localhost | | | +-----------+------+----------+ 1 row in set (0.00 sec)
上記のようにユーザー名が空の匿名ユーザーが存在し、パスワードが設定されていない事が分かります。
②匿名ユーザーにパスワードを設定
下記のように匿名ユーザーにパスワードを設定します。
例)
mysql> SET PASSWORD FOR ''@'localhost' = PASSWORD('newpwd'); Query OK, 0 rows affected (0.00 sec) mysql> SELECT Host, User,Password FROM mysql.user where User = '' and Host = 'localhost'; +-----------+------+---------------------------------------+ | Host | User | Password | +-----------+------+---------------------------------------+ | localhost | | *1FA85AA204CC・・・ | +-----------+------+---------------------------------------+ 1 row in set (0.00 sec)
③ログイン確認
例)ユーザーを指定せずにログインを試みるとエラーになることを確認
$ mysql ERROR 1045 (28000): Access denied for user 'rails'@'localhost' (using password: NO)
例)匿名ユーザー”を指定してログイン
$ mysql -u '' -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g : パスワードを入力するとログインできる。
3)匿名ユーザーの削除
匿名ユーザー自体が不要であれば削除します。
下記のようにして実行します。
例)
mysql> DELETE FROM mysql.user WHERE User = ''; Query OK, 2 rows affected (0.00 sec) mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec) mysql> SELECT Host, User,Password FROM mysql.user where User = '' and Host = 'localhost'; Empty set (0.00 sec)