MySQLのユーザについて

screenshot

screenshot

mysql.userというテーブルにユーザ・パスワード・権限などが入っている。

mysql> select host, user, password from mysql.user;
+-----------+---------+-------------------------------------------+
| host      | user    | password                                  |
+-----------+---------+-------------------------------------------+
| localhost | root    | *XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX |
:
+-----------+---------+-------------------------------------------+

パスワードハッシュはPASSWORD()で計算できる。

mysql> SELECT PASSWORD('hogehoge');
+-------------------------------------------+
| PASSWORD('hogehoge')                      |
+-------------------------------------------+
| *0B025000DCF68B1D374153A7005639E320D41D5B |
+-------------------------------------------+
1 row in set (0.00 sec)

パスワードを変える時はこう。

mysql> SET PASSWORD FOR username = PASSWORD('hogehoge');

username@hostの@以降を省略すると@'%'と同じになる。

シンプルな形式 user は user@"%" のシノニムです。

GRANTで'_'はワイルドカード。`appname\_production`.* のようにエスケープする必要がある。

注意: GRANT コマンドでデータベース名を指定する際、‘_’ および ‘%’ ワイルドカードを使用できます。データベース名の一部として、たとえば ‘_’ 文字を使用したい場合、GRANT コマンドでは GRANT ... ON `foo\_bar`.* TO ... などのように、'\_' として指定するようしてください。そうしないと、ワイルドカードパターンに一致する別のデータベースにもユーザがアクセスできるようになります。

INSERT,UPDATEなど手動で権限を変更した場合は、FLUSH PRIVILEGESを実行する。

mysql> FLUSH PRIVILEGES;