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

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

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

角色被授予的权限
DBA几乎所有系统权限以及某些角色
SELECT_CATALOG_ROLE数据字典上的对象权限
EXECUTE_CATALOG_ROLE数据字典程序包、过程与函数上的对象权限
DELETE_CATALOG_ROLEDELETE ON SYS.AUD$
DELETE ON SYS.FGA_LOG$
EXP_FULL_DATABASE从数据库中导出数据时查询任何表或序列、执行任何过程或类型以及修改数据字典对象的权限
IMP_FULL_DATABASE执行导入时,在数据库内除了SYS模式之外的任何模式中创建对象的权限
CONNECTALTER SESSION
CREATE CLUSTER
CREATE DBTABASE LINK
CREATE SEQUENCE
CREATE SESSION
CREATE SYNONYM
CREATE TABLE
CREATE VIEW
RESOURCECREATE CLUSTER
CREATE INDEXTYPE
CREATE OPERATOR
CREATE PROCEDURE
CREATE SEQUENCE
CREATE TABLE
CREATE TRIGGER
CREATE TYPE
UNLIMITED TABLESPACE(被授予权限时)
AQ_ADMINISTRATOR_ROLEAdvanced Queuing(对象上的对象权限)
CREATE EVALUATION CONTEXT
CREATE RULE
CREATE RULE SET
DEQUEUE ANY QUEUE
ENQUEUE ANY QUEUE
MANAGE ANY QUEUE
AQ_USER_ROLEEXECUTE ON SYS.DBMS_AQ
EXECUTE ON SYS.DBMS_AQIN
EXECUTE ON SYS.DBMS_AQJMS_INTERNAL
EXECUTE ON SYS.DBMS_TRANSFORM
SCHEDULER_ADMINCREATE ANY JOB
CREATE JOB
EXECUTE ANY CLASS
EXECUTE ANY PROGRAM
MANAGE SCHEDULE(使用WITH ADMIN OPTION授予上述所有权限)
PUBLIC不具有特殊的权限,不过为PUBLIC角色授予权限时,所有用户都会继承该权限

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

1、创建角色

CREATE ROLE命令的语法如下:

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命令修改这个角色的身份验证方法:

ALTER ROLE rolename
[NOT IDENTIFIED | IDENTIFIED BY password | EXTERNALLY | GLOBALLY]

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

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

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

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, ...];

取消角色系统权限语法:

REVOKE system_priv | role_name [, system_priv | role_name, ...]
FROM role | PUBLIC [, role | PUBLIC, ...];

取消角色对象权限语法:

REVOKE ALL [PRIVILEGES] | object_priv [, object_priv, ...]
ON [schema_name.]object_name
FROM role | PUBLIC [, role | PUBLIC, ...]
[CASCADE CONSTRAINTS]

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

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

GRANT role_name [, role_name, ...]
TO user_name | role | PUBLIC [, user_name | role | PUBLIC, ...]
[WITH ADMIN OPTION];

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

REVOKE role_name [, role_name, ...]
FROM user_name | role | PUBLIC [, user_name | role | PUBLIC, ...];

5、设置用户的默认角色

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

ALTER USER username DEFAULT ROLE
role [, role, ...] | ALL [EXCEPT role [, role, ...]] | NONE;

6、启用与禁用角色

SET ROLE命令语法:

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命令语法:

DROP ROLE role_name;

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

$ 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.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值