--================================
--Oracle 角色、配置文件
--================================
一、角色
1.角色
权限的集合,可以分配给一个用户或其他角色,但角色不能授予自己,也不能循环授予
角色的优点
可以先创建角色,向该角色赋予一系列权限,然后再将该角色授予多个用户或角色
增加或删除角色中的某一权限,被授予该角色的所有用户或角色自动地获得新增权限或删除旧的权限
可以为角色设置密码
2.创建修改角色
CREATE ROLE role_name
[NOT IDENTIFIED(默认) | IDENTIFIED BY password | EXTERNALLY |GLOBALLY];
注:同一个数据库中角色名称必须唯一,且不能使用已存在的用户名称
不支持with grant option 为角色授予对象权限
支持with admin option 为角色授予系统权限或另一个角色
使用Enterprise Manager创建某个用户时,该用户被自动授予了CONNECT角色,
即同时具有了该角色的所有权限
IDENTIFIED BY EXTERNALLY
意味着了启用一个角色,用户必须是某个操作系统组的一个成员,该操作系统组的名称应当与角色相对应。
当希望通过操作系统对角色进行身份认证,则需要设置OS_ROLE参数为TRUE
且当设定了使用IDENTIFIED BY EXTERNALLY身份验证,必须在数据库驻留的服务器上按以下格式创建组
ora_<SID>_<ROLE>[_[d][a]]
d:指示<ROLE>部分指定的角色为用于用户的默认角色
a:指示可以使用with admin option为用户授予<ROLE>部分所指定的角色
关于外部身份验证,请参考:Oracle 密码文件
常用的角色
角色 被授予的权限
DBA 几乎所有系统权限
SELECT_CATALOG_ROLE 数据字典上的对象权限,未被授予任何系统权限
EXECUTE_CATALOG_ROLE 数据字典上的程序包、过程、函数的对象权限
DELETE_CATALOG_ROLE DELETE ON SYS.AUD$
DELETE ON SYS.FGA_LOG$
EXP_FULL_DATABASE 从数据库中导出数据时查询任何表或序列、执行任何过程或类型以及修改
数据字典对象的权限
IMP_FULL_DATABASE 执行导入时,在数据库内除了sys模式之外的任何模式中创建对象的权限
CONNECT ALTER SESSION
CREATE CLUSTER
CREATE DATABASE LINK
CREATE SEQUENCE
CREATE SESSION
CREATE SYNONYM
CREATE TABLE
CREATE VIEW
RESOURCE CREATE CLUSTER
CREATE INDEXTYPE
CREATE OPERATOR
CREATE PROCEDURE
CREATE SEQUENCE
CREATE TABLE
CREATE TRIGGER
CREATE TYPE
UNLIMITED TABLESPACE (when granted)
AQ_ADMINISTRATOR_ROLE Advanced Queuing 对象上的对象权限
CREATE EVALUATION CONTEXT
CREATE RULE
CREATE RULE SET
DEQUEUE ANY QUEUE
ENQUEUE ANY QUEUE
MANAGE ANY QUEUE
AQ_USER_ROLE EXECUTE ON SYS.DBMS_AQ
EXECUTE ON SYS.DBMS_AQIN
EXECUTE ON SYS.DBMS_AQJMS_INTERNAL
EXECUTE ON SYS.DBMS_TRANSFORM
SCHEDULER_ADMIN CREATE ANY JOB
CREATE JOB
EXECUTE ANY CLASS
EXECUTE ANY PROGRAM
MANAGE SCHEDULE
(使用WITH ADMIN OPTION授予上述所有权限)
PUBLIC 不具有特殊的权限,不过为public角色授予权限时,所有用户都会继承该权限
--创建不要口令的角色clerk
SQL> CREATE ROLE clerk;
--创建要口令的角色sales
SQL> CREATE ROLE sales IDENTIFIED BY money;
--创建一个需要使用外部标识(如操作系统)的角色manager
SQL> CREATE ROLE manager IDENTIFIED EXTERNALLY;
--创建后查看角色:
SQL> SELECT role,password_required FROM dba_roles;
ROLE PASSWORD
------------------------------ --------
CLERK NO
SALES YES
MANAGER EXTERNAL
角色修改:
ALTER ROLE rolename
[NOT IDENTIFIED | IDENTIFIED
BY password | EXTERNALLY | GLOBALLY];
一个角色在创建后可以修改,但只能修改它的验证方法。
但只有角色是使用带有with ADMIN option 选项的GRANT 语句授予的或者具
有ALTER ANY ROLE 系统权限的用户时,才可以修改这个角色
--将角色clerk 的验证方法改为使用外部(如操作系统)标识
SQL> ALTER ROLE clerk IDENTIFIED EXTERNALLY;
--将角色sales 的验证方法改为不使用任何标识方法
SQL> ALTER ROLE sales NOT IDENTIFIED;
--将角色manager 的验证方法改为使用口令标识,口令为vampire
SQL> ALTER ROLE manager IDENTIFIED BY vampires;
--再查询后即可看到变化
SELECT role,password_required FROM dba_roles
3.为角色授予和取消权限
a.角色授权
为角色授予系统权限语法
GRANT system_priv [, system_priv, ...]
TO role | PUBLIC [, role | PUBLIC, ...]
[WITH ADMIN OPTION];
为角色授予对象权限语法
GRANT ALL [PRIVILEGES] | object_priv [(column, column, ...)]
[, object_priv [(column, column, ...(] , ...]
ON [schema_name.]object_name
TO role | PUBLIC [, role | PUBLIC, ...];
--为角色赋予权限(GRANT):
SQL> show user;
USER is "SYSTEM"
SQL> CREATE ROLE manager;
Role created.
--赋予系统权限
SQL> GRANT CREATE TABLE,CREATE VIEW,CREATE SESSION TO manager WITH ADMIN OPTION;
Grant succeeded.
--赋予对象权限
SQL> GRANT SELECT ,INSERT ,UPDATE ON scott.emp TO manager;
Grant succeeded.
--查看角色的系统权限(role_sys_privs)
SQL> SELECT * FROM role_sys_privs WHERE role = 'MANAGER';
ROLE PRIVILEGE ADM
------------------------------ -------------------- ---
MANAGER CREATE SESSION YES
MANAGER CREATE TABLE YES
MANAGER CREATE VIEW YES
--查看角色的对象权限(role_tab_privs)
SQL> SELECT * FROM role_tab_privs WHERE role = 'MANAGER';
ROLE OWNER TABLE_NAME COLUMN_NAME PRIVILEGE GRA
------------------------- -------------------- -------------------- ----------- -------------------- ---
MANAGER SCOTT EMP UPDATE NO
MANAGER SCOTT EMP INSERT NO