OCP认证考试指南(7):管理数据库用户(3)

角色是保存权限的容器。如果为某个用户授予一个角色,那么为这个角色授予的所有权限都会自动应用于该用户。就角色而言,使用WITH ADMIN OPTION为角色授予的权限不能级联取消。

Oracle 10G中的预定义角色及其被授予的权限

角色 被授予的权限
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 DBTABASE 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(被授予权限时)
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角色授予权限时,所有用户都会继承该权限

使用EM创建某个用户时,该用户会被自动授予CONNECT角色。

1、创建角色

CREATE ROLE命令的语法如下:

?[Copy to clipboard] View Code SQL
CREATE ROLE rolename
[NOT IDENTIFIED | IDENTIFIED BY password | EXTERNALLY | GLOBALLY];

执行CREATE ROLE 命令的默认结果是创建一个具有特定名称的角色,并且不需要进行任何身份验证就能够支持指定的用户启用这个角色;希望借助某个应用程序启用一个角色,也可以通过后面加口令的IDENTIFIED BY子句;也可以用IDENTIFIED EXTERNALLY对角色进行身份验证,意味着启用一个角色,用户必须是操作系统组的一个成员。

IDENTIFIED EXTERNALLY验证:

Oracle初始化参数OS_ROLES设置为TRUE(默认为FALSE)。

必须在数据库驻留服务器上创建具有如下命名约定的组:ora__[_[d][a]]

  • <SID>:ORACLE_SID参数值。
  • <ROLE>:在数据库中创建的、需要使用IDENTIFIED EXTERNALLY进行身份验证的角色名称。
  • d:指示<ROLE>部分指定的角色为用于用户的默认角色。如果指定了a或d,或者同时指定了a或d,它们前面必须使用下划线。
  • a:指示可以使用WITH ADMIN OPTION为用户授予<ROLE>部分所指定的角色。如果指定了a或d,或者同时指定了a或d,它们前面必须使用下划线。

例:在我们这个ocp数据库创建一个角色名为dandanAdmin,并且希望这个角色是用于某些用户的默认角色以及使用WITH ADMIN OPTION为另一些用户授予的默认角色,我们应该创建两个组“ora_ocp_dandanAdmin_d”和“ora_ocp_dandanAdmin_da”。

2、修改角色

ALTER ROLE命令修改这个角色的身份验证方法:

?[Copy to clipboard] View Code SQL
ALTER ROLE rolename
[NOT IDENTIFIED | IDENTIFIED BY password | EXTERNALLY | GLOBALLY]

3、为角色授予和出取消权限

为角色授权的方法和为用户授权的方法差不多,下面我们来看看。

为角色授予系统权限语法:

?[Copy to clipboard] View Code SQL
GRANT system_priv [, system_priv, ...]
TO role | PUBLIC [, role | PUBLIC, ...]
[WITH ADMIN OPTION];

为角色授予对象权限语法:

?[Copy to clipboard] View Code SQL
GRANT ALL [PRIVILEGES] | object_priv [(column, column, ...)]
[, object_priv [(column, column,...)], ...]
ON [schema_name.]object_name
TO role | PUBLIC [, role | PUBLIC, ...];

取消角色系统权限语法:

?[Copy to clipboard] View Code SQL
REVOKE system_priv | role_name [, system_priv | role_name, ...]
FROM role | PUBLIC [, role | PUBLIC, ...];

取消角色对象权限语法:

?[Copy to clipboard] View Code SQL
REVOKE ALL [PRIVILEGES] | object_priv [, object_priv, ...]
ON [schema_name.]object_name
FROM role | PUBLIC [, role | PUBLIC, ...]
[CASCADE CONSTRAINTS]

4、为用户授予和取消角色

使用GRANT命令为用户授予角色语法:

?[Copy to clipboard] View Code SQL
GRANT role_name [, role_name, ...]
TO user_name | role | PUBLIC [, user_name | role | PUBLIC, ...]
[WITH ADMIN OPTION];

REVOKE命令取消用户角色语法:

?[Copy to clipboard] View Code SQL
REVOKE role_name [, role_name, ...]
FROM user_name | role | PUBLIC [, user_name | role | PUBLIC, ...];

5、设置用户的默认角色

如果没有使用ALTER USER命令或EM进行指定,那么为某个用户授予的所有角色都被视为这个用户的默认角色。

?[Copy to clipboard] View Code SQL
ALTER USER username DEFAULT ROLE
role [, role, ...] | ALL [EXCEPT role [, role, ...]] | NONE;

6、启用与禁用角色

SET ROLE命令语法:

?[Copy to clipboard] View Code SQL
SET ROLE ALL [EXCEPT role_name [, role_name]] | NONE |
role_name [IDENTIFIED BY password] 
[, role_name [IDENTIFIED BY password, ...]]

如果希望为某个用户禁用一个角色,那么就需要通过再次执行SET ROLE命令或执行DBMS_SESSION.SET_ROLE过程来省略不希望用户启用的角色。

7、删除角色

为了删除角色,必须作为创建这个角色的,被授予DROP ANY ROLE系统权限的用户,或者作为使用WITH ADMIN OPTION被授予这个角色的用户。DROP ROLE命令语法:

?[Copy to clipboard] View Code SQL
DROP ROLE role_name;

8、疯狂练习
一下这么多的权限、角色、用户、管理什么的。。。要搞懂看来要疯狂一把了。

?[Copy to clipboard] View Code SQL
$ sqlplus / as sysdba
 
SQL*Plus: Release 10.2.0.1.0 - Production on Wed Sep 24 10:23:57 2008
 
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
 
Connected to an idle instance.
 
SQL> startup nomount
ORACLE instance started.
 
Total System Global Area  264241152 bytes
Fixed Size                  1218868 bytes
Variable Size              71304908 bytes
Database Buffers          188743680 bytes
Redo Buffers                2973696 bytes
SQL> alter database mount;
 
Database altered.
 
SQL> alter database open;
 
Database altered.
 
SQL> create user a identified by a123;
 
User created.
 
SQL> create user b identified by b123;
 
User created.
 
SQL> create role r1;
 
Role created.
 
SQL> grant create session to r1;
 
Grant succeeded.
 
SQL> grant r1 to a with admin option;
 
Grant succeeded.
 
SQL> conn a/a123
Connected.
SQL> grant r1 to b ;
 
Grant succeeded.
 
SQL> conn b/b123;
Connected.
 
SQL> conn a/a123;
Connected.
SQL> set role r1;
 
Role set.
 
SQL> conn a/123;
ERROR:
ORA-01017: invalid username/password; logon denied
 
 
Warning: You are no longer connected to ORACLE.
 
SQL> conn / as sysdba
Connected.
 
SQL> revoke r1 from b;
 
Revoke succeeded.
 
SQL> revoke create session from r1;
 
Revoke succeeded.
 
SQL> drop role r1;
 
Role dropped.

你可能感兴趣的:(OCP认证考试指南(7):管理数据库用户(3))