権限の設定
作成したユーザーに対して権限を設定するにはGRANT文を使用します。書式は次の通りです。
GRANT priv_type [(column_list)] [, priv_type [(column_list)]] ... ON [object_type] {tbl_name | * | *.* | db_name.*} TO user [IDENTIFIED BY [PASSWORD] 'password'] [, user [IDENTIFIED BY [PASSWORD] 'password']] ... [REQUIRE NONE | [{SSL| X509}] [CIPHER 'cipher' [AND]] [ISSUER 'issuer' [AND]] [SUBJECT 'subject']] [WITH with_option [with_option] ...] object_type = TABLE | FUNCTION | PROCEDURE with_option = GRANT OPTION | MAX_QUERIES_PER_HOUR count | MAX_UPDATES_PER_HOUR count | MAX_CONNECTIONS_PER_HOUR count | MAX_USER_CONNECTIONS count
複雑な文なのですが、基本書式は次のようになります。
GRANT 権限 ON レベル TO user;
※権限のレベル及び種類については「権限の種類と設定されている権限の確認」を参照して下さい。
各レベルに応じて権限を設定するには、それぞれ次のように記述します。
グローバルレベル: GRANT 権限 ON *.* TO user; データベースレベル: GRANT 権限 ON db_name.* TO user; テーブルレベル: GRANT 権限 ON db_name.table_name TO user; カラムレベル: GRANT 権限 (カラム1, カラム2, ...) ON db_name.table_name TO user;
例えばグローバルレベルでCREATE権限を設定するには次のように入力します。
grant create on *.* to 'user'@'localhost';
「test」デーベースの「goods」テーブルに対してSELECT権限とUPDATE権限を設定するには次のように入力します。
grant select,update on test.goods to 'user'@'localhost';
このようにどのレベルに対して何の権限を与えるのかを指定することができます。
ALL権限
ALL権限はGRANT OPTION権限以外の全ての権限を与える場合に使用します。
GRANT ALL ON レベル TO user;
実際にどのような権限が与えられるのかは合わせて指定したレベルによって異なります。例えばグローバルレベルを指定した場合には、グローバルレベルで指定可能な権限の全てが設定されますし、テーブルレベルを指定した場合には、テーブルレベルで指定可能な全ての権限が設定されることになります。
USAGE権限
USAGE権限はグローバルレベルでのみ指定が可能な権限で、この権限を設定すると何も権限が無いことになります。
GRANT USAGE ON *.* TO user;
CREATE USER文でユーザーを作成した直後はこの状態となります。
サンプル
では実際に試してみます。まず対象となるユーザーの現在の権限を確認します。
mysql> show grants for 'saru'@'192.168.128.1'¥G
現時点での権限は次のように表示されます。
GRANT USAGE ON *.* TO 'saru'@'192.168.128.1' IDENTIFIED BY PASSWORD '****'
グローバルレベルに対するUSAGE権限が設定されているだけとなっています。つまり現時点では権限は何も設定されていません。
---
ではまずtestデータベース対するSELECT権限を設定します。
mysql> grant select on test.* to 'saru'@'192.168.128.1';
再度権限を確認します。
現時点での権限は次のように表示されます。
GRANT USAGE ON *.* TO 'saru'@'192.168.128.1' IDENTIFIED BY PASSWORD '****' GRANT SELECT ON `test`.* TO 'saru'@'192.168.128.1'
このユーザーの権限と同じ権限を与えるには、まずグローバルレベルに対するUSAGE権限を与えた上で、データベースレベルでSELECT権限を与えることによって可能になることを表しています。
---
今度はグローバルレベルに対してSHOW DATABASES権限を設定します。
mysql> grant show databases on *.* to 'saru'@'192.168.128.1';
再度権限を確認します。
現時点での権限は次のように表示されます。
GRANT SHOW DATABASES ON *.* TO 'saru'@'192.168.128.1' IDENTIFIED BY PASSWORD '****' GRANT SELECT ON `test`.* TO 'saru'@'192.168.128.1'
このユーザーの権限と同じ権限を与えるには、まずグローバルレベルに対するSHOW DATABASES権限を与えた上で、データベースレベルでSELECT権限を与えることによって可能になることを表しています。
---
最後にグローバルレベルに対してCREATE権限を設定します。
mysql> grant create on *.* to 'saru'@'192.168.128.1';
再度権限を確認します。
現時点での権限は次のように表示されます。
GRANT CREATE, SHOW DATABASES ON *.* TO 'saru'@'192.168.128.1' IDENTIFIED BY PASSWORD '****' GRANT SELECT ON `test`.* TO 'saru'@'192.168.128.1'
このユーザーの権限と同じ権限を与えるには、まずグローバルレベルに対するCREATE権限とSHOW DATABASES権限を与えた上で、データベースレベルでSELECT権限を与えることによって可能になることを表しています。
このように権限を設定していくと、USAGE権限から他の権限に変わる場合を除いて今までの権限に追加されていくことが確認できます。なお一度設定した権限に対して改めてUSAGE権限を設定しても権限はなくなりません。権限を削除するにはREVOKE文を使用します。
( Written by Tatsuo Ikura )