oracle角色的管理与使用
oracle角色的管理与使用
角色是相关权限的命令的集合,使用角色的主要目的是简化权限管理.
预定义角色是oracle提供的角色,这些角色是在建立数据库,安装数据字典视图何PL/SQL包时建立的,并且每种角色都用于执行一些特定管理任务.
1,CONNECT角色
CONNECT角色时在建立数据库时,oracle执行脚本SQL.BSQ自动建立的角色,该角色具有应用开发人员所需的多数权限.CONNECT角色具有的所有系统权限如下:
ALTER SESSION 修改会话参数设置
CREATE CLUSTER 建立簇
CREATE DATABASE LINK 建立数据库链
CREATE SEQUENCE 建立序列
CREATE SESSION 建立会话(连接到数据库)
CREATE PUBLIC SYNONYM 建立同义词
CREATE TABLE 建表
CREATE VIEW 建立视图
2,RECOURCE角色
RECOURCE 角色时在建立数据库时,oracle执行脚本SQL.BSQ自动建立的角色,该角色具有应用开发人员所需的其他权限.如建立存储过从,触发器等.建立数据 库用户后,一般情况下只要给用户授予CONNECT和RECOURCE角色就足够了.需要注意的时,RECOURCE角色隐含具有UNLIMITED TABLESPACE系统权限.
CREATE CLUSTER 建立簇
CREATE INDEXTYPE 建立索引类型
CREATE PROCEDURE 建立PL/SQL程序单元.
CREATE SEQUENCE 建立序列
CREATE TABLE 建表
CREATE TRIGGER 建立触发器
CREATE TYPE 建立类型
3.DBA
该角色具有所有系统权限和WITH ADMIN OPTION选项.默认的DBA用户为SYSTEM,该用户可以将系统权限授予其他用户,需要注意的是,DBA角色不具备SYSDBA和SYSOPER特权,而SYSDBA和SYSOPER自动具有DBA角色的所有权限.
4,EXECUTE_CATALOG_ROLE
EXECUTE_CATELOG_ROLE角色提供了对所有系统PL/SQL包(DBA_XXX)的EXECUTE对象权限
5,SELECT_CATALOG_ROLE
该角色提供了在所有数据字典(DBA_XXX)上的SELECT对象权限.
6,DELETE_CATALOG_ROLE
该角色提供了系统审计表SYS.AUD$上的DELETE对象权限.
7,EXP_FULL_DATABASE
该角色用于执行数据库的导出操作.该角色具有的权限和角色为:
SELECT ANY TABLE 查询任意表
BACKUP ANY TABLE 备份任意表
EXECUTE ANY PROCEDURE 执行任何过程,函数和包
EXECUTE ANY TYPE 执行任何对象类型
ADMINISTER RESOURCE MANAGER 管理资源管理器
EXECUTE_CATALOG_ROLE 执行任何PL/SQL系统包
SELECT_CATALOG_ROLE 查询任何数据字典
8.IMP_FULL_DATABASE
该角色用于执行数据库导入操作,它包含了EXECUTE_CATALOG_ROLE,SELECT_CATALOG_ROLE角色和大量系统权限.
9.RECOVERY_CATALOG_OWNER
该角色为恢复目录所有者提供了系统权限.
CREATE SESSION 建立会话
ALTER SESSION 修改会话参数设置
CREATE SYNONYM 建立同义词
CREATE VIEW 建立视图
CREATE DATABASE LINK 建立数据链
CREATE TABLE 建立表
CREATE CLUSTER 建立簇
CREATE SEQUENCE 建立序列
CREATE TRIGGER 建立出发器
CREATE PROCEDURE 建立过程,函数和包
自定义角色是在建立数据库之后由DBA用户建立的角色.该角色初始没有任何权限.为了使角色起作用,需要为其授予相应的权限.角色不仅可以简化权限管理.而且通过禁止或激活角色还可以控制权限的可用性.
建立角色是使用CREATE ROLE命令完成的.可以指定角色的验证方式(非验证,数据库验证等)
1,建立角色时,如果部指定任何验证方式,表示该角色使用非验证方式:通过指定NOT IDENTIFIED选项可以指定非验证方式.
CREATE ROLE public_role NOT IDENTIFIED;
2,数据库验证是使用数据库来检查角色,口令的方式.采用这种验证方式时,角色名及口令存放在数据库.激活角色时,必须提供口令.对于用户所私有的角色来说,建立角色时应为其提供口令.
CREATE ROLE private_role IDENTIFIED BY private;
建立角色时,角色没有任何权限,为了使角色可以完成特定任务,必须为其授予系统权限和对象权限.使用角色的目的是简化权限管理,为了是角色起作用,必须将角色授予用户.
1,给角色授权.
给角色授权和给用户授权没有任何区别,需要注意,系统权限UNLIMITED TABLESPACE 和对象权限的WITH GRANT OPTION 选项不能授予角色.不能用一条GRANT语句同时授予系统权限和对象权限.例:
GRANT CREATE SESSION TO public_role WITH ADMIN OPTION;
GRANT SELECT ON scott.emp TO public_role;
GRANT INSERT, UPDATE, DELETE ON scott.emp TO PRIVATE_ROLE;
2,分配角色与授予系统权限的命令完全相同.
例:
GRANT public_role, private_role TO blake WITH ADMIN OPTION;
激活和禁止角色
激活角色是指角色具有的权限生效,禁止角色是指使角色具有的权限临时失效.
1,默认角色.
默认角色使用户所具有角色的子集,当为用户指定默认角色后,以该用户身份登陆时会自动激活起默认角色.语法如下:
ALTER USER user DEFAULT ROLE
{role [,role] … | ALL [EXCEPT role [,role] … ] | NONE }
ALL 表示将用户具有的所有角色都设置为默认角色,NONE则表示不指定默认角色.
2,激活和禁止角色.
设置了用户的默认角色后,当以该用户身份登陆时会自动激活默认角色.
在SQL*PLUS中激活或禁止角色是使用SET ROLE命令完成的,而在其他应用环境中可以使用过程DBMS_SESSION.SET_ROLE激活或禁止角色.需要注意,激活新角色会自动禁止先前角色.
如果角色未使用任何验证方式,那么可以直接激活角色.例:
SET ROLE public_role;
或exec dbms_session.set_role(‘public_role’)
如果角色使用了数据库验证方式,那么在激活角色时必须提供口令.
SET ROLE private_role IDENTIFIED BY private;
或exec dbms_session.set_role(‘private_role INENTIFIED BY private’)
3,禁止角色.
SET ROLE NONE;
或exec dbms_session.set_role(‘NONE’)
修改角色是使用命令ALTER ROLE完成的.
修改验证为非验证:ALTER ROLE private_role NOT IDENTIFIED;
修改非验证非验证:ALTER ROLE public_role IDENTIFIED BY private;
删除角色
DROP ROLE private_role;
1,显示所有角色.
查询数据字典DBA_ROLES,可以显示数据库所包含的所有角色.
SELECT * FROM dba_roles;
Role用于标识角色名,password用于标识角色验证方式(NO标识采用非验证方式,YES标识采用数据库验证方式)
2,显示用户所具有的角色及默认角色.
DBA_ROLE_PRIVS,可以显示用户或角色所具有的角色信息.
ROLE_ROLE_PRIVS,可以显示角色具有的其他角色信息
USER_ROLE_PRIVS,可以显示当前用户所具有的角色.
SELECT granted_role, default_role from dba_role_privs WHERE grantee=’BLAKE’;
Granted_role标识已经被授予用户的角色,default_role用于标识角色是否为用户默认角色.
3,显示角色所具有的系统权限.
ROLE_SYS_PRIVS,显示角色所具有的系统权限.
DBA_SYS_PRIVS,显示用户或角色所具有的系统权限.
SELECT privilege,admin_option FROM role_sys_privs WHERE role=’PUBLIC_ROLE’;
Privilege用于标识角色所具有的系统权限,admin_option用于标识角色是否具有转授相应系统权限的权限,role用于标识角色名.
4,显示角色所具有的对象权限.
DBA_TAB_PRIVS可以显示用户或角色所具有的对象权限.
ROLE_TAB_PRIVS可以显示角色所具有的对象权限或列权限
SELECT owner||’.’||table_name owner_table, privilege
FROM role_tab_privs
WHERE role=’PUBLIC_ROLE’;
Owner 用于标识对象所有者,table_name用于标识对象名,privilege用于标识角色所具有的对象权限.role用于标识角色名.
5,显示当前会话激活的角色.
通过查询数据字典视图session_roles,可以显示当前会话所激活的角色.
SELECT * FROM session_roles;
OS角色是使用OS管理角色的方式,使用OS验证方式管理角色时,过去给用户授予的数据库角色不再起任何作用.使用OS角色时,要遵守如下条件:
必须将初始化参数OS_ROLES设置为TRUE.需要注意,将该参数设置为TRUE后,过去授予用户的角色不再起作用.
确保SQLNET.ORA文件选项SQLNET.AUTHENTICATION_SERVICES的值为NTS.