Oracle角色管理

角色管理

可以把角色视为可用单条GRANTREVOKE命令予和撤销的一组权限集合。一个角色可以包含一组权限,同时还可以包一组角色。角色使分配多个权限给一个用户变得非常容易。默认角色是用户创建会话时自动起作用得一种角色,可以给用户分配不止一个默认角色。

DBA角色是数据库中预先定义的角色,它是一组系统权限WITH ADMIN OPTION,这表示具有这个角色的用户可将这些系统权限授予其他用户。大多数情形下将这个角色授予进行数据库管理的用户,DBA角色权限很大,一定要慎重授予用户。

Oracle数据库有三个重要的角色:
  • CONNECT:
    CREATE SESSION(在Oracle10g版本2以前,CONNECT角色还有几个其他权限,但现在只有单一的CREATE SESSION权限);

  • RESOURCE:
    CREATE CLUSTERCREATE INDEXTYPECREATE OPERATORCREATE PROCEDURECREATE SEQUENCECREATE TABLECREATE TRIGGERCREATE TYPE;

  • DBA角色:
    所有系统权限WITH ADMIN OPTION

还有两个预定义角色EXP_FULL_DATABASEIMP_FULL_DATABASE,他们允许用户在数据库执行Data Pump Export和Import。

1、创建角色:

如果用户被授予DBA角色CREATE ROLE的特殊系统权限,就可以创建用户

CREATE ROLE new_role;

将权限授予角色:
示例:

#创建会话权限
GRANT CONNECT TO NEW_ROLE;
#查询所有表权限
GRANT SELECT ANY TABLE TO NEW_ROLE;
#更新所有表权限
GRANT UPDATE ANY TABLE TO NEW_ROLE;
#可以查看一些role的定义数据字典的视图(如dba_之类)
GRANT select_catalog_role TO NEW_ROLE;
#数据泵导出权限
GRANT exp_full_database TO NEW_ROLE;
#数据泵导入权限
GRANT imp_full_database TO NEW_ROLE;

将上述权限赋予DIANA用户:

GRANT NEW_ROLE TO DIANA;
查看当前用户所拥有的权限:
select * from session_privs;

一个用户可以被授予不止一个角色,授予用户的所有角色在此用户登录数据库时都是活动的。

2、角色认证:

使用角色不需要使用密码,但可以指定一个角色在使用前必须认证,指定角色认证的方法有下面几种:

  • 数据库认证:在角色由数据库认证时使用的密码,如下:
    CREATE ROLE new_role IDENTIFIED BY password;
  • 使用一个PL/SQL程序包进行数据库认证:开发人员可创建一个角色并指定用一个PL/SQL程序包来认证该角色,如admin_role角色由PL/SQL程序包hr.admin中定义的一个模块来启用,如下:
    CREATE ROLE admin_role IDENTIFIED USING hr.admin;
  • 外部,由操作系统,网络或其他外部源认证:可要求一个角色启用前由某个外部源进行认证,如下:
    CREATE ROLE acc_rec IDENTIFIED EXTERNALLY;
  • 全局,由一个企业目录服务器认证:也可以定义一个角色为全局角色,这表示用户只能由企业目录服务授权使用该角色。
    示例:创建一个由目录服务授权的全局角色,如下:
    CREATE ROLE supervisor IDENTIFIED GLOBALLY;

WITH ADMIN OPTION 授权角色
如果使用WITH ADMIN OPTION 字句授予用户一个角色,则被授予者可做以下事情:
(1)对数据库中的任何用户或角色授予或撤销此角色;
(2)用with admin option 授权此角色;
(3)更改或删除此角色。

将一个角色授予其他角色
一般是将角色授予一个用户,然后该用户就可以立即行使角色所包含的所有权限。但是,也可以将一个角色授予另一个角色。在此情形下,数据库将把前者的所有权限添加到后者的权限中。

3、禁用和启用一个角色

可插入适当的行到Product_User_Profile表中禁用一个角色
示例:(new_role角色已经授予DIANA用户)

SQL> select * from product_user_profile;

no rows selected

SQL> desc product_user_profile
 Name					   Null?    Type
 ------------------------ -------- ----------------------------
 PRODUCT				   NOT NULL VARCHAR2(30)
 USERID 					    	VARCHAR2(30)
 ATTRIBUTE					    	VARCHAR2(240)
 SCOPE						    	VARCHAR2(240)
 NUMERIC_VALUE					      NUMBER(15,2)
 CHAR_VALUE					    	VARCHAR2(240)
 DATE_VALUE					    	DATE
 LONG_VALUE					    	LONG

SQL> INSERT INTO PRODUCT_USER_PROFILE(product,userid,attribute,char_value) VALUES('SQL*Plus','DIANA','ROLES','NEW_ROLE');

1 row created.
SQL> commit;

Commit complete.

SQL> conn diana/diana
Connected.

SQL> select * from product_user_profile;
PRODUCT 	USERID 	ATTRIBUTE 	SCOPE 	NUMERIC_VALUE 	CHAR_VALUE 	DATE_VALUE 	LONG_VALUE
----------- ------- ----------- ----- ----------------- ----------- ----------- ----------------
SQL*Plus	DIANA	ROLES								NEW_ROLE				<Long>


SQL> select * from nice.STUDY;
select * from nice.STUDY
                   *
ERROR at line 1:
ORA-00942: table or view does not exist

SQL> 

4、删除角色

DROP ROLE role_name;

至此结束,部分内容会后续补充,谢谢。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值