Oracle Default Role 简述(一)

2015-01-21 12:18:02 · 作者: · 浏览: 6

三个维度权限在三个层面上构建了Oracle权限体系框架。传统应用系统的一种配置方式是在数据库层面建立用户,配置相关权限进行操作。这样的系统还可以在一些旧应用系统或者国外业务系统中看到。随着Web应用的广泛使用,Oracle权限体系需求的复杂性其实是在不断降低的。Web应用通常只需要连接一个Schema用户名即可,用户体系是在应用层面加以实现。


最近笔者遇到一个关于角色Role的问题,最后发现是一个Default Role这个经常被忽视的设置出现问题。本文主要系统介绍一下这个特点功能。


1、环境介绍


Oracle的权限体系在过去的版本中都在不断地发展丰富,笔者讨论基于Oracle 11g,具体版本号为11.2.0.4。


SQL> select * from v$version;


BANNER


--------------------------------------------------------------------------------


Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production


PL/SQL Release 11.2.0.4.0 - Production


CORE? ? ? 11.2.0.4.0? ? Production


TNS for Linux: Version 11.2.0.4.0 - Production


NLSRTL Version 11.2.0.4.0 – Production


建立一个全新的用户。


SQL> create user test identified by test;


User created


2、Default Role概论


和系统权限、对象权限相比,角色权限是比较特殊的一种权限类型。它更像是一种组合容器,可以将其他权限以组Group的方式进行组织。一般来说,角色权限Role Privilege最常用的场景是简化管理难度,实现标准化配置管理。另一个角色权限的特点是动态赋予。系统权限和对象权限一旦赋予,用户只要登录就直接获得。而对象权限在这个问题上是可以选择的。


首先我们进行默认设置,对用户test进行一系列角色赋予动作。


SQL> grant connect, resource to test;


Grant succeeded


?


SQL> grant sicspccgrole to test;


Grant succeeded


?


SQL> grant sicspctbcgrole to test;


Grant succeeded


?


SQL> grant sicspctrrole to test;


Grant succeeded


通过视图db_role_privs,可以查看到角色与授予关系。


SQL> select * from dba_role_privs where GRANTEE='TEST';


?


GRANTEE? ? ? ? ? ? ? ? ? ? ? ? GRANTED_ROLE? ? ? ? ? ? ? ? ? ADMIN_OPTION DEFAULT_ROLE


------------------------------ ------------------------------ ------------ ------------


TEST? ? ? ? ? ? ? ? ? ? ? ? ? RESOURCE? ? ? ? ? ? ? ? ? ? ? NO? ? ? ? ? YES


TEST? ? ? ? ? ? ? ? ? ? ? ? ? SICSPCCGROLE? ? ? ? ? ? ? ? ? NO? ? ? ? ? YES


TEST? ? ? ? ? ? ? ? ? ? ? ? ? SICSPCTBTRROLE? ? ? ? ? ? ? ? NO? ? ? ? ? YES


TEST? ? ? ? ? ? ? ? ? ? ? ? ? CONNECT? ? ? ? ? ? ? ? ? ? ? ? NO? ? ? ? ? YES


TEST? ? ? ? ? ? ? ? ? ? ? ? ? SICSPCTBCGROLE? ? ? ? ? ? ? ? NO? ? ? ? ? YES


TEST? ? ? ? ? ? ? ? ? ? ? ? ? SICSPCTRROLE? ? ? ? ? ? ? ? ? NO? ? ? ? ? YES


6 rows selected


重点关注default_role列,对应test的几个权限,都被授予为default_role。换而言之,一个用户被赋予角色之后,直接就是默认角色即default role。


3、相关权限变化


如果角色对象底层权限发生变化,已经授权对象有什么影响呢?


SQL> create role testrole ;


Role created


?


SQL> grant select on sics.cnu_environment to testrole;


Grant succeeded


?


SQL> grant testrole to test;


Grant succeeded


此时新角色testrole被授予为default role。


SQL> select * from dba_role_privs where GRANTEE='TEST';


?


GRANTEE? ? ? ? ? ? ? ? ? ? ? ? GRANTED_ROLE? ? ? ? ? ? ? ? ? ADMIN_OPTION DEFAULT_ROLE


------------------------------ ------------------------------ ------------ ------------


TEST? ? ? ? ? ? ? ? ? ? ? ? ? RESOURCE? ? ? ? ? ? ? ? ? ? ? NO? ? ? ? ? YES


TEST? ? ? ? ? ? ? ? ? ? ? ? ? SICSPCCGROLE? ? ? ? ? ? ? ? ? NO? ? ? ? ? YES


TEST? ? ? ? ? ? ? ? ? ? ? ? ? SICSPCTBTRROLE? ? ? ? ? ? ? ? NO? ? ? ? ? YES


TEST? ? ? ? ? ? ? ? ? ? ? ? ? TESTROLE? ? ? ? ? ? ? ? ? ? ? NO? ? ? ? ? YES


TEST? ? ? ? ? ? ? ? ? ? ? ? ? CONNECT? ? ? ? ? ? ? ? ? ? ? ? NO? ? ? ? ? YES


TEST? ? ? ? ? ? ? ? ? ? ? ? ? SICSPCTBCGROLE? ? ? ? ? ? ? ? NO? ? ? ? ? YES


TEST? ? ? ? ? ? ? ? ? ? ? ? ? SICSPCTRROLE? ? ? ? ? ? ? ? ? NO? ? ? ? ? YES


?


7 rows selected


Testrole底层发生变化。


SQL> grant select on scott.emp to testrole;


Grant succeeded


角色授权关系没有变化。


SQL> select * from dba_role_privs where GRANTEE='TEST';


?


GRANTEE? ? ? ? ? ? ? ? ? ? ? ? GRANTED_ROLE? ? ? ? ? ? ? ? ? ADMIN_OPTION DEFAULT_ROLE


------------------------------ ------------------------------ ------------ ------------


TEST? ? ? ? ? ? ? ? ? ? ? ? ? RESOURCE? ? ? ? ? ? ? ? ? ? ? NO? ? ? ? ? YES


TEST? ? ? ? ? ? ? ? ? ? ? ? ? SICSPCCGROLE? ? ? ? ? ? ? ? ? NO? ? ? ? ? YES


TEST? ? ? ? ? ? ? ? ? ? ? ? ? SICSPCTBTRROLE? ? ? ? ? ? ? ? NO? ? ? ? ? YES


TEST? ? ? ? ? ? ? ? ? ? ? ? ? TESTROLE? ? ? ? ? ? ? ? ? ? ? NO? ? ? ? ? YES


TEST? ? ? ? ? ? ? ? ? ? ? ? ? CONNECT? ? ? ? ? ? ? ? ? ? ? ? NO? ? ? ? ? YES


TEST? ? ? ? ? ? ? ? ? ? ? ? ? SICSPCTBCGROLE? ? ? ? ? ? ? ? NO? ? ? ? ? YES


TEST? ? ? ? ? ? ? ? ?