SQL> grant r2 to u1; --把角色r2赋予u1,此时u1具有r1、r2两个权限
Grant succeeded.
SQL> alter user u1 default role r1; --把u1的默认角色设为r1
User altered.
SQL> alter user u1 default role all; --将u1的默认角色设为它所具有的全部角色
User altered.
SQL> alter user u1 default role none; --将u1的默认角色设为空
User altered.
SQL> alter user u1 default role all except r1; --将出角色r1之外的其它角色设为u1的默认角色
User altered.
通过set role命令,可以临时改变一个用户的角色。
SQL> grant r1,r2 to u1;
Grant succeeded.
SQL> alter user u1 default role r1; --把u1的默认角色设为r1
User altered.
SQL> conn u1/u1; --登录用户u1,此时u1具有r1的角色
Connected.
SQL> select * from session_roles;
ROLE
------------------------------
R1
SQL> set role r1,r2 identified by r2; --使u1临时具有r1,r2的权限,因为r2有密码,所以必须要输入密码,这就是建立密码角色的作用。
Role set.
SQL> select * from session_roles; --查询此时u1具有的角色
ROLE
------------------------------
R1
R2
SQL> set role r2 identified by r2; --也可以把u1的角色临时设为r2
Role set.
SQL> select * from session_roles;
ROLE
------------------------------
R2
SQL> set role all except r1; --发现当all里面包含有密码的角色时,会报错,当时下面的却可以
set role all except r1
*
ERROR at line 1:
ORA-01979: missing or invalid password for role 'R2'
SQL> set role all except r2; --把u1的角色设为除r2外
Role set.
SQL> conn /as sysdba
Connected.
SQL> conn u1/u1 --重新登录u1的时候,此时的角色是设置的默认角色
Connected.
SQL> select * from session_roles;
ROLE
------------------------------
R1
SQL> desc dba_roles;
Name Null? Type
----------------------------------------- -------- ----------------------------
ROLE NOT NULL VARCHAR2(30)
PASSWORD_REQUIRED VARCHAR2(8)
dba_role_privs:数据库中用户和角色所具有的角色
SQL> desc dba_role_privs;
Name Null? Type
----------------------------------------- -------- ----------------------------
GRANTEE VARCHAR2(30)
GRANTED_ROLE NOT NULL VARCHAR2(30)
ADMIN_OPTION VARCHAR2(3)
DEFAULT_ROLE VARCHAR2(3)
role_role_privs:数据库中角色所具有的角色
SQL> desc role_role_privs;
Name Null? Type
----------------------------------------- -------- ----------------------------
ROLE NOT NULL VARCHAR2(30)
GRANTED_ROLE NOT NULL VARCHAR2(30)
ADMIN_OPTION VARCHAR2(3)
role_sys_privs:角色所具有的系统权限
SQL> desc role_sys_privs;
Name Null? Type
----------------------------------------- -------- ----------------------------
ROLE NOT NULL VARCHAR2(30)
PRIVILEGE NOT NULL VARCHAR2(40)
ADMIN_OPTION VARCHAR2(3)
role_tab_privs:角色所具有的对象权限
SQL> desc role_tab_privs;
Name Null? Type
----------------------------------------- -------- ----------------------------
ROLE NOT NULL VARCHAR2(30)
OWNER NOT NULL VARCHAR2(30)
TABLE_NAME NOT NULL VARCHAR2(30)
COLUMN_NAME VARCHAR2(30)
PRIVILEGE NOT NULL VARCHAR2(40)
GRANTABLE VARCHAR2(3)
session_roles:当前用户所具有的角色
SQL> desc session_roles;
Name Null? Type
----------------------------------------- -------- ----------------------------
ROLE NOT NULL VARCHAR2(30)