文章目录
4.1数据库的安全概述
== 数据库的安全行是指保护数据以防不合法的使用所造成的数据泄露、更改或破坏。==
不合法:用户不合法/操作不合法
4.1.1数据库的不安全因素
- 非授权用户对数据库的恶意存取和破坏
- 数据库中重要的或敏感的数据被泄露
- 安全环境的脆弱
数据库的安全性与计算机系统的安全性(计算机硬件、操作系统、网络系统)的安全性是紧密相连的,操作系统安全的脆弱、网络协议安全保障的不足都会造成数据库安全性的破坏。
4.2数据库的安全控制
在一般的计算机系统中,安全措施是一级一级层层设置的。
4.2.1用户身份鉴别
用户身份鉴别是数据库管理系统中提供的最外层的安全保护措施
- 静态口令鉴别
提升静态口令鉴别安全性方法:
1. 口令适当长
2. 采用多种字符
3. 自动断开连接
4. 回送显示的安全性
5. 记录和报告 - 动态口令鉴别
- 生物特征鉴别
- 智能卡鉴别(IC)
磁卡易被读取信息,现在逐步被IC智能卡取代
实际应用中都采用PIN和智能卡相互结合的方式,这张有一种被窃取,用户身份任然不会被冒充PIN 码是个人身份码,指持卡人必须输入正确的 PIN 码,才能表明他是卡的真正拥有者,从而才能使用该卡的各项功能。PIN 码存储在智能卡不可读的存储空间中,因此任何人(包括一般用户和卡商)都不可能从智能卡中读取 PIN 码的值。这样就保证了智能卡的安全性。哪怕卡掉了,也不怕被人非法使用。
4.2.2存取控制
数据库安全最重要的一点就是确保只授权给有资格的用户访问数据库的权限,同时令所有未被授权的人员无法接近数据,这主要通过数据库系统的存取控制机制的实现,这主要通过数据库系统的存取控制机制实现。
== 存取控制机制主要包括定义用户权限和合法权限检查两部分==
- 定义用户权限,并将用户权限登记到数据字典中
- 合法权限检查
定义用户权限和合法权限检查机制一起组成了数据库管理系统的存取控制子系统
4.2.3自主存取控制方法
自主存取控制(Discretionary Access Control)
强制存取控制(Mandatory Access Control)
用户对于不同数据库对象有不同的存取权限,不同用户对同一对象也有不同的权限。用户还可以将其拥有的权限授予给其他用户,因此自主存取控制的权限特别高。
用户权限是由两个要素定义的:数据库对象和操作类型
在非关系系统中,用户只能对数据进行操作,存取控制的数据库对象也仅限于数据本身
在关系型系统中,存取控制的对象不仅有数据(基本表中的数据、属性列上的数据),还有数据库模式(基本表、视图、索引的创建等)
主要通过GRANT语句和REVOKE语句来实现
4.2.4授权:授权与收回
GRANT
GRANT <权限>[<权限>...]
ON <对象类型><对象>[<对象类型><对象>...]
TO <用户>
[WITH GRANT OPTION]
GRANT SELECT
ON TABLE Studnet
TO U1
GRANT ALL PRIVILEGES
ON TABLE Stuent,Course
TO U1,U2
GRANT SELECT,UPDATE(Sno)
ON TABLE Student
TO U4
属性列名授权的时候必须要明确指出相应的属性列名
GRANT INSERT
ON TABLE SC
TO U5
[WITH GRANT OPTION]
REVOKE
授权用户的权限可以由数据库管理员或其他授权者用REVOKE语句收回
REVOKE <权限>[<权限>...]
ON <对象类型><对象>[<对象类型><对象>...]
FROM <用户1>[<用户2>...]
[CASCADE|RESTRICT]
REVOKE UPDATE(Sno)
ON TABLE Student
FROM U1
REVOKE SELECT
ON TABLE SC
FROM PUBLIC
REVOKE INSERT
ON TABLE SC
FROM U5
CASCADE
restrict: 确保只有不存在相关视图和 完整性约束的表才能删除(会进行提示)
cascade: 任何相关视图和完整性约束一并被删除
可见用户可以“自主”地决定将数据的存取权限授予何人、决定是否也将”授权“权限授予别人。因此称这样的存取控制为自主存取控制。
创建数据库模式的权限
GRANT和REVOKE语句向用户授予或收回对数据的操作权限。创建数据库模式一类的数据库对象的授权则由数据库管理员在创建用户时实现
CREATE USER <username> [WITH] [DBA|RESOURCE|CONNET]
CONNECT是默认
4.2.5数据库角色
数据库角色是被命名的一组与数据库相关的操作的权限,角色是权限的结合。
创建角色
CREATE ROLE<角色名>
给角色授权
GRANT <权限>[,<权限>...]
ON <对象类型><对象>
TO <角色1>[<角色2>...]
将一个角色授予其他角色和用户
GRANT <角色1>[<角色2>...]
TO <用户1>[<用户2>...]
[WITH ADMIN OPTION]
[WITH ADMIN OPTION]是获得了某种权限的角色或者用户还可以把这种权限再授予其他角色
角色权限的收回
REVOKE <权限>[,<权限>...]
ON <对象类型><对象>
FROM <角色1>[<角色2>...]
REVOKE动作的执行者或者是角色的创建者,或者在这个角色上拥有ADMIN OPTION。
CREATE ROLE R1;
GRANT SELECT,UPDATE,INSERT
ON TABLE Student
TO R1;
GRANT R1
TO 王平,张明
REVOKE R1
FROM 王平
角色权限的修改,直接加就行
GRANT DELETE
ON TABLE Student
TO R1
REVOKE SELECT
ON TABLE Student
FROM R1
4.2.6强制存取控制
自主存取控制(MAC)能够通过授权机制有效地控制对敏感数据的存取。但是由于用户对数据的存储权限是“自主”的,仍可能存在数据的无意泄露。
造成这一问题的根本原因在于,这种机制仅仅通过对数据的存取权限来进行安全控制,而数据本身并没有安全标记。要解决这个问题就需要对系统控制下的所有主客体实施强制存取控制策略。
主体:系统中的活动实体,包括数据库管理系统中的所有实际用户,也包括代表用户的各个进程
客体:系统中的被动实体,受主体操纵,包括文件、基本表、索引、视图等。
对于主体和客体,数据库管理系统为他们每个实例指派一个敏感度标记(label)
绝密(TOP SECRET,TS)
机密(SECRET,S)
可信(CONFIDENCIAL,C)
公开(PUBLIC,P)
上读下写规则:
- 只有当主体的许可证级别大于或等于客体的密级时,该主体才能读取相应的客体
- 只有当主体的许可证级别小于或等于客体的密级时,该主体才能写相应的客体
(如果违反2,可能会导致数据泄露,如果TS密级的主体把TS级内容写入P级客体)
4.3视图机制
可以为不同的用户定义不同的视图,把数据对象限制在一定的范围。
可以通过视图机制,把要保密的数据对无权存取的用户隐藏起来,从而自动对数据提供一定程度的安全保护。
CREATE VIEW Student_CS
AS
SELECT *
FROM Student
WHERE Sdept='CS'
GRANT SELECT
ON VIEW Student_CS
TO 王平
GRANT ALL PRIVILEGES
ON TABLE Student_CS
TO 张明
4.4审计
审计功能把用户对数据库的所有操作自动记录下来放入审计日志(auditlog)
审计员可以利用审计日志监控数据库的各种行为,重现导致数据库现有状况的一系列事件,找出非法存储数据的人、事件、内容等。
还可以通过审计文件对潜在的威胁提前采取措施加以防范。
4.5数据加密
存储加密
透明加密:内核级加密保护方式,对用户完全透明
非透明加密:通过多个加密函数实现
传输加密
4.6其他安全保护
推理控制(inference control)
推理控制机制用来避免用户能够利用其能够访问的数据推知更高密级的数据。