日期:2014-05-16  浏览次数:20386 次

oracle 10g 和 11g 关于角色口令的区别

角色是一组相关权限的命名集合,使用角色最主要的目的是简化权限管理

而一旦这个集合的权限超过了用户的最低需求,就可能带来数据库的安全风险


角色口令测试

oracle 10g中,无论角色是否有口令,只要你将角色grant给某个用户,那么,默认的情况下,这些角色中的权限,用户都拥有。

oracle 11g中,角色的口令略有修正,当某个角色是拥有口令的话,当你将带有口令的角色 grant 给某个用户的话,那么默认的情况

            下,这个带口令的角色下的所有权限,用户是无法拥有的,只有当 set  那个拥有口令的角色后,那么 ,带口令的

                          角色下的权限才在当前会话下才可以使用,不过,其他的角色都暂时失效,修改只在当前会话有效。



语法:               ------只在当前会话有效
SET ROLE
   { role [ IDENTIFIED BY password ]
     [, role [ IDENTIFIED BY password ] ]...
   | ALL [ EXCEPT role [, role ]... ]
   | NONE
   } ;


oracle 10g 中测试带口令的角色


SYS@ORCL>select * from v$version;


BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE    10.2.0.1.0      Production
TNS for Linux: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production



1. 创建两个角色 role_01 没有密码   role_02 有密码

SYS@ORCL>create role role_01;          


Role created.


SYS@ORCL>create role role_02 identified by oracle;


Role created.

2. 赋予角色 role_01 连接、建表权限
SYS@ORCL>grant connect,create table to role_01;   


Grant succeeded.

3. 赋予角色 role_02 连接、创建视图权限
SYS@ORCL>grant connect,create view to role_02;


Grant succeeded.

4. 创建测试用户 tyger 
SYS@ORCL>create user tyger identified by tyger quota unlimited on users;


User created.

5. 将两个角色赋予tyger
SYS@ORCL>grant role_01,role_02 to tyger;


Grant succeeded.

6. 连接到用户测试
SYS@ORCL>conn tyger/tyger
Connected.
TYGER@ORCL>create table t(x int);


Table created.


TYGER@ORCL>insert into t values(1);