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:いくつかの良い情報があるこの質問を見つけましたが、問題は解決していません。
匿名ユーザーはいません。
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パスワードとフラッシュされた権限も変更してみました。パスワードがなくても、どのユーザーとしてもログインできます。