欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Oracle三层权限体系详细介绍

程序员文章站 2022-03-14 08:33:06
Oracle用户对象权限体系是Oracle数据库安全管理中重要的组成部分。Oracle用户权限是一套灵活可配置的管理体系。本篇我们一起来说说Oracle的三层权限体系。 1、 角...

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

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

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

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

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

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

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

2、 对象权限object privilege

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

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

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

3、系统权限System Privilege

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

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

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

4、角色权限role privilege

基于角色权限体系是目前系统中经常使用访问控制策略。基于角色的系统既能够做到细粒度的权限划分,又能保证权限设置的职能化和岗位化。角色就是一个简易的权限容器,可以包括很多类型的系统权限和对象权限,甚至角色权限。

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

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