MySQLのユーザの権限を管理する

はじめに

 MySQLで新しくユーザを作っても、そのユーザには何の権限も与えられていないため、データベースにもアクセスするどころか、MySQLシェルにアクセスすることさえできない。そこで、GRANT文を用いてユーザに権限を与える。

構文

mysql> GRANT {type_of_permission} ON {database_name}.{tablename} TO {username}@localhost;

ユーザー権限の種類

 上記のコードの{type_of_permission}に入力する部分。よく使われるものを表にまとめてみた。

権限説明
ALL (PRIVILEGES)指定したデータベースにフルアクセスできる。(データベースが指定されていない場合は、システム全体のグルーバルアクセスができる。)
ALTERテーブルを変更できる。
CREATE新しいテーブルまたはデータベースを作成できる。
DROPテーブルまたはデータベースを削除できる。
DELETEテーブルから行を削除できる。
INSERTデーブルに行を挿入できる。
SELECTSELECTコマンドを実行してデータベースを読み取ることができる。
UPDATEテーブルの行を更新できる。
GRANT OPTION他のユーザーの権限の付与または削除ができる。
USAGE権限が無いことを指す。GRANT文では使わないが、権限のないユーザの情報を確認したときに表示される。

権限のレベル

 ユーザーの権限のレベルには主に、グローバルレベル、データーベースレベル、テーブルレベルがある。権限の範囲は、グローバルレベル>データーベースレベル>テーブルレベルとなっている。

各レベルの設定の仕方

グローバルレベル
mysql> GRANT {type_of_permission} ON *.* TO {username}@ localhost;
データベースレベル
mysql> GRANT {type_of_permission} ON {database_name}.* TO {username}@ localhost;
テーブルレベル
mysql> GRANT {type_of_permission} ON {database_name}.{tablename} TO {username}@ localhost;

 お気づきのように、*で任意のデータベースorテーブルを指定することができる。

実践

1. MySQLに管理者ユーザとしてログインする

$ mysql -u -root -p

2. ユーザーnew_userにデータテーブルsample_dbにおける(GRANT OPTIONPROXYを除く)全ての権限を与える。

mysql> GRANT ALL ON sample_db.* TO new_user@localhost

3. すべての権限をリロード

mysql> FLUSH PRIVILEGES;

注意

これを忘れると、設定の変更が反映されない!

4. 権限が与えらているか確認する

mysql> SHOW GRANTS FOR new_user@localhost;
+------------------------------------------------------------------+
| Grants for new_user@localhost                                   |
+------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'new_user'@'localhost'                    |
| GRANT ALL PRIVILEGES ON `sample_db`.* TO 'new_user'@'localhost' |
+------------------------------------------------------------------+
2 rows in set (0.00 sec)

 権限を取り消したい場合

REVOKE {type_of_permission} ON {database_name}.{table_name} FROM {username}@localhost;

注意

ユーザーを指定するには権限を付与するときに使用したTOではなく、FROMを使用する必要がある