TL;DR
- デフォルトロールはログイン時に有効化
mandatory_rolesはログイン時に有効化されない、全ユーザーからSET ROLEできるロール- ロールのホスト部は意味を持たないような気がする(
role@127.0.0.1は192.168.0.0なアカウントにも割り当てができる) activate_all_roles_on_login = ONにすると、デフォルトロールも割り当てたロールもmandatory_rolesも全部いっぺんにログイン時に有効になる
| ロールの有効化 | ロールの作成 | ロールの割り当て | 割り当ての解除 | |
|---|---|---|---|---|
| ロール | SET ROLE |
CREATE ROLE | GRANT |
REVOKE |
| デフォルトロール | ログイン時 | CREATE ROLE | CREATE USER .. DEFAULT ROLE または GRANT |
REVOKE |
| 必須ロール | SET ROLE |
CREATE ROLE | mandatory_roles を設定した時に自動で |
mandatory_roles からなくなった時に自動で |
デフォルトロールとか必須ロールとかごちゃごちゃしてきたのでメモ。
- フツーに
CREATE ROLEしてCREATE USER ..&&GRANT <role_name>で与える場合、GRANTしたタイミングでmysql.role_edgesにINSERTされる CREATE ROLEしてCREATE USER .. DEFAULT ROLE ..した場合、CREATE USERのタイミングでmysql.role_edgesに入るSET GLOBAL mandatory_roles ..の場合はmysql.role_edgesには入らない
存在しないロールを
SET GLOBAL mandatory_roles で指定すると↓のエラーになる(ただしステートメントはエラーにならず、エラーログにピヨッと現れるだけ)2018-10-29T02:23:39.444341Z 108 [Warning] [MY-010968] [Server] Can't set mandatory_role: There's no such authorization ID role@localhost.
mandatory_roles を REVOKE したり DROP ROLE しようとしたりすると怒られる。mysql80 120> REVOKE role@localhost FROM yoku0825;
ERROR 3628 (HY000): The role `role`@`localhost` is a mandatory role and can't be revoked or dropped. The restriction can be lifted by excluding the role identifier from the global variable mandatory_roles.
mandatory_roles はコンマ区切りで複数指定可能。ただし、ロールのホスト部でフィルタリングがかけられるわけではない。
mysql80 127> SET GLOBAL mandatory_roles = 'role@1.2.3.4,role@localhost';
Query OK, 0 rows affected (0.02 sec)
$ mysql80 -uyoku0825
mysql80 130> SHOW GRANTS;
+---------------------------------------------------------------------+
| Grants for yoku0825@localhost |
+---------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `yoku0825`@`localhost` |
| GRANT `role`@`1.2.3.4`,`role`@`localhost` TO `yoku0825`@`localhost` |
+---------------------------------------------------------------------+
2 rows in set (0.00 sec)
mysql80 130> SET ROLE role@localhost;
Query OK, 0 rows affected (0.00 sec)
mysql80 130> SET ROLE role@1.2.3.4; <-- localhost != 1.2.3.4 だけど判定されないSET ROLEできる
Query OK, 0 rows affected (0.00 sec)
とするとアレかね、
GRANT SELECT ON d1.* TO read_only_roleSET GLOBAL mandatory_roles = read_only_roleGRANT ALL ON d1.* TO read_write_roleCREATE USER apuser DEFAULT ROLE read_write_roleCREATE USER dev1 IDENTIFIED BY ..
とかやると、
apuser はデフォルトで読み書き可能、新規追加するアカウント(たとえば dev1 の次に dev2 とか)はデフォルトで読み取りのみ可能(なロールに SET ROLE できる)、とかの表現になるのか。
あるいは、
activate_all_roles_on_login = ON しておくと SET ROLE read_only_role とかしなくてもデフォルトで読み取りだけ可能とかになる、と。
0 件のコメント :
コメントを投稿