Oracle角色

Oracle角色其实就是一组权限的集合,比如我们经常用的DBA、connect、resource等角色,都是Oracle系统为我们定义好的一些常用的角色,一般利用这些角色就可以控制好不同需求用户的权限。

Oracle中角色可以授予给多个用户,并且一个用户可以设置多个角色。因此,Oracle数据库也提供了自定义角色的功能,方便不同用户的权限授予。例如,可以自定义个一个角色,可以查询更新特定几个关联表的权限。那么以后但凡有用户想用到这些表的操作权限时,可以直接给该用户设置定义好的角色。


Oracle创建角色

Oracle创建角色分为两个步骤:创建角色、给角色授权:

1、创建角色的语法结构:

create role role_name ;

2、授予角色权限的语法结构:

授予角色权限的语法结构和授予用户权限的语法结构一样,只是授予对象是角色而不是对象而已,具体语法如下:

--授予系统权限
grant system_privilege|all privileges to role_name
[with admin option]
--授予对象权限
grant obj_privilege|all 
on obj_name  to role_name
[with grant option]

例1、利用上面创建角色的语法结构,创建一个具有操作学生信息表(stuinfo)和班级表(class)权限的角色student_role,具体代码如下:

--创建角色 student_role
create role student_role;

--给student_role授于操作stuinfo、class的操作权限
grant all on student.stuinfo to student_role;
grant all on student.class to student_role;

然后,通过数据字典role_tab_privs(角色对应的对象操作权限)、role_sys_privs(角色对应的系统权限)查询对应的权限,如下,可以发现student_role已经具有了表stuinfo和表class的所有操作权限。

Oracle角色


设置角色

角色创建好后,并不是直接生效,而是要把角色设置给对应的用户后才能生效的。具体语法如下:

grant role_name to user;

例2、把角色student_role授权给teacher用户,使得teacher用户可以直接操作stuinfo表和class表的权限。代码如下:

grant student_role to teacher;

然后,可以通过数据字典dba_role_privs查看下,用户teacher设定好的角色。发现已经存在student_role角色,如下:

Oracle角色