角色就是相关权限的命令集合,使用角色的主要目的就是为了简化权限的管理。
1、预定义角色
预定义角色是Oracle所提供的角色,每种角色都用于执行一些特定的管理任务,常用的预定义角色connect ,resource,dba
(1)connect角色
connect角色具有一般应用开发人员需要的大部分权限,当建立了一个用户后,多数情况下,只要给用户授予connect和resource角色就够了。connect角色具有的系统权限:
alter session
create cluster
create database link
create session
create table
create view
create sequence
(2)resource角色
resource角色具有应用开发人员所需要的其它权限,比如建立存储过程、触发器等。这里需要注意的是resource角色隐含了unlimited tablespace(无限制的表空间)系统权限。resource角色包含以下系统权限:
create cluster
create indextype
create table
create sequence
create type
create procedure
create tigger
(3)dba角色
dba角色具有所有的系统权限,以及with admin option选项,默认的dba用户为sys和system 他们可以将任何系统权限授予其他用户,但是要注意的是dba角色不具备sysba和sysoper的特权(启动和关闭数据库)
2、自定义角色
自己定义的角色,根据自己的需要来定义,一般是dba来建立,如果用别的用户来建立,则需要具有create role的系统权限。在建立角色时可以指定验证方式(修改角色时需不需要输入密码)
(1)建立角色
①不验证
如果角色时公用的角色,可以采用不验证的方式建立角色
create role 角色名 not identified;
②数据库验证
采用这样的方式时,角色名、口令存放在数据库中。当激活该角色时,必须提供口令。在建立这种角色时,需要为其提供口令
create role 角色名 identified by tigger;
(2)角色授权
当角色建立时,没有任何权限,为了使得角色完成特定任务,必须为其授予相应的系统权限和对象权限
①给角色授权
给角色授权和给用户授予权限没有太多区别。注意:系统权限的unlimited tablespace和对象权限的with grant option选项是不能授予角色的。
eg:
conn system/manger
grant create session to 角色名 with admin option //角色可以继续传递
conn scott/tiger
grant select on emp to 角色名
grant insert,update,delete on emp to 角色名
②非配角色给某个用户
一般分配角色是由dba来完成的,如果要以其他用户身份分配角色,则要求用户必须具有grant any role的系统权限
grant 角色名 to monkey with admin option //monkey可以把角色分配给别的用户
(3)删除角色
一般是dba来执行,如果用其它用户则要求该用户具有drop any role 系统权限。
drop role 角色名
如果角色被删,那么被授予角色的用户还能不能登录——不能
3、显示角色信息
(1)显示所有角色
select * from dba_roles;
(2)显示角色具有的系统权限
select privilege,admin_option from role_sys_privs where role='角色名';
(3)显示角色具有的对象权限
通过查询数据字典视图dba_tab_privs可以查看角色具有的对象权限或是列的权限
(4)显示用户具有的角色,以及默认角色
当以用户的身份连接到数据库时,Oracle会自动的激活默认的角色,通过查询数据字典视图dba_role_privs可以显示某个用户具有的所有角色以及当前默认的角色。
select granted_role,default_role from dba_role_privs where grantee='用户名';
4、精细访问控制
是指用户可以使用函数、策略实现更加细微的安全访问控制。如果使用精细访问控制,则当在客户端发出sql语句(select,insert,update,delete)时,Oracle会控制在sql语句后追加谓词(where子句),并执行新的sql语句。通过这样的控制,可以使得不同的数据库用户在访问相同表时,返回不同的数据信息。