创建角色语法:
CREATE ROLE role_name {[IDENTIFIED BYpassword] | [IDENTIFIED EXTERNALLY]};
默认情况下如果使用了IDENTIFIED BY password则该角色是被禁用的。如果要启用该角色则需 SET ROLE role_name IDENTIFIED BYpassword;
给角色授权的方法和给用户授系统权限和对象权限是一样的语法格式。
回收角色授权和回收用户的系统权限和对象权限是一样的语法格式。
更改角色:
ALTER ROLE role_name {[NOT IDENTIFIED] |[IDENTIFIED BY password] | [IDENTIFIED EXTERNALLY]};
NOT IDENTIFIED 表示启用这个角色之前不需要进行认证。
给用户授予角色
GRANT role_name [,role_name2]……TO {user |role| PUBLIC} [,{user|role|PUBLIC}]…….
[WITH ADMIN OPTION]
回收用户的角色
REVOKE role_name[,role_name2]……FROM {user | role|PUBLIC} [,{user|role|PUBLIC}]………
回收角色不会级联回收,这和回收系统权限是相同的。
更改用户的默认角色
ALTER USER user_name DEFAULTROLE{role_1[,role_2]……|ALL [EXCEPT role_x[,role_y]…]|NONE};
默认角色是用户的所有角色的一个子集。用户登录后会自动启用默认角色。默认角色起作用,其他角色不起作用。
EXCEPT role_x等子句表示后面的角色不是默认角色。
NONE 表示授予用户的所有角色都不是默认角色。
启用或禁用角色(是由当前会话的用户来完成的)
SET ROLE 命令和DBMS_SESSION.SET_ROLE过程都可以用于启用或禁用角色。但是不
能在PL/SQL的过程中使用 SET ROLE命令。初始化参数MAX_ENABLED_ROLES限制了可以启
用的角色数量。使用SHOW PARAMETER MAX_ENABLED_ROLES可以查询其值。
语法:
SET ROLE{role_1 [IDENTIFIEDBY password_1]
[,role_2[IDENTIFIED BY password_2]]………
| ALL [EXCEPT role_x [,role_y]…….] |NONE};
NONE:表示禁用所有授予用户的角色。
EXCEPT 子句后面的role_x和role_y等表示禁用的角色。
ALL 表示启用除了在EXCEPT子句中指定的role_x和role_y等之外的角色。
查看所有角色
SELECT * FROM DBA_ROSE;
查询某角色中包含的权限
系统:SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE='角色名'
SELECT * FROM DBA_SYS_PRIVS WHERE ROSE='角色名'
对象:SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE='对象名'
用户具有什么样的权限
SELECT * FROM DBA_ROSE_PRIVS WHERE GRANTEE='用户名'
查看所有系统权限
SELECT * FROM SYSTEM_PRIVILEGE_MAP
查看所有对象权限
SELECT * FROM DBA_TAB_PRIVS
删除角色
DROP ROLE role_name;
PL/SQL过程与权限、角色的关系
默认情况下,PL/SQL过程、函数、包都是使用“定义者”的命名空间和权限来执行的。就算调用者权限再大,此时调用者的权限也相当于只有“定义者”所具有的权限。反之,就算调用者没有被授予操作该对象的权限,但如果该对象的“定义者”有这个权限便可操作。
另一种情况就是,如果“定义者”在该对象中加入了 AUTHID CURRENT_USER选项指定调用者命名空间和权限,调用者也不能对该对象执行操作。
系统权限的 unlimited tablespace 和对象权限的 with grant option 不能够授予角色(自定义的角色)
系统权限的回收不是级联回收,只能单个回收
with grant option 只能用于授予用户而不能授予角色
对象权限的回收是级联回收的,这是与系统权限回收不同的地方
with admin option 授予系统权限(可以级联授予)
with grant option 授予对象全系(可以级联授予)