数据库原理 | 4. 数据库安全性
思维导图
- 数据库安全性
- 计算机安全性概论
- 计算机安全涉及问题
- 计算机系统的三类安全性问题
- 可信计算机系统评测标准
- TDI/TCSEC标准的基本内容
- R1 安全策略(Security Policy)
- R2 责任(Accountability)
- R3 保证(Assurance)
- R4 文档(Documentation)
- TCSEC/TDI安全级别划分
- 数据库安全性控制
- 数据库安全性控制概述
- 非法使用数据库的情况
- 数据库安全性控制的常用方法
- 用户标识与鉴别
- 基本方法
- 用户标识自己的名字或身份
- 存取控制
- 存取控制机制的功能
- 常用存取控制方法
- 自主存取控制
- 强制存取控制方法
- 自主存取控制方法
- 检查存取权限
- 授权粒度
- 优缺点
- 强制存取控制方法
- 主体与客体
- 敏感度标记
- 强制存取控制规则
- 强制存取控制的特点
- 授权与回收
- 安全性
- 完整性
- 并发控制
- 恢复
- GRANT
- 操作权限
- 用户的权限
- WITH GRANT OPTION子句
- REVOKE
- SQL灵活的授权机制
- 数据库角色
- 视图机制
- 审计
- 什么是审计
- 审计功能的可选性
- 强制性机制
- 预防监测手段
- 数据加密
- 加密方法
- DBMS中的数据加密
- 统计数据库安全性
- 统计数据库的特点
- 统计数据库中特殊的安全性问题
- 数据库的一大特点是数据可以共享
- 数据库中数据的共享是在DBMS统一的严格的控制之下的共享,即只允许有合法使用权限的用户访问允许他存取的数据
- 但数据共享必然带来数据库的安全性问题
- 数据库系统中的数据共享不能是无条件的共享
例:军事秘密、国家机密、新产品实验数据、市场需求分析、市场营销策略、销售计划、 客户档案、医疗档案、银行储蓄数据
- 什么是数据库的安全性
- 数据库的安全性是指保护数据库,防止因用户非法使用数据库造成数据泄露、更改或破坏。
- 什么是数据的保密
- 数据保密是指用户合法地访问到机密数据后能否对这些数据保密。
- 通过制订法律道德准则和政策法规来保证。
- 数据库系统的安全保护措施是否有效是数据库系统主要的性能指标之一
计算机安全性概论
计算机安全涉及问题
- 计算机系统本身的技术问题
- 计算机安全理论与策略,计算机安全技术
- 管理问题
- 安全管理,安全评价,安全产品
- 法学
- 计算机安全法律
- 犯罪学
- 计算机犯罪与侦察,安全监察
- 心理学
计算机系统的三类安全性问题
为计算机系统建立和采取的各种安全保护措施,以保护计算机系统中的硬件、软件及数据,防止其因偶然或恶意的原因使系统遭到破坏,数据遭到更改或泄露等。
- 技术安全类
- 指计算机系统中采用具有一定安全性的硬件、软件来实现对计算机系统及其所存数据的安全保护
- 管理安全类
- 软硬件意外故障、场地的意外事故、管理不善导致的
- 政策法律类
- 有关计算机犯罪、数据安全保密的法律道德准则和政策法规、法令
可信计算机系统评测标准
- 为降低进而消除对系统的安全攻击,各国引用或制定了一系列安全标准
- TCSEC,桔皮书
- 《 DoD可信计算机系统评估标准》
- 1985年,美国国防部DoD
- TDI ,紫皮书
- 《可信计算机系统评估标准关于可信数据库系统的解释》
- 1991年,美国国家计算机安全中心NCSC
- CC V2.1
- 1999年ISO采用为国际标准
- 2001年我国采用为国家标准
- 取代TCSEC
TDI/TCSEC标准的基本内容
- TDI与TCSEC一样,从四个方面来描述安全性级别划分的指标
- 安全策略
- 责任
- 保证
- 文档
R1 安全策略(Security Policy)
- R1.1 自主存取控制 (Discretionary Access Control, 简记为DAC)
- R1.2 客体重用(Object Reuse)
- R1.3 标记(Labels)
- R1.4 强制存取控制(Mandatory Access Control,简记为MAC)
R2 责任(Accountability)
- R2.1 标识与鉴别(Identification & Authentication)
- R2.2 审计(Audit)
R3 保证(Assurance)
- R3.1 操作保证(Operational Assurance)
- R3.2 生命周期保证(Life Cycle Assurance)
R4 文档(Documentation)
- R4.1 安全特性用户指南(Security Features User’s Guide)
- R4.2 可信设施手册(Trusted Facility Manual)
- R4.3 测试文档(Test Documentation)
- R4.4 设计文档(Design Documentation)
TCSEC/TDI安全级别划分
| 安全级别 | 定义 |
|---|---|
| A1 | 验证设计(Verified Design) |
| B3 | 安全域(Security Domains) |
| B2 | 结构化保护(Structural Protection) |
| B1 | 标记安全保护(Labeled Security Protection) |
| C2 | 受控的存取保护(Controlled Access Protection) |
| C1 | 自主安全保护(Discretionary Security Protection) |
| D | 最小保护(Minimal Protection) |
- 四组(division)七个等级
- D
- C(C1,C2)
- B(B1,B2,B3)
- A(A1)
- 按系统可靠或可信程度逐渐增高
- 各安全级别之间具有一种偏序向下兼容的关系,即较高安全性级别提供的安全保护要包含较低级别的所有保护要求,同时提供更多或更完善的保护能力。


数据库安全性控制
数据库安全性控制概述
非法使用数据库的情况
- 用户编写一段合法的程序绕过DBMS及其授权机制,通过操作系统直接存取、修改或备份数据库中的数据;
- 直接或编写应用程序执行非授权操作;
- 通过多次合法查询数据库从中推导出一些保密数据
- 例:某数据库应用系统禁止查询单个人的工资,但允许查任意一组人的平均工资。用户甲想了解张三的工资,于是他:
- 首先查询包括张三在内的一组人的平均工资
- 然后查用自己替换张三后这组人的平均工资
- 从而推导出张三的工资
- 例:某数据库应用系统禁止查询单个人的工资,但允许查任意一组人的平均工资。用户甲想了解张三的工资,于是他:
- 破坏安全性的行为可能是无意的,故意的,恶意的。
数据库安全性控制的常用方法
- 用户标识和鉴定
- 存取控制
- 视图
- 审计
- 密码存储
用户标识与鉴别
系统提供的最外层安全保护措施。
基本方法
- 系统提供一定的方式让用户标识自己的名字或身份;
- 系统内部记录着所有合法用户的标识;
- 每次用户要求进入系统时,由系统核对用户提供的身份标识;
- 通过鉴定后才提供机器使用权。
- 用户标识和鉴定可以重复多次
用户标识自己的名字或身份
- 用户名/口令
- 简单易行,容易被人窃取
- 每个用户预先约定好一个计算过程或者函数
- 系统提供一个随机数
- 用户根据自己预先约定的计算过程或者函数进行计算
- 系统根据用户计算结果是否正确鉴定用户身份
存取控制
存取控制机制的功能
- 存取控制机制的组成
- 定义存取权限:在数据库系统中,为了保证用户只能访问他有权存取的数据,必须预先对每个用户定义存取权限。
- 检查存取权限:对于通过鉴定获得上机权的用户(即合法用户),系统根据他的存取权限定义对他的各种操作请求进行控制,确保他只执行合法操作。
- 用户权限定义和合法权检查机制一起组成了DBMS的安全子系统
常用存取控制方法
- 自主存取控制(Discretionary Access Control,简称DAC)
- C2级
- 灵活
- 强制存取控制(Mandatory Access Control,简称 MAC)
- B1级
- 严格
自主存取控制
- 同一用户对于不同的数据对象有不同的存取权限
- 不同的用户对同一对象也有不同的权限
- 用户还可将其拥有的存取权限转授给其他用户
强制存取控制方法
- 每一个数据对象被标以一定的密级
- 每一个用户也被授予某一个级别的许可证
- 对于任意一个对象,只有具有合法许可证的用户才可以存取
自主存取控制方法
- 存取权限由两个要素组成
- 数据对象
- 操作类型
| 用户名 | 数据对象名 | 允许的操作类型 |
|---|---|---|
| 王 平 | 关系Student | SELECT |
| 张明霞 | 关系Student | UPDATE |
| 张明霞 | 关系Course | ALL |
| 张明霞 | SC. Grade | UPDATE |
| 张明霞 | SC. Sno | SELECT |
| 张明霞 | SC. Cno | SELECT |
检查存取权限
- 对于获得上机权后又进一步发出存取数据库操作的用户
- DBMS查找数据字典,根据其存取权限对操作的合法性进行检查
- 若用户的操作请求超出了定义的权限,系统将拒绝执行此操作
授权粒度
- 授权粒度是指可以定义的数据对象的范围
- 它是衡量授权机制是否灵活的一个重要指标。
- 授权定义中数据对象的粒度越细,即可以定义的数据对象的范围越小,授权子系统就越灵活。
优缺点
- 优点
- 能够通过授权机制有效地控制其他用户对敏感数据的存取
- 缺点
- 可能存在数据的“无意泄露”
- 原因:这种机制仅仅通过对数据的存取权限来进行安全控制,而数据本身并无安全性标记。
- 解决:对系统控制下的所有主客体实施强制存取控制策略
强制存取控制方法
- 什么是强制存取控制
- 强制存取控制(MAC)是指系统为保证更高程度的安全性,按照TDI/TCSEC标准中安全策略的要求,所采取的强制存取检查手段。
- MAC不是用户能直接感知或进行控制的。
- MAC适用于对数据有严格而固定密级分类的部门
- 军事部门
- 政府部门
主体与客体
- 在MAC中,DBMS所管理的全部实体被分为主体和客体两大类
- 主体是系统中的活动实体
- DBMS所管理的实际用户
- 代表用户的各进程
- 客体是系统中的被动实体,是受主体操纵的
- 文件
- 基表
- 索引
- 视图
敏感度标记
- 对于主体和客体,DBMS为它们每个实例(值)指派一个敏感度标记(Label)
- 敏感度标记分成若干级别
- 绝密(Top Secret)
- 机密(Secret)
- 可信(Confidential)
- 公开(Public)
- 主体的敏感度标记称为许可证级别(Clearance Level)
- 客体的敏感度标记称为密级(Classification Level)
- MAC机制就是通过对比主体的Label和客体的Label,最终确定主体是否能够存取客体
强制存取控制规则
- 当某一用户(或某一主体)以标记label注册入系统时,系统要求他对任何客体的存取必须遵循下面两条规则:
- 仅当主体的许可证级别大于或等于客体的密级时,该主体才能读取相应的客体;
- 仅当主体的许可证级别等于客体的密级时,该主体才能写相应的客体。
- 规则(2)的修正规则:
- 主体的许可证级别 <=客体的密级,主体能写客体
- 用户可为写入的数据对象赋予高于自己的许可证级别的密级
- 一旦数据被写入,该用户自己也不能再读该数据对象了。
- 主体的许可证级别 <=客体的密级,主体能写客体
- 规则的共同点
- 禁止了拥有高许可证级别的主体更新低密级的数据对象,以防止敏感数据泄露。
强制存取控制的特点
- MAC是对数据本身进行密级标记
- 无论数据如何复制,标记与数据是一个不可分的整体
- 只有符合密级标记要求的用户才可以操纵数据
- 从而提供了更高级别的安全性
授权与回收
- 谁定义?
- DBA和表的建立者(即表的属主)
- 如何定义?
- SQL语句,SQL语言提供了数据控制功能,能够在一定程度上保证数据库中数据的完全性、完整性,并提供了一定的并发控制及恢复能力。
- GRANT
- REVOKE
- SQL语句,SQL语言提供了数据控制功能,能够在一定程度上保证数据库中数据的完全性、完整性,并提供了一定的并发控制及恢复能力。
- 数据控制亦称为数据保护,包括数据的:
- 安全性控制
- 完整性控制
- 并发控制
- 恢复
安全性
- 安全性:保护数据库,防止不合法的使用所造成的数据泄露和破坏。
- 保证数据安全性的主要措施
- 存取控制:控制用户只能存取他有权存取的数据
- 规定不同用户对于不同数据对象所允许执行的操作
完整性
- 数据库的完整性是指数据库中数据的正确性与相容性。
- SQL语言定义完整性约束条件
- CREATE TABLE语句
- ALTER TABLE语句
- 码
- 取值唯一的列
- 参照完整性
- 其他约束条件
并发控制
- 并发控制:当多个用户并发地对数据库进行操作时,对他们加以控制、协调,以保证并发操作正确执行,保持数据库的一致性。
- SQL语言并发控制能力:提供事务、事务开始、事务结束、提交等概念
恢复
- 恢复: 当发生各种类型的故障导致数据库处于不一致状态时,将数据库恢复到一致状态的功能。
- SQL语言恢复功能:提供事务回滚、重做等概念(UNDO、REDO)
GRANT
- GRANT语句的一般格式:
1 | GRANT <权限>[,<权限>]... |
- 谁定义?DBA和表的建立者(即表的属主)
- 功能:将对指定操作对象的指定操作权限授予指定的用户。
操作权限

用户的权限
- 建表(CREATETAB)的权限:属于DBA
- DBA授予->普通用户
- 基本表或视图的属主拥有对该表或视图的一切操作权限
- 接受权限的用户:
- 一个或多个具体用户
- PUBLIC(全体用户)
WITH GRANT OPTION子句
- 指定了WITH GRANT OPTION子句:
- 获得某种权限的用户还可以把这种权限再授予别的用户。
- 没有指定WITH GRANT OPTION子句:
- 获得某种权限的用户只能使用该权限,不能传播该权限。
例1:把查询Student表权限授给用户U1
1
2
3 GRANT SELECT
ON TABLE Student
TO U1;例2:把对Student表和Course表的全部权限授予用户U2和U3
1
2
3 GRANT ALL PRIVILIGES
ON TABLE Student, Course
TO U2, U3;例3:把对表SC的查询权限授予所有用户
1
2
3 GRANT SELECT
ON TABLE SC
TO PUBLIC;例4:把查询Student表和修改学生学号的权限授给用户U4
1
2
3 GRANT UPDATE(Sno), SELECT
ON TABLE Student
TO U4;例5:把对表SC的INSERT权限授予U5用户,并允许他再将此权限授予其他用户
1
2
3
4 GRANT INSERT
ON TABLE SC
TO U5
WITH GRANT OPTION;例6:DBA把在数据库S_C中建立表的权限授予用户U8
1
2
3 GRANT CREATETAB
ON DATABASE S_C
TO U8;
REVOKE
1 | REVOKE <权限>[,<权限>]... |
- 功能:从指定用户那里收回对指定对象的指定权。
例8:收回所有用户对表SC的查询权限
1
2
3 REVOKE SELECT
ON TABLE SC
FROM PUBLIC;例9:把用户U5对SC表的INSERT权限收回
1
2
3 REVOKE INSERT
ON TABLE SC
FROM U5 CASCADE;系统将收回直接或间接从U5处获得的对SC表的INSERT权限:
–>U5–> U6–> U7
收回U5、U6、U7获得的对SC表的INSERT权限:
<–U5<-- U6<-- U7
例10 把用户U4修改学生学号的权限收回
1
2
3 REVOKE UPDATE(Sno)
ON TABLE Student
FROM U4;
SQL灵活的授权机制
- DBA拥有对数据库中所有对象的所有权限,并可以根据应用的需要将不同的权限授予不同的用户。
- 用户对自己建立的基本表和视图拥有全部的操作权限,并且可以用GRANT语句把其中某些权限授予其他用户。
- 被授权的用户如果有“继续授权”的许可,还可以把获得的权限再授予其他用户。
- 所有授予出去的权力在必要时又都可以用REVOKE语句收回。
数据库角色
- 定义
- 数据库角色是被命名的一组与数据库操作相关的权限,角色是权限的集合。
- 可简化授权的过程
- 先用
CREATE ROLE创建角色,再用GRANT给角色授权 - 角色的创建
CREATE ROLE <角色名>
- 例:创建一个角色R1
CREATE ROLE R1;
视图机制
- 视图机制把要保密的数据对无权存取这些数据的用户隐藏起来,
- 视图机制更主要的功能在于提供数据独立性,其安全保护功能太不精细,往往远不能达到应用系统的要求。
- 视图机制与授权机制配合使用:
- 首先用视图机制屏蔽掉一部分保密数据
- 视图上面再进一步定义存取权限
- 间接实现了支持存取谓词的用户权限定义
例:王平只能检索计算机系学生的信息
先建立计算机系学生的视图CS_Student
1
2
3
4
5
6
7
8
9 CREATE VIEW CS_Student
AS
SELECT
FROM Student
WHERE Sdept='CS’;
GRANT SELECT
ON CS_Student
TO 王平; //在视图上进一步定义存取权限
审计
什么是审计
- 启用一个专用的审计日志(Audit Log)将用户对数据库的所有操作记录在上面
- DBA可以利用审计日志中的追踪信息找出非法存取数据的人
- C2以上安全级别的DBMS必须具有审计功能
审计功能的可选性
- 审计很费时间和空间
- DBA可以根据应用对安全性的要求,灵活地打开或关闭审计功能。
强制性机制
- 用户识别和鉴定、存取控制、视图
预防监测手段
- 审计技术
数据加密
- 数据加密
- 防止数据库中数据在存储和传输中失密的有效手段
- 加密的基本思想
- 根据一定的算法将原始数据(术语为明文,Plain text)变换为不可直接识别的格式(术语为密文,Cipher text)
- 不知道解密算法的人无法获知数据的内容
加密方法
- 替换方法
- 使用密钥(Encryption Key)将明文中的每一个字符转换为密文中的一个字符
- 置换方法
- 将明文的字符按不同的顺序重新排列
- 混合方法
- 如:美国1977年制定的官方加密标准:数据加密标准(Data Encryption Standard,简称DES)
DBMS中的数据加密
有些数据库产品提供了数据加密例行程序
有些数据库产品本身未提供加密程序,但提供了接口
- 数据加密功能通常也作为可选特征,允许用户自由选择
- 数据加密与解密是比较费时的操作
- 数据加密与解密程序会占用大量系统资源
- 应该只对高度机密的数据加密
统计数据库安全性
统计数据库的特点
- 允许用户查询聚集类型的信息(例如合计、平均值等)
- 不允许查询单个记录信息
例:允许查询“程序员的平均工资是多少?”不允许查询“程序员张勇的工资?”
统计数据库中特殊的安全性问题
- 隐蔽的信息通道
- 从合法的查询中推导出不合法的信息
例1:下面两个查询都是合法的:
- 本公司共有多少女高级程序员?
- 本公司女高级程序员的工资总额是多少?
如果第一个查询的结果是“1”,
那么第二个查询的结果显然就是这个程序员的工资数。
规则1:任何查询至少要涉及N(N足够大)个以上的记录
例2:用户A发出下面两个合法查询:- 用户A和其他N个程序员的工资总额是多少?
- 用户B和其他N个程序员的工资总额是多少?
若第一个查询的结果是X,第二个查询的结果是Y,
由于用户A知道自己的工资是Z,
那么他可以计算出用户B的工资=Y-(X-Z)。
原因:两个查询之间有很多重复的数据项
规则2:任意两个查询的相交数据项不能超过M个
可以证明,在上述两条规定下,如果想获知用户B的工资额
A至少需要进行1+(N-2)/M次查询
规则3:任一用户的查询次数不能超过1+(N-2)/M
但是如果两个用户合作查询就可以使这一规定失效。
所以,数据库安全机制的设计目标:试图破坏安全的人所花费的代价 >> 得到的利益
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Zorua's Blog!
评论






