MySQL 7 から、ユーザ作成の方法が少し変わったとのこと。 もともとを知らないので抵抗はありませんが、Zabbix や Wordpress のオンラインマニュアルに書かれているユーザ作成の SQL が MySQL 6以前の書き方になっていて困ったりしたので、簡単にまとめてみます。
環境
本ページは以下の環境で実施しています。
CentOS 6.8 MySQL 5.7.16
ユーザの作成
お作法は、以下のようになっています。
- CREATE USER でユーザを作成
- GRANT で権限付与
実行するSQL文は、以下の書式となります。
CREATE USER ユーザ名@ホスト名 IDENTIFIED BY 'パスワード';
実際に作成してみます。 作成するユーザは以下です。
- ユーザ名:zabbix
- データベース名:zabbix
- ホスト名:localhost
[shell]
mysql -uroot -p
Enter password:
mysql> SELECT host,user FROM mysql.user; +-----------+-----------+ | host | user | +-----------+-----------+ | localhost | mysql.sys | | localhost | root | +-----------+-----------+ 3 rows in set (0.00 sec)
mysql> CREATE USER zabbix@localhost IDENTIFIED BY 'パスワード'; Query OK, 0 rows affected (0.00 sec)
mysql> GRANT ALL ON zabbix.* TO zabbix@localhost; Query OK, 0 rows affected (0.01 sec)
mysql> SELECT host,user FROM mysql.user; +-----------+-----------+ | host | user | +-----------+-----------+ | localhost | mysql.sys | | localhost | root | | localhost | zabbix | +-----------+-----------+ 3 rows in set (0.00 sec) [/shell]
権限管理
権限確認
ユーザにどのような権限が割り当てられているかを確認するには、以下のようにSQLを発行します。 以下の例は、zabbixユーザを作成した直後の状態です。
[bash] SHOW GRANT FOR zabbix@localhost; +--------------------------------------------+ | Grants for zabbix@localhost | +--------------------------------------------+ | GRANT USAGE ON . TO 'zabbix'@'localhost' | +--------------------------------------------+ 1 row in set (0.00 sec) [/bash]
権限付与
zabbixユーザに対して、データベース"zabbix" の操作権限を全て付与する場合は、以下のようにSQLを発行します。
[bash] mysql> GRANT ALL ON zabbix.* TO zabbix@localhost; [/bash]
結果を確認してみると、以下のようになります。
[bash]
mysql> SHOW GRANTS FOR zabbix@localhost;
+------------------------------------------------------------+
| Grants for zabbix@localhost |
+------------------------------------------------------------+
| GRANT USAGE ON . TO 'zabbix'@'localhost' |
| GRANT ALL PRIVILEGES ON zabbix
.* TO 'zabbix'@'localhost' |
+------------------------------------------------------------+
2 rows in set (0.00 sec)
[/bash]