MySQLドキュメント によると、パスワードを追加するか、匿名アカウントを削除することで、MySQLサーバーを強化できます。
クライアントがパスワードなしで匿名ユーザーとして接続できないようにする場合は、各匿名アカウントにパスワードを割り当てるか、アカウントを削除する必要があります。
強化する前は、ユーザーテーブルは次のようになっています。
mysql> select user,Host,password from mysql.user;
+------------------+-----------+-------------------------------------------+
| user | Host | password |
+------------------+-----------+-------------------------------------------+
| root | localhost | *F3A2A51A9B0F2BE246XXXXXXXXXXXXXXXXXXXXXX |
| root | gitlab | |
| root | 127.0.0.1 | |
| root | ::1 | |
| | localhost | |
| | gitlab | |
| debian-sys-maint | localhost | *95C1BF709B26A5BAXXXXXXXXXXXXXXXXXXXXXXXX |
| myuser | localhost | *6C8989366EAF75BB6XXXXXXXXXXXXXXXXXXXXXXX |
+------------------+-----------+-------------------------------------------+
すべての匿名アカウントを削除したので、userテーブルは次のようになります。 (ユーザーの管理にパペットを使用していますが、パペットはDROP USER
コマンドを効果的に実行します)。
mysql> select user,Host,password from mysql.user;
+------------------+-----------+-------------------------------------------+
| user | Host | password |
+------------------+-----------+-------------------------------------------+
| root | localhost | *F3A2A51A9B0F2BE246XXXXXXXXXXXXXXXXXXXXXX |
| debian-sys-maint | localhost | *95C1BF709B26A5BAXXXXXXXXXXXXXXXXXXXXXXXX |
| myuser | localhost | *6C8989366EAF75BB6XXXXXXXXXXXXXXXXXXXXXXX |
+------------------+-----------+-------------------------------------------+
ユーザー名またはパスワードなしでテストシステムにまだログインできるのはなぜですか?
不要なユーザーがログインできないようにするにはどうすればよいですか?
root@gitlab:~# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 98
Server version: 5.5.32-0ubuntu0.12.04.1 (Ubuntu)
....
mysql>
更新:パスワードを入力せずにrootとしてログインできることも発見しました。
Update2:私は this question を見つけましたが、これにはいくつかの良い情報がありますが、問題は解決しません。
匿名ユーザーはいません。
mysql> select user,Host,password from mysql.user where user='';
Empty set (0.00 sec)
root@localhost
としてログインします。
mysql> select USER(),CURRENT_USER();
+----------------+----------------+
| USER() | CURRENT_USER() |
+----------------+----------------+
| root@localhost | root@localhost |
+----------------+----------------+
デフォルトのパスワード、またはmy.cnfで定義されているskip-grant-tablesがありません
root@gitlab:~# cat /etc/mysql/my.cnf |grep -i 'skip-grant-tables'|wc -l
0
root@gitlab:~# cat /etc/mysql/my.cnf |grep -i 'pass'|wc -l
0
Update3:
私はパペットを使用してこれらの手順を実行してみました(フラッシュ権限を自動的に実行するはずです)。また、権限を手動でフラッシュし、mysqlを再起動してみました。
Update4:
また、mysqlのrootパスワードとフラッシュされた権限を変更してみました。パスワードがなくても、どのユーザーとしてもログインできます。
私はそれを考え出した。 /etc/mysql/my.cnfにはパスワードキーペアが格納されていませんでしたが、/ root/.my.cnfにはパスワードが格納されていました。
/root/.my.cnfでパスワードをコメント化するとすぐに、パスワードなしではログインできなくなりました(これは私が期待していたことです)。