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的所有操作权限。
设置角色
角色创建好后,并不是直接生效,而是要把角色设置给对应的用户后才能生效的。具体语法如下:
grant role_name to user;
例2、把角色student_role授权给teacher用户,使得teacher用户可以直接操作stuinfo表和class表的权限。代码如下:
grant student_role to teacher;
然后,可以通过数据字典dba_role_privs查看下,用户teacher设定好的角色。发现已经存在student_role角色,如下: