「MySQL道普請便り」
今回はこのシステム変数による挙動や注意点について確認していきましょう。なお、
partial_revokesの設定
partial_
mysql> SHOW VARIABLES like 'partial_revokes'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | partial_revokes | OFF | +-----------------+-------+ 1 row in set (0.01 sec) mysql> SET GLOBAL partial_revokes = 1; Query OK, 0 rows affected (0.04 sec)
これで設定は完了です。ためしに、
mysql> CREATE USER lhfukamachi@localhost IDENTIFIED BY '*****'; Query OK, 0 rows affected (0.05 sec) ql>GRANT SELECT ON *.* TO lhfukamachi@localhost; Query OK, 0 rows affected, 1 warning (0.00 sec) mysql>REVOKE SELECT ON mysql.* FROM lhfukamachi@localhost; Query OK, 0 rows affected, 1 warning (0.00 sec) mysql>SHOW GRANTS FOR lhfukamachi@localhost; +-----------------------------------------------------------+ | Grants for lhfukamachi@localhost | +-----------------------------------------------------------+ | GRANT SELECT ON *.* TO `lhfukamachi`@`localhost` | | REVOKE SELECT ON `mysql`.* FROM `lhfukamachi`@`localhost` | +-----------------------------------------------------------+ 2 rows in set (0.00 sec)
REVOKEで権限を剥奪後にSHOW GRANTS構文で確認すると、
mysql> SELECT current_user(); +-----------------------+ | current_user() | +-----------------------+ | lhfukamachi@localhost | +-----------------------+ 1 row in set (0.00 sec) mysql> SELECT * FROM mysql.user; ERROR 1142 (42000): SELECT command denied to user 'lhfukamachi'@'localhost' for table 'user'
権限がなくてエラーとなりました。もちろんmysqlスキーマ以外のスキーマに対してはSELECT構文を利用することはできます。
このように、
mysql> SELECT concat(user,'@', host), user_attributes FROM mysql.user WHERE user = 'lhfukamachi' and host = 'localhost'; +------------------------+---------------------------------------------------------------------+ | concat(user,'@', host) | user_attributes | +------------------------+---------------------------------------------------------------------+ | lhfukamachi@localhost | {"Restrictions": [{"Database": "mysql", "Privileges": ["SELECT"]}]} | +------------------------+---------------------------------------------------------------------+ 1 row in set (0.00 sec)
partial_revokesの注意点
一度partial_
mysql> SET GLOBAL partial_revokes = 0; ERROR 3896 (HY000): At least one partial revoke exists on a database. The system variable '@@partial_revokes' must be set to ON.
OFFにする必要がある場合は、
また、
レプリケーションを利用する場合についても、
mysql> SHOW SLAVE STATUS\G 〈省略〉 Last_SQL_Errno: 1141 Last_SQL_Error: Error 'There is no such grant defined for user 'lhfukamachi' on host 'localhost'' on query. Default database: ' '. Query: 'REVOKE SELECT ON mysql.* FROM lhfukamachi@localhost' Replicate_Ignore_Server_Ids:
rootなどの管理者ユーザー以外にもGRANT OPTIONを所持しているユーザーがいる場合についても気をつけましょう。GRANT OPTIONを所持していることによって権限付与ができるのですが、
このあたりの挙動については、
まとめ
今回はpartial_