本文属于「数据库系统」系列文章之一,这一系列着重于「数据库系统知识的学习与实践」。由于文章内容随时可能发生更新变动,欢迎关注和收藏数据库系统系列文章汇总目录一文以作备忘。需要特别说明的是,为了透彻理解和全面掌握数据库系统,本系列文章中参考了诸多博客、教程、文档、书籍等资料,限于时间精力有限,这里无法一一列出。部分重要资料的不完全参考目录如下所示,在后续学习整理中还会逐渐补充:
- 数据库系统概念 第六版
Database System Concepts, Sixth Edition,作者是Abraham Silberschatz, Henry F. Korth, S. Sudarshan,机械工业出版社- 数据库系统概论 第五版,王珊 萨师煊编著,高等教育出版社
文章目录
4.2.2 存取控制
数据库安全最重要的一点就是,确保只授权给有资格的用户访问数据库的权限,同时令所有未被授权的人员无法接近数据,这主要通过数据库系统的存取控制机制实现。
存取控制机制主要包括定义用户权限和合法权限检查两部分。
(1)定义用户权限,并将用户权限登记到数据字典中:用户对某一数据对象的操作权力称为权限。某个用户应该具有何种权限是个管理问题和政策问题,而非技术问题。数据库管理系统的功能是,保证这些决定的执行。为此,数据库管理系统必须提供适当的语言来定义用户权限,这些定义经过编译后,存储在数据字典中,被称做安全规则或授权规则。
(2)合法权限检查:每当用户发出存取数据库的操作请求后(请求一般应包括操作类型、操作对象、操作用户等信息),数据库管理系统查找数据字典,根据安全规则进行合法权限检查,若用户的操作请求超出了定义的权限,系统将拒绝执行此操作。
定义用户权限和合法权限检查机制,一起组成了数据库管理系统的存取控制子系统。C2级的数据库管理系统支持自主存取控制 Discretionary Access Control, DAC ,B1级的数据库管理系统支持强制存取控制 Mandatory Access Control, MAC 。这两类方法的简单定义是:
- 在自主存取控制方法中,用户对于不同的数据库对象有不同的存取权限,不同的用户对于同一对象也有不同的权限,而且用户还可将其拥有的存取权限转授给其他用户。因此,自主存取控制非常灵活。
- 在强制存取控制方法中,每个数据库对象被标以一定的密级,每个用户也被授予某一级别的许可证,对于任意一个对象,只有具有合法许可证的用户才可以存取。强制存取控制因此相对比较严格。
下面介绍这两种存取控制方法。
1. 自主存取控制方法
大型数据库管理系统都支持自主存取控制,SQL标准也对自主存取控制提供支持,这主要通过SQL的 grant 语句和 revoke 语句来实现。
用户权限是由两个要素组成的:数据库对象和操作类型。定义一个用户的存取权限,就是要定义这个用户可在「哪些数据库对象」上进行「哪些类型的操作」。在数据库系统中,定义存取权限称为授权 authorization 。
在非关系系统中,用户只能对数据进行操作,存取控制的数据库对象也仅限于数据本身。在关系数据库系统中,存取控制的对象不仅有数据本身(基本表中的数据、属性列上的数据),还有数据库模式(包括数据库、基本表、视图和索引的创建等)。下表给出了关系数据库系统中的主要存取权限。

表4.3中,列权限包括 select, references, insert, update ,其含义与表权限类似。需要说明的是,对列的 update 权限,指对于表中存在的某一列的值可以进行修改。当然,有了这个权限之后,在修改的过程中还要遵守表在创建时定义的主键及其他约束。列上的 insert 权限,指用户可以插入一个元组,对于插入的元组,授权用户可以插入指定的值,其他列或者为空、或者为默认值。在给用户授予列 insert 权限时,一定要包含主键的 insert 权限,否则用户的插入动作会因为主键为空而被拒绝。
2. 授权与收回
SQL中使用 grant 和 revoke 语句,向用户授予或收回对数据的操作权限。grant 语句向用户授予权限,revoke 语句收回已经授予用户的权限。
(1) GRANT 的用法
grant 语句的一般格式为:
grant <权限>[, <权限>] ...
on <对象类型> <对象名>[, <对象类型> <对象名>] ...
to <用户>[, <用户>] ...
[with grant option];
其语义为:将对「指定操作对象」的「指定操作权限」授予「指定的用户」。发出该 grant 语句的,可以是数据库管理员,也可以是该数据库对象的创建者(即属主 owner ),还可以是已经拥有该权限的用户。接受权限的用户,可以是一个或多个具体用户,也可以是 public 即全体用户。
如果指定了 with grant option 子句,则获得某种权限的用户还可将这种权限再授予其他的用户。如果没有指定 with grant option 子句,则获得某种权限的用户只能使用该权限、不能传播该权限。SQL标准允许具有 with grant option 的用户,把相应权限或其子集传递授予其他用户,但不允许循环授权,即被授权者不能把权限再授回给授权者或其他祖先,如图4.4所示:

【例4.1】把查询 Student 表的权限授给用户 U1 。
答:
grant select
on table Student
to U1;
【例4.2】把对 Student 表和 Course 表的全部操作权限,授予用户 U2 和 U3 。
答:
grant

最低0.47元/天 解锁文章
1678

被折叠的 条评论
为什么被折叠?



