11.3 角色的管理
角色是一组权限的集合,使用角色的目的是使权限管理更加方便。假设有10个用户,这些用户为了访问数据库,最少应该具有CREATE SESSION、CREATE TABLE、UNLIMITED TABLESPACE等几个系统权限。如果将这些权限分别授予这些用户,那么需要进行的授权次数是比较多的。但是如果把这些权限事先放在一起,然后作为一个整体授予这些用户,那么每个用户只需一次授权,授权的次数将大大减少,而且用户数越多,需要指定的权限越多,这种授权方式的优越性就越明显。这些事先组合在一起的一组权限就是角色,角色中的权限既可以是系统权限,也可以是对象权限。
为了使用角色,首先在数据库中创建一个角色,这时角色中没有任何权限。然后向角色中添加权限。最后将这个角色授予用户,这个用户就具有了角色中的所有权限。在使用角色的过程中,可以随时向角色中添加权限,也可以随时从角色中删除权限,用户的权限也随之改变。如果要回收所有的权限,只要将角色从用户回收即可。图11.1表示用户与角色之间的关系。
图 11.1 角色与授权
11.3.1 角色的创建和删除
在数据库中有两类角色,一类是Oracle预定义的角色,一类是用户自定义的角色。Oracle预定义的角色在数据库被创建之后即存在,并且已经包含了一系列的权限,数据库管理员可以将这些角色直接授予用户。常用的角色有CONNECT、RESOURCE、DBA等角色,表11.3列出了常见的几个角色及其所包含的权限。
在新创建一个用户时,为了使其具有最基本的权限,最简单的方法是将CONNECT和RESOURCE两个角色授予该用户。
DBA是一个特殊的角色,在这个角色中包含了数据库中的绝大部分系统权限。表11.4列出了这个角色所包含的部分系统权限。
除了Oracle预定义的角色以外,用户还可以自己定义角色。一般情况下创建角色的操作只能由sys用户完成,如果普通用户要定义角色,必须具有“CREATE ROLE”系统权限。创建角色的命令是CREATE ROLE,它的语法格式为:
CREATE ROLE角色名;
例如,创建一个名为role1的角色,可以执行以下语句:
SQL>CREATE ROLE role1;
删除角色的命令是“DROP ROLE”。角色被删除时,角色中的权限都被从用户回收。例如,删除刚才创建的角色的语句为:
SQL>DROP ROLE role1;