MySQLのユーザーを確認していると、不要なGRANT権限が付与されたユーザーを発見。
念のため消しておこうと思ったが、ちょっと手間取ったのでメモ。
環境
MySQL v5.7.29。
状況
こんな感じのユーザーがいた。
mysql> SHOW GRANTS FOR 'user'@'host'; +----------------------------------------------------------------+ | Grants for user@host | +----------------------------------------------------------------+ | GRANT ALL PRIVILEGES ON *.* TO 'user'@'host' WITH GRANT OPTION | +----------------------------------------------------------------+ 1 row in set (0.00 sec)
GRANT権限は不要なので、念のため消しておきたい。
調査と対応
REVOKE
で削除できないかと、ドキュメントを見てみる。
MySQL :: MySQL 5.7 Reference Manual :: 13.7.1.6 REVOKE Statement
消せそうなのは2つ目の構文、 REVOKE ALL PRIVILEGES, GRANT OPTION FROM ...
だが、これだとすべての権限が消えるなあ。
1つめの構文で「priv_type」となっているところを詳しく見てみる。
MySQL :: MySQL 5.7 Reference Manual :: 13.7.1.4 GRANT Statement
「priv_type」には GRANT OPTION
を指定できそう。
作業
1つめの構文では ON
でレベルを指定する必要があるため、以下のように記述して実行できた。
mysql> REVOKE GRANT OPTION ON *.* FROM 'user'@'host'; Query OK, 0 rows affected (0.02 sec) mysql> SHOW GRANTS FOR 'user'@'host'; +----------------------------------------------+ | Grants for user@host | +----------------------------------------------+ | GRANT ALL PRIVILEGES ON *.* TO 'user'@'host' | +----------------------------------------------+ 1 row in set (0.00 sec)
振り返り
REVOKE ALL PRIVILEGES, GRANT OPTION FROM ...
を使っている例は見かけたが、GRANT権限だけ消す方法がなかなか出てこなかった。
REVOKE GRANT OPTION
で検索すると、PostgreSQLばっかり出てくる。
古いが、ミラーサイトで見つけたMySQL 4.1のリファレンスには記載があった。
MySQL :: MySQL 4.1 リファレンスマニュアル :: 4.4.1 GRANT および REVOKE の構文
ユーザの GRANT 権限を取り消すには、次のように priv_type 値として GRANT OPTION を使用します。
mysql> REVOKE GRANT OPTION ON ... FROM ...;
今でも残しておいてくれればよかったのに...