一篇文章学会oracle数据库角色管理

Oracle的权限设置十分复杂,权限分类也很多、很细。就系统权限而言,Oracle的系统权限超过200种。这就为数据库管理员正确有效地管理数据库权限带来了困难,而角色就是简化权限管理的一种数据库对象。

一、角色简介

角色是一个独立的数据库实体,它包括一组权限。也就是说,角色是包括一个或者多个权限的集合,它并不被哪个用户所拥有。角色可以被授予任何用户,也可以从用户中将角色收回。

用角色可以简化权限的管理,可以仅用一条语句就能从用户那里授予或撤销一组权限,而不必对用户一一授权。使用角色还可以实现权限的动态管理。

角色、用户及权限是一组关系密切的对象,既然角色是一组权限的集合,那么它只有被授予某个用户才有意义,可以用下图所示的图形来理解角色、用户及权限之间的关系。

在复杂的大型应用系统中,首先要求对应用系统功能进行分类,以形成角色的雏形;然后使用CREATE ROLE语句将其创建成为角色;最后根据用户工作的分工,将不同的角色(包括系统预定义的角色)授予各类用户。如果应用系统的规模很小,用户数也不多,则可以直接将应用的权限授予用户,即使是这样,用户也必须对Oracle系统的预定义角色有所了解,因为一个用户至少被授予一个以上的预定义角色时才能使用Oracle系统资源。
在创建角色时,可以为角色设置应用安全性。角色的安全性是通过为角色设置口令进行保护的,必须提供正确的口令才允许修改或设置角色。

二、预定义角色

系统预定义角色,是指在数据库安装完成后由系统自动创建的一些常用角色,这些角色已经由系统授予了相应的系统权限,可以由数据库管理员直接使用。一旦将这些角色授予用户,用户就具有了角色中所包含的系统权限。

以下列出的这几个系统预定义角色是最常被用到的:CONNECT、RESOURCE、DBA、EXP_FULL_DATABASE和IMP_FULL_DATABASE。

CONNECT、RESOURCE及DBA主要用于数据库管理,这3个角色之间相互没有包含关系(有些系统权限可能有重叠)。数据库管理员需要分别授予CONNECT、RESOURCE和DBA角色。对于一般的数据库开发人员,则需要授予CONNECT和RESOURCE角色。

角色IMP_FULL_DATABASE和EXP_FULL_DATABASE分别用于操作数据库的导入或导出工具,如操作数据库工具EXPDP、IMPDP,或者系统的EXP、IMP。

在使用这些工具进行整个数据库的导出与导入时,需要具备这两个角色。
Oracle中部分常用预定义角色的权限说明如下表所示:

不同版本的Oracle预定义的角色数量不同,但都可以从dba_roles数据字典中查询到。

–查询dba_roles数据字典中的角色信息
select * from dba_roles;

三、创建角色与授权

如果系统预定义的角色不符合用户需要,那么数据库管理员可以创建更多的角色,
创建用户自定义角色可以使用CREATE ROLE语句来实现,其语法格式如下:

CREATE ROLE role_name [ NOT IDENTIFIED | IDENTIFIED BY [password] | [EXETERNALLY] | [GLOBALLY]]

role_name:角色名。IDENTIFIED BY password:角色口令。
IDENTIFIED BY EXETERNALLY:表示角色名在操作系统下验证。
IDENTIFIED BY GLOBALLY:表示用户是由Oracle安全域中心服务器来验证,此角色由全局用户来使用。
创建一个名为designer的角色,该角色的口令为123456,代码如下:

create role designer identified by 123456;

一旦角色创建完成,就可以对角色进行授权,给角色授权也是使用GRANT…TO语句来完成的。
如果系统管理员具有GRANT_ANY_PRVILEGE权限,就可以对某个角色进行授权。
例如,授权CREATE SESSION、CREATE SYNONYM、CREATE VIEW等。
给designer角色授予CREATE VIEW和CREATE TABLE权限。
代码如下:

grant create view,create table to designer;

在角色获得了权限之后,就可以把这个有使用价值的角色授予给某个用户。把角色授予给某个用户仍然使用GRANT…TO语句来实现。
–把designer角色授权给用户dongfang

grant designer to dongfang;

四、管理角色

查看角色所包含的权限

–查询角色designer被授予的权限有哪些

select * from role_sys_privs where role = 'DESIGNER';

修改角色密码

修改角色密码包括取消角色密码和设置角色密码两种情况,可以使用ALTER ROLE语句来实现。
首先取消designer角色的密码,然后重新给该角色设置一个密码,
代码如下:
–取消角色密码

alter role designer not identified;

–设置角色密码

alter role designer identified by mrsoft;

设置当前用户要生效的角色

假设用户a有三个角色,分别为b1、b2、b3,那么如果b1未生效,则b1所包含的权限对于a来讲是不拥有的,只有角色生效了,角色内的权限才作用于用户。最大可生效角色数由参数MAX_ENABLED_ROLES设定。用户登录后,Oracle将所有直接赋给用户的权限和用户默认角色中的权限赋给用户。设置角色生效可使用SET ROLE语句。
创建一个无须密码验证的角色queryer,然后设置该角色生效,最后设置带有密码的角色designer也生效,
代码如下:
–创建角色queryer

create role queryer;

–设置角色生效

set role queryer;

–设置带有密码的角色designer也生效

set role designer identified by mrsoft;

如果要设置带有密码的角色生效,则必须在SET ROLE语句后面使用IDENTIFIED BY关键字指定角色的密码。

删除角色

使用DROP ROLE语句即可删除角色。
–删除角色queryer

drop role queryer;

删除角色后,原来拥有该角色的用户将不再拥有该角色,相应的权限也将失去。

五、角色与权限的查询

创建角色和用户以后,给角色和用户授予的权限被记录在Oracle的数据字典里。
下表列出了Oracle用于存储用户、角色及权限的相关数据字典。
–查询scott用户被授予的系统角色

select granted_role,default_role,grantee from dba_role_privs where grantee = 'SCOTT';

在某个模式下,如果用户要确定当前会话中的所有有效角色,可通过session_role数据字典来查询。
–在scott模式下,查询当前用户的所有有效角色

select * from session_roles;
  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值