Oracle系统权限基础是建立在三个维度层面上,即系统权限(System Privilege)、对象权限(Object Privilege)和角色权限(Role Privilege)。系统权限定义了用户可以执行的某些行为操作;对象权限定义了用户在某个系统对象(如数据表、视图等)的操作权限;角色权限更像是一个容器对象,可以将一组系统权限、对象权限甚至其他角色权限容纳到其中。
  三个维度权限在三个层面上构建了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。