首页 理论教育集中授权控制:分布式数据库技术中的重要成果

集中授权控制:分布式数据库技术中的重要成果

【摘要】:授权控制可以用“谁(授权者)可以授权”来描述。表4.4授权矩阵的例子对象上的权利可以像授权规则一样记录在数据目录(字典)里。如表4.4所示,最常用的方法是将所有的权限用一个授权矩阵表示。其中,每一行表示一个授权事项,每一列代表一个对象。正像前面所提到的,Oracle也为授权标识提供了一套口令系统,在Oracle中称为用户名。Oracle为授权标识提供了更进一步的应用,并在SQL中增加了CREATE user命令。每个角色应当是表示某一功能的连贯的权限组。

授权控制主要涉及三个方面:用户,负责触发应用程序的执行;操作,嵌套在应用程序里;数据库对象,是操作实施的对象。授权控制包含检查一个指定的触发(用户、操作、对象)是否允许继续(即用户可以在该对象中执行操作)。

授权控制可以看成一个元组〈用户,操作,对象定义〉,它可以指定用户有权利在一个对象上实施操作。因此,为了完善地进行控制授权,DBMS需要定义用户、对象和权利。

系统中,一个用户(一个人或一组人)的引入需要指定一个参数偶对(用户名、口令)。用户名用于在系统中唯一地标识该用户,而口令则只有该用户知道,是授权给该用户的。这两样东西必须同时提供,以便在系统日志中记录。

保护的对象是数据库的子集。在关系型系统中,对象可以通过它们的类型(视图、关系、元组、属性)以及通过选择谓词指定的内容来定义。

数据库上的权利可以通过用户、对象和在对象上实施的操作集来表示。在基于SQL的关系型DBMS中,操作可以是高级语句,如查询(SELECT)、添加(INSERT)、修改(UPDATE)或删除(DELETE)。权利(授权与撤销)可以用如下语句来定义:

GRANT<p r ivi l ege>ON<ob j ec t>TO<grantee>[{,<p r ivi l ege>,...}[WITH GRANT OPTION]

REVOKE<p r ivi l ege>f rom<ob j ec t>TO<grantee>

关键词public可以用于表示普适用户。授权控制可以用“谁(授权者)可以授权”来描述。最简单的情况为控制是集中方式的:只有一个用户或用户组(数据库管理员)拥有数据库对象的所有权利,唯一可以使用GRANT和REVOKE语句。

一种更灵活、更复杂的控制形式是分散形态:对象的创建者变成所有者,被授予全权。接着他/她可以给别人授权,甚至可以给别人以特权。接受特权的人就可以拥有被授予的权利。这种方式的问题是,权利回收时必须递归进行。例如,在对象O上,如果A给B授权,B再给C授权。接着希望回收B在C上的所有权利,则C在O上的权利也自动被回收。为此,系统必须在每个对象上保持一个授权层次架构。创建者(或DBA)处于其根部。

权限可以用一个矩阵来表示,如表4.4所示。

表4.4 授权矩阵的例子

对象上的权利可以像授权规则一样记录在数据目录(字典)里。

如表4.4所示,最常用的方法是将所有的权限用一个授权矩阵表示。其中,每一行表示一个授权事项,每一列代表一个对象。这样的一个二元组(〈subject,object〉)表示为一个授权。授权操作可以用它们的操作类型(如SELECT、UPDATE)来表述。进一步说,也可以使用存取该对象操作的谓词来限定。此时有一个条件是,该对象必须是一个基关系而不是视图。例如,〈陈小莲,Student〉的授权可以如下:

Select*where dept="CS"

这里,授权“陈小莲”能且只能访问关系Student里属于计算机系(dept=CS)的学生。

表4.4是一个授权矩阵的样例,其中对象可以是关系(Student和SC),也可以是属性(SNAME)。

授权矩阵可以用三种方式存储:按行存储、按列存储,以及按一个权利事项加上按此权限存取的对象表来存储。不同的存储方式有不同的优点和缺点。

实施时,不同的系统会采取不同的方式,下面以Oracle为例来对此进行说明。

为了给数据库服务器提供一个完整的自主性访问控制系统,Oracle采取了几种不同的方法扩展ANSI SQL标准。

1.认证

认证(authentication)是验证用户是否与其声明内容相符的过程,以便保证合法使用授予该用户的权限。正像前面所提到的,Oracle也为授权标识提供了一套口令系统,在Oracle中称为用户名。Oracle为授权标识提供了更进一步的应用,并在SQL中增加了CREATE user命令。该命令可以创建一个带有口令的用户(也定义了一种不包含任何对象的模式),同时指定默认及临时表空间、空间限额及配置文件。

Oracle提供两种独立的口令机制。(www.chuimin.cn)

第一种方案假定操作系统提供了一种口令,并且对Oracle会话不使用口令检查,可以使用下面的命令来定义。

Create user<user name>IDENTIFIEDEXTERNALLY

第二种方案将口令以加密的形式保存在服务器的数据词典中,无论何时启动一个会话,都会检查它。使用CREATE user语句,在任何数据库中可以使用上述任何一种方案或同时使用两种方案。

Create user<user name>IDENTIFIED by<password>

如果使用EXTERNALLY选项,则Oracle会使用一个标准的前缀,通常是“OPS$”,加在操作系统用户标识符前。当使用CREATE user命令时,必须在〈user name〉中加相同的前缀。

当有人启动会话时,Oracle的验证方案会完成验证该用户身份的安全目标。

2.角色

角色(role)是一组权限的集合。可以把多个权限授予一个用户,或者把一组权限的集合授予一个角色,然后把该角色授予该用户(或多个用户)。这种方法提供了管理多个不同用户非常复杂的权限组合的功能。

要构建一个角色,必须先确定安全目标。每个角色应当是表示某一功能的连贯的权限组。例如,每个应用程序中都会有一个建立好的唯一角色,它包含运行该应用程序所必需的所有权限。对于复杂的应用程序,可能需要划分几个使用该程序的不同用户组,每个用户组可能会得到不同的并且是相互交错的权限集,对每个用户组可以授予不同的角色,也可以把角色授予其他角色,这样可以在层次状的角色中将角色与附加的权限或其他角色进行组合。

可以通过在CREATE ROLE语句中带IDENTIFIED by分句的方法,对角色实施口令保护。这种方法使得在获得角色的权限之前,用户需要先输入角色的口令激活该角色。这样对角色增加了更进一层的保护,但显然加大了用户注册的难度,只有那些高风险需要验证的事情,才需进行角色口令保护。

Oracle提供一个特殊的关键字PUBLIC,用于表示数据库当前定义的所有用户。通过给PUBLIC授权,可以把权限授予所有用户,有时这是非常有用的。

3.系统及对象权限

Oracle在服务器安全系统中还有如下几种不同的权限。

●同义词(synonym):任何对象名字的别名。

●簇(cluster):是一种把共享公共信息的多个表组织在一起存储的存储结构,例如与外部关键字完整性约束相关的表。

索引(index):对表中的数据提供可选择的访问路径的辅助的存储结构。

●序列(sequence):可用于产生唯一的整数值作为主关键字的对象。

●过程(procedure):一个PL/SQL存储过程或函数。

触发器(trigger):与作用在表上的服务器事件相联系的存储PL/SQL过程,如在UPDATE或INSERT之前或之后的事件。

●快照(snapshot):保存从主表(通常是在远程数据库上)查询结果的一个表。

●系统权限(system privileges):系统级的权限,允许管理自己的模式及其操作,这通过执行特殊对象类型上的特殊操作完成。获得这种权限后,可以使用CREATE、ALTER及DROP命令从模式中增加、改变及删除任何不同类型的对象。如果在权限上增加关键字ANY,则意味着不仅可以在自己的任何模式上实施权限,而且可以在不属于自己的模式上实施权限。只有当另一个用户给自己授予带有ADMIN OPTION的权限或具有GRANT ANY PRIVILEGE权限时,才可以把系统权限授予别的对象。

●对象权限(object privilege):是对一个特殊的、现存对象采取某种动作的权限。