権限の削除

広告

ユーザーに対して設定した権限を削除するにはREVOKE文を使います。書式は次の通りです。

REVOKE priv_type [(column_list)] [, priv_type [(column_list)]] ...
    ON [object_type] {tbl_name | * | *.* | db_name.*}
    FROM user [, user] ...

複雑な文なのですが、基本書式は次のようになります。

REVOKE 権限 ON レベル FROM user;

権限やレベルの指定方法は権限を設定する時に使用するGRANT文と同じです。(詳しくは「権限の設定」を参照して下さい)。

例えばグローバルレベルのSELECT権限を削除するには次のように入力します。

revoke select on *.* from 'user'@'localhost';;

なお特定のユーザーから全てのレベルの全ての権限を削除するには次の書式を利用できます。

REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] ...

権限を全て削除してもユーザーそのものは削除されません。ユーザーを削除するにはDROP USER文を使用して下さい。

サンプル

では実際に試してみます。まず対象となるユーザーの現在の権限を確認します。

p8-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権限を削除します。次のように入力します。

mysql> revoke create on *.* from 'saru'@'192.168.128.1';

p8-2

では改めて権限を確認してみます。

p8-3

現時点での権限は次のように表示されます。

GRANT SHOW DATABASES ON *.* TO 'saru'@'192.168.128.1' IDENTIFIED BY PASSWORD '**'
GRANT SELECT ON `test`.* TO 'saru'@'192.168.128.1'

グローバルレベルのCREATE権限が削除されていることが確認できます。

次に全ての権限を削除します。次のように入力します。

mysql> revoke all privileges, grant option from 'saru'@'192.168.128.1';

p8-4

では改めて権限を確認してみます。

p8-5

現時点での権限は次のように表示されます。

GRANT USAGE ON *.* TO 'saru'@'192.168.128.1' IDENTIFIED BY PASSWORD '**'

グローバルレベルに対してUSAGEが設定されており全ての権限が無くなっていることが確認できます。

( Written by Tatsuo Ikura )