Oracle
Oracle:如何僅將某些角色設置為使用者的非預設角色(無 GUI)
設想:
- 我有實例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 中具有的相同角色集,這意味著其中兩個角色是 default 而兩個不是。
- 我研究了在授予 ROLE2 和 ROLE3 後將預設角色設置為 false
ALTER USER DEFAULT ROLE
,但僅適用於將所有角色設置為預設值或使用 NONE 將所有角色設置為非預設值。- 我找不到僅將 ROLE2 和 ROLE3 設置為非預設值並將 ROLE1 和 ROLE2 設置為預設值的方法。
- 我知道我可以使用可視控制台進行設置,但我需要自動執行此操作,因此我需要語法方式來執行此操作。
- 我不想讓角色要求輸入密碼。數據庫中的所有角色都不是密碼角色。
您必須使用 GRANT 命令授予角色(如果需要,使用 admin 選項),然後使用 ALTER USER 將角色設置為預設值(或不設置)。所以,命令的順序是,
- 授予角色(根據需要使用管理員選項)
- 更改使用者以將所有角色設置為非預設
- 更改使用者以僅將所需角色設置為預設值。
使用sql生成sql的一種方式如下,可以在instanceA中執行這個sql,如果需要,可以通過替換username,在instanceB中實際執行生成的腳本。一定要測試,
with x as (select 'USER1' as usr from dual) select cmd from ( select 1 as ord, 'grant ' || granted_role || ' to ' || grantee || case when admin_option = 'YES' then ' with admin option' end || ';' as cmd from dba_role_privs, x where grantee = x.usr union all select distinct 2 as ord, 'alter user ' || grantee || ' default role none;' as cmd from dba_role_privs, x where grantee = x.usr union all select 3 as ord, 'alter user ' || grantee || ' default role ' || granted_role || ';' as cmd from dba_role_privs, x where grantee = x.usr and default_role = 'YES') order by ord