说说Oracle三层权限体系(上)

Oracle用户对象权限体系是Oracle数据库安全管理中重要的组成部分。Oracle用户权限是一套灵活可配置的管理体系。本篇我们一起来说说Oracle的三层权限体系。

 

1、  角色role、系统system和对象object

 

Oracle用户权限体系下,所有权限的实现单元是用户owner上。用户进行任何的操作,包括连接数据库,都需要相应的权限(如create session)来保证。换句话说,如果没有相应的权限,用户owner什么也做不了。

 

从内容层次上看,Oracle的权限体系划分为三个层次:角色role、系统system和对象object。下面进行简单的说明:

 

ü        对象权限(object privilege),是权限体系的最小粒度对象。特点是权限点在对象上。此处的对象,包括Oracle体系下包括数据表、视图、序列、包、存储过程等十一种对象的权限。每种对象都有对应的权限点。比如,对数据表有selectupdate等操作权限;

ü        系统权限(system privilege),是描述Oracle用户操作的另一个层面。定义了用户在系统中可以做什么,如Create table之类。注意,一些系统权限和对象权限可能存在重叠的情况。要小心使用。

ü        角色权限(role privilege),是对象权限和系统权限、甚至包括角色权限的复合体。对象权限和系统权限都是粒度很细的权限单元,一类用户往往需要相同的对象权限集合和系统权限集合。如果分别进行设置,就可能存在遗漏的可能,依据职责进行role角色设置,之后将角色附加给用户,是一种更加简单的方法;

 

三者权限体系存在相互包含的关系。角色权限可以接受各种对象和系统权限,甚至包括其他权限。角色权限可以理解为一种容器组织。如下图所示:

 

17203031_201107052352241.jpg

 

2、  对象权限object privilege

 

对象权限是Oracle的基础权限,定义了用户在某个特定对象上可以使用何种权限。注意,此处我们谈到的对象权限,是针对已经存在对象的权限。目前,Oracle支持十一种对象的九方面权限,并不是每类型对象都有全部的九个方面权限。详细如下表:

 

 

Alter

Delete

Execute

Index

Insert

Read

Refer

ence

Select

Update

Directory

-

-

-

-

-

Y

-

-

-

Function

-

-

Y

-

-

-

-

-

-

Procedure

-

-

Y

-

-

-

-

-

-

Package

-

-

Y

-

-

-

-

-

-

DB object

-

-

Y

-

-

-

-

-

-

Library

-

-

Y

-

-

-

-

-

-

Operation

-

-

Y

-

-

-

-

-

-

Sequence

Y

-

-

-

-

-

-

-

-

Table

Y

Y

-

Y

Y

-

Y

Y

Y

Type

-

-

Y

-

-

-

-

-

-

View

-

Y

-

-

Y

-

-

Y

Y

 

从上表中可以看出,根据对象的不同,可以进行赋予的权限也是不同的。此外,还有一个隐式的all权限,表示对象可以赋予的全部权限信息。

 

 

SQL> create table t as select * from dba_objects;

Table created

 

SQL> grant select on t to scott;

Grant succeeded

 

SQL> conn scott/tiger@orcl ;

Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0

Connected as scott

 

SQL> conn scott/tiger@orcl;

Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0

Connected as scott

 

SQL> select count(*) from sys.t;

 

  COUNT(*)

----------

     51331

 

SQL> update sys.t set wner='T';

 

update sys.t set wner='T'

 

ORA-01031: 权限不足

 

 

视图方面,可以使用user_tab_privilegetable_privilege等视图检查对象的访问授权情况。

 

3系统权限System Privilege

 

系统权限规定了用户在系统中可以做什么行为,包括针对对象和针对系统。系统权限是Oracle内置定义的,在Oracle10g中有大约160余个系统权限。

 

例如,我们新建立一个用户之后,如果未进行任何权限的赋予,该用户甚至连登录的权限都没有。此时,我们需要赋予该用户create session的系统权限(或者connect角色),才能实现登录。

 

 

SQL> show user

User is "SYS"

 

SQL> create user mytest identified by mytest;

User created

 

SQL> conn mytest/mytest@orcl;

ERROR:

ORA-01045: user MYTEST lacks CREATE SESSION privilege; logon denied

 

 

此时,我们至少要显示的赋予create session权限给mytest才可以。

 

 

SQL> grant create session to mytest;

Grant succeeded

 

//可以登陆了

SQL> conn mytest/mytest@orcl;

已连接。

 

//但是做任何事情的权限还是没有;

SQL> create table t (id number);

create table t (id number)

*

1 行出现错误:

ORA-01031: 权限不足

 

 

如果要让mytest用户具有create table的能力,还是要让mytest具有create table的系统权限。

 

我们可以通过两个视图来检查用户具有的系统权限,分别为dba_sys_privsuser_sys_privs

 

 

SQL> desc dba_sys_privs;

Name         Type         Nullable Default Comments                                      

------------ ------------ -------- ------- ----------------------------------------------

GRANTEE      VARCHAR2(30)         Grantee Name, User or Role receiving the grant

PRIVILEGE    VARCHAR2(40)          System privilege                              

ADMIN_OPTION VARCHAR2(3)  Y      Grant was with the ADMIN option                

 

SQL> desc user_sys_privs;

Name         Type         Nullable Default Comments                       

------------ ------------ -------- ------- -------------------------------

USERNAME     VARCHAR2(30) Y                User Name or PUBLIC            

PRIVILEGE    VARCHAR2(40)                  System privilege               

ADMIN_OPTION VARCHAR2(3)  Y                Grant was with the ADMIN option

 

 

 

系统权限是很零碎细致的,我们让用户完成一个简单的连接创建表、乃至最后插入记录,都需要一系列的系统权限配置。那么,有没有方法让我们简化操作呢?答案就是使用预定义或者自定义role权限。

 

 

4、角色权限role privilege

 

基于角色权限体系是目前系统中经常使用访问控制策略。基于角色的系统既能够做到细粒度的权限划分,又能保证权限设置的职能化和岗位化。

 

Oracle中,角色role权限也是如此。角色权限可以接受各种系统权限和对象权限,也可以包括其他的角色权限。

 

 

SQL> drop user mytest;

User dropped

 

SQL> create role mymy ;

Role created

 

//system privilege授予给role

SQL> grant create session to mymy;

Grant succeeded

 

//role privilege授予给role

SQL> grant resource to mymy;

Grant succeeded

 

//object privilege授予给role

SQL> grant select on sys.t to mymy;

Grant succeeded

 

//也不是任何权限都能授予为mymy

SQL> grant unlimited tablespace to mymy;

grant unlimited tablespace to mymy

 

ORA-01931: 无法将 UNLIMITED TABLESPACE 授予角色

 

//创建用户

SQL> create user mytest identified by mytest;

User created

 

SQL> grant mymy to mytest;

Grant succeeded

 

 

注意,此时我们的mytest只有一个mymy的角色权限。

 

 

SQL> conn mytest/mytest@orcl;

Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0

Connected as mytest

 

SQL> select count(*) from sys.t;

  COUNT(*)

----------

     51331

 

SQL> update sys.t set wner='D';

update sys.t set wner='D'

 

ORA-01031: 权限不足

 

角色就是一个简易的权限容器,可以包括很多类型的系统权限和对象权限,甚至角色权限。

 

我们检查权限设置,可以通过user_role_privsdba_role_privs两个视图完成。

 

 

SQL> desc user_role_privs;

Name         Type         Nullable Default Comments                                                        

------------ ------------ -------- ------- ----------------------------------------------------------------

USERNAME     VARCHAR2(30) Y                User Name or PUBLIC                                             

GRANTED_ROLE VARCHAR2(30) Y                Granted role name                                                

ADMIN_OPTION VARCHAR2(3)  Y                Grant was with the ADMIN option                                 

DEFAULT_ROLE VARCHAR2(3)  Y                Role is designated as a DEFAULT ROLE for the user               

OS_GRANTED   VARCHAR2(3)  Y                Role is granted via the operating system (using OS_ROLES = TRUE)

 

SQL> desc dba_role_privs;

Name         Type         Nullable Default Comments                                         

------------ ------------ -------- ------- -------------------------------------------------

GRANTEE      VARCHAR2(30) Y                Grantee Name, User or Role receiving the grant   

GRANTED_ROLE VARCHAR2(30)                  Granted role name                                

ADMIN_OPTION VARCHAR2(3)  Y                Grant was with the ADMIN option                  

DEFAULT_ROLE VARCHAR2(3)  Y                Role is designated as a DEFAULT ROLE for the user

 

 

 

在实际开发过程中,我们自定义角色的场景其实不是很多,因为自定义角色权限后,在开发使用时是有很多的限制的。我们使用预定义权限的场景非常多,如connectresource,甚至dbaimp_full_database等,都是我们常常使用的角色权限内容。

 

-- Create the role

create role RESOURCE;

-- Grant/Revoke system privileges

grant create cluster to RESOURCE;

grant create indextype to RESOURCE;

grant create operator to RESOURCE;

grant create procedure to RESOURCE;

grant create sequence to RESOURCE;

grant create table to RESOURCE;

grant create trigger to RESOURCE;

grant create type to RESOURCE;

 

 

需要注意的问题是,不同版本的Oracle,预定义角色可能存在差异。这点可能会带来一些预想不到的问题。这也是尽量避免使用role的一个原因。

 

本篇介绍了权限体系的基本情况,下篇介绍三层权限中的一些细节问题。

fj.pngClassDiagram1.jpg

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17203031/viewspace-701458/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/17203031/viewspace-701458/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值