[MySQL] 権限を剥奪する - REVOKE

MySQLで権限を剥奪(削除)するにはREVOKE構文を使います。

REVOKE ALL ON *.* FROM katsube@localhost;

上記は全権限を剥奪し、初期状態に戻しています。

利用方法

基本的な利用方法

書式としては以下になります。

REVOKE (権限) ON (対象)FROM (ユーザー)@(ホスト);

アットマーク(@)から後ろを削除した場合、(ユーザー名)@%と同じ意味になります。注意点としてはMySQLではホスト名が変わると同じユーザー名でも別人として扱われます。剥奪できたか必ず確認するようにしてください。

全権限を剥奪する

REVOKEに続いて剥奪する権限を指定します。ここでALLを指定することですべての権限を剥奪することが可能です。

次のユーザーはSELECT, INSERT, UPDATEの3つの権限が付与されています。

mysql> SHOW GRANTS for katsube@localhost;
+--------------------------------------------------------------+
| Grants for katsube@localhost                                 |
+--------------------------------------------------------------+
| GRANT SELECT, INSERT, UPDATE ON *.* TO 'katsube'@'localhost' |
+--------------------------------------------------------------+

おもむろにすべての権限を削除するREVOKE文を発行。

REVOKE ALL PRIVILEGES ON *.* FROM katsube@localhost;

USAGEは何も権限が付与されていない状態を意味します。CREATE USERしたばかりの状態とも言えます。

mysql> SHOW GRANTS for katsube@localhost;
+---------------------------------------------+
| Grants for katsube@localhost                |
+---------------------------------------------+
| GRANT USAGE ON *.* TO 'katsube'@'localhost' |
+---------------------------------------------+

MySQL5.7ではPRIVILEGESは省略可能になりました。

一部の権限を剥奪する - その1

SELECT, INSERT, UPDATEの権限を与えられているユーザーからUPDATE権限を剥奪します。

現在付与されている権限は以下の通り。

mysql> SHOW GRANTS for katsube@localhost;
+--------------------------------------------------------------+
| Grants for katsube@localhost                                 |
+--------------------------------------------------------------+
| GRANT SELECT, INSERT, UPDATE ON *.* TO 'katsube'@'localhost' |
+--------------------------------------------------------------+

剥奪したい権限をREVOKEで指定します。

REVOKE UPDATE ON *.* FROM katsube@localhost;

ご覧の通りREVOKEした権限のみが削除されました。

mysql> SHOW GRANTS for katsube@localhost;
+------------------------------------------------------+
| Grants for katsube@localhost                         |
+------------------------------------------------------+
| GRANT SELECT, INSERT ON *.* TO 'katsube'@'localhost' |
+------------------------------------------------------+

一部の権限を剥奪する - その2

複数の権限を同時に削除したい場合は、単純にカンマ(,)で区切って指定します。

REVOKE INSERT, UPDATE ON *.* FROM katsube@localhost;

また同様に全権限を表すALLからも一部の権限を削除することが可能です。以下ではREPLICATION SLAVE以外の権限をすべて削除しています。

mysql> SHOW GRANTS for katsube@localhost;
+------------------------------------------------------+
| Grants for katsube@localhost                         |
+------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'katsube'@'localhost' |
+------------------------------------------------------+

mysql> REVOKE SELECT, INSERT, DELETE, UPDATE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE ON *.* FROM katsube@localhost;

mysql> SHOW GRANTS for katsube@localhost;
+---------------------------------------------------------+
| Grants for katsube@localhost                            |
+---------------------------------------------------------+
| GRANT REPLICATION SLAVE ON *.* TO 'katsube'@'localhost' |
+---------------------------------------------------------+

頭の悪いサンプルですねw これなら全権限を剥奪した後にREPLICATION SLAVEを付与した方がスマートやw

参考ページ