设想:
- 我有实例A
- 我有实例B
- 我在 instanceA 中有 USER1
- 我在 instanceB 中有 USER1
- instancA 中的 USER1 具有四个授予它的角色:
- ROLE1 默认是 admin_option 否
- ROLE2 默认 false admin_option 是
- ROLE3 默认 false admin_option 否
- ROLE3 默认是 admin_option 是
- instanceB 中的 USER1 未授予任何角色
- 所有提到的角色也存在于 instanceB 中,尽管未授予 USER1
- 我已经编写了一个生成 DDL 的脚本,以便在 instanceB 中复制 USER1 的角色授权。
问题:
我还没有找到一种以编程方式执行以下操作的方法,因为该部分在子句
DEFAULT=NO
中不存在。GRANT ROLE
- 将 ROLE1 授予 USER1;-- 管理选项无
- 使用管理员选项将 ROLE2 授予 USER1 DEFAULT NO ;
- 将 ROLE2 授予 USER1 DEFAULT NO;
- 使用管理员选项将 ROLE3 授予 USER1;
请注意,我希望在 instanceB 中复制与 USER1 在 instanceA 中相同的角色集,这意味着其中两个角色是默认的,两个不是。
我研究了在授予 ROLE2 和 ROLE3 后将默认角色设置为 false
ALTER USER DEFAULT ROLE
,但仅适用于将所有角色设置为默认值或使用 NONE 将所有角色设置为非默认值。- 我找不到仅将 ROLE2 和 ROLE3 设置为非默认值并将 ROLE1 和 ROLE2 设置为默认值的方法。
- 我知道我可以使用可视控制台进行设置,但我需要自动执行此操作,因此我需要语法方式来执行此操作。
- 我不想让角色要求输入密码。数据库中的所有角色都不是密码角色。
您必须使用 GRANT 命令授予角色(如果需要,使用 admin 选项),然后使用 ALTER USER 将角色设置为默认值(或不设置)。所以,命令的顺序是,
使用sql生成sql的一种方式如下,可以在instanceA中运行这条sql,如果需要,可以通过替换username,在instanceB中实际执行生成的脚本。一定要测试,