MySQL 5.7.28でのユーザ作成についてまとめています。
以下、データベースとして、MySQLのサンプルデータベースEmployeesを使っています。
サンプルデータベースのインストール方法は、下記を参考にしてください。
【関連記事】
▶MySQLの入門には、GUIツールで慣れ、サンプルDBを使った学習が効果的
MySQLでユーザを作成するには、create user
MySQLのrootアカウントでログインします。※rootのパスワードはmy-secret-pwに設定されている前提。
% mysql -u root -pmy-secret-pw mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.7.28 MySQL Community Server (GPL) Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
rootアカウント以外でも、CREATE USER権限を持つアカウントならユーザ作成が可能です。
mysql> create user user0@localhost IDENTIFIED BY 'user0_password';
上記のSQLを実行すると、localhost上のユーザuser0を、パスワード’user0_password’で設定して作成します。
現在のユーザ名一覧を確認してみましょう。
mysql> select user from mysql.user; +---------------+ | user | +---------------+ | root | | mysql.session | | mysql.sys | | root | | user0 | +---------------+
rootやmysqlのシステムアカウントに加えて、先ほど作成したuser0が追加されていることが確認できました。
いったんmysqlコマンドをexitで抜けて、mysqlコマンドで、ユーザ名をuser0、パスワードをuser0_passwordに指定してログインできることを確認してみましょう。
mysql> exit Bye % mysql -u user0 -puser0_password mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 Server version: 5.7.28 MySQL Community Server (GPL) Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> exit Bye
問題なくMySQLサーバに接続できました。
※以降のSQLは、MySQLのrootアカウントで接続しなおして実行してください。
% mysql -u root -pmy-secret-pw
作成したユーザに権限を設定するにはGRANTを使用
まずは、作成済みのユーザに、デフォルトで設定されている権限を確認してみます。
mysql> show grants for user0@localhost; +-------------------------------------------+ | Grants for user0@localhost | +-------------------------------------------+ | GRANT USAGE ON *.* TO 'user0'@'localhost' | +-------------------------------------------+
「GRANT USAGE」は、権限がないことを表します。localhost上のユーザuser0は、全データベースの全テーブル(*.*)に対して、権限がない(GRANT USAGE)ことがわかりました。
user0に権限を付与してみましょう。
mysql> grant all privileges on employees.* to user0@localhost;
上記のSQLは、localhost上のuser0に、データベースemployeesの全テーブル(employees.*)に対して、すべての権限(all)を付与します。
show grantsで確認すると、データベースemployeesへの権限が付与されていることを確認できます。
mysql> show grants for user0@localhost; +--------------------------------------------------------------+ | Grants for user0@localhost | +--------------------------------------------------------------+ | GRANT USAGE ON *.* TO 'user0'@'localhost' | | GRANT ALL PRIVILEGES ON `employees`.* TO 'user0'@'localhost' | +--------------------------------------------------------------+
なお、与えた権限を剥奪するには、revokeを使います。
mysql> revoke all privileges on employees.* from user0@localhost;
上記SQLを実行すると、localhost上のuser0アカウントから、employeesデータベースの全テーブルに対する権限を剥奪します。
mysql> show grants for user0@localhost; +-------------------------------------------+ | Grants for user0@localhost | +-------------------------------------------+ | GRANT USAGE ON *.* TO 'user0'@'localhost' | +-------------------------------------------+
先ほどGRANTで付与した権限が削除されていることが確認できました。
ユーザ作成と権限付与を同時に行う方法
SQL1行で、ユーザ作成と権限付与を同時におこなうことも可能です。
mysql> GRANT ALL PRIVILEGES ON employees.* to user1@localhost IDENTIFIED BY 'user1_password';
上記SQLは、localhost上にuser1というアカウントをパスワード”user1_password”で作成し、employeesデータベースの全テーブル(employees.*)に、全権限(ALL)を付与します。
なお、5.7の古いバージョンでは、grantを使ってユーザ追加ができないケースがあるようです。
参考)mysql5.7 でユーザ追加の方法が変わったのでメモ – Qiita
まとめ
- MySQLのユーザ作成は、create userを使う。ユーザへの権限付与にはgrantを使用する。
- 作成済みのユーザ一覧は、select user from mysql.users で確認する。
- ユーザの権限は、show grantsで確認する。
- grantを使って、ユーザ作成と同時に、権限付与をおこなうことも可能。