カテゴリー
Linux

【パスワードを設定・無名ユーザーをなくす】MySQL チューニングしたいです!★MySQLTuner をきっかけに♪2

先日投稿しましたページで、MySQL で「パスワード設定されていないユーザーがあるよ!」という指摘をいただきましたので対応いたします。

ポイント

# MySQL のユーザー、接続元、パスワードを表示
SELECT user, host, password FROM mysql.user;
# ユーザーを削除(条件:無名ユーザーまたはパスワードが設定されていないユーザー)
DELETE FROM mysql.user WHERE user='' or password='';
# 全ての対象に全ての権限を付与して、ユーザー名:username、接続元:hostname、パスワード:password、であるユーザーを追加
GRANT ALL ON *.* TO username@"hostname"IDENTIFIED BY "password";

MySQL でパスワード設定されていないユーザーを確認して方針を考えました♪

まずは現状を確認します。

mysql> SELECT user, host, password FROM mysql.user;
+---------------+---------------+-------------------------------------------+
| user          | host          | password                                  |
+---------------+---------------+-------------------------------------------+
| root          | localhost     | *Exxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| root          | dti-vps-srv57 |                                           |
| root          | 127.0.0.1     |                                           |
| root          | ::1           |                                           |
|               | localhost     |                                           |
|               | dti-vps-srv57 |                                           |
| wordpressuser | localhost     | *6xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
+---------------+---------------+-------------------------------------------+
7 rows in set (0.00 sec)

mysql>

dti-vps-srv57 から接続する root ユーザー、127.0.0.1 から接続する root ユーザー、::1 から接続する root ユーザー、localhost から接続する無名ユーザー、dti-vps-srv57 から接続する無名ユーザー、の 5 つのユーザーにパスワードが設定されていません。

わたくし、今まで存じあげず、でもなんとなくわかってきていて、今回もう少しわかってきたことがあります。

MySQL ユーザーは、接続元を指定すればそれぞれの接続元に対してパスワードを設定することが可能です。ひとつのユーザーにひとつのパスワードだけではありません。

ということで、root ユーザーのいくつかの接続元に対して、パスワードを設定しておりませんでした。ななんと!われながら甘すぎます><。

コワイ。

これらの接続元を見てみますと、127.0.0.1 = ::1(補:IPv6) = localhost です。また、dti-vps-srv57 ですが、これも自分自身を指しています。ただし、これは今使用しておりませんので、そのうち消そうかと考えています。ともかく、これらは皆同じですので、すでに設定してある localhost と同じパスワードを設定いたしました。

MySQL でパスワード設定されていないユーザーの削除・またはパスワード設定記録♪

まずは無名のユーザーまたは、パスワードが設定されていないユーザーを削除いたしました。

mysql> # 無名のユーザーまたはパスワードが設定されていないユーザーを削除
mysql> DELETE FROM mysql.user WHERE user='' or password='';
Query OK, 5 rows affected (0.01 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

mysql>

あ。

あ、間違えました。

無名のユーザーは削除してよかったのですけれども、パスワードが設定されていないユーザーは削除してはダメでした><。ですので、ユーザーを作成してその時同時にパスワードを設定いたしました。

mysql> # GRANT ALL ON *.* ← 全ての対象に全ての権限を付与
mysql> # username@"hostname" ← 接続元とユーザー名を指定
mysql> # IDENTIFIED BY "password" ← パスワードを指定
mysql> GRANT ALL ON *.* TO root@"127.0.0.1"IDENTIFIED BY "password";
Query OK, 0 rows affected (0.04 sec)

mysql> GRANT ALL ON *.* TO root@"::1"IDENTIFIED BY "password";
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT ALL ON *.* TO root@"dti-vps-srv57"IDENTIFIED BY "password";
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

mysql>

これでよいはずです。

あらためて MySQL のユーザー、ホスト、パスワードを確認

mysql> SELECT user, host, password FROM mysql.user;
+---------------+---------------+-------------------------------------------+
| user          | host          | password                                  |
+---------------+---------------+-------------------------------------------+
| root          | localhost     | *Exxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| root          | dti-vps-srv57 | *Exxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| root          | ::1           | *Exxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| root          | 127.0.0.1     | *Exxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| wordpressuser | localhost     | *6xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
+---------------+---------------+-------------------------------------------+
5 rows in set (0.00 sec)

mysql>

大丈夫ですね。

おわりに

ふたたび MySQLTuner を実行してみましたらパスワード設定に関しましては OK との診断をいただきました。

-------- Security Recommendations  -------------------------------------------
[OK] All database users have passwords assigned

また上述しました、ホストが「dti-vps-srv57」の root ユーザーを削除いたしました。

mysql> DELETE FROM mysql.user WHERE host = 'dti-vps-srv57';
Query OK, 1 row affected (0.00 sec)

mysql>

残りの MySQLTuner をきっかけとしたチューニングはあと 3 つです。取り組んでいきたいと思います。

  • テーブルが断片化しているよ!
  • Query cache が無効になっているよ!
  • Thread cache が無効になっているよ!

以上です。

コメントを残す