什么是数据库安全性:防止不合法的使用所造成的数据暴露更改、破坏。
4.1数据库安全性概述:
4.1.1数据库的不安全因素
非授权用户对数据库的恶意存取和破坏(盗取密码、口令等)
数据库中重要敏感的数据被泄露
强制存取控制:给数据加标签(保密、绝密等等)
数据加密存储和加密传输
审计日志分析(例如:登录错误多少遍之后锁定。)
安全环境的脆弱性:数据库的安全性与计算机系统的安全性紧密联系。计算机硬件、操作系统、网络系统等的安全性脆弱。建立了一套可信(Trusted)计算机系统的概念和标准。
4.1.2安全标准简介
1、TCSEC/TDI安全级别划分:从安全策略、责任、保证、文档四个方面描述安全性级别划分
D级:将一切不符合更高标准的系统归为D级,D级几乎没什么专门机制保障安全性,例如DOS操作系统
C1级:**非常初级的自主安全保护,**能够实现自主存取控制(DAC)(给不同用户分配不同权限),
C2级:安全产品的最低档次:在C1基础上,将DAC进一步细化,以个人身份注册:例如windows2000
B1级:标记安全保护,加了强制存取控制(MAC)(给数据贴标签,不同用户访问的数据权限不一样)
B2级:结构化保护,建立形式化的安全策略模型并对系统内的所有主体和客体实施DAC和MAC
B3级:安全域: 该级的TCB必须满足访问监控器的要求,审计跟踪能力更强提供系统恢复过程(冗余)
A1级:验证设计,提供B3级保护的同时给出系统的形式化设计说明和验证以确信各安全保护真正实现
2.CC标准
4.2数据性安全性控制
非法使用数据库的情况:
编写合法程序绕过数据库管理系统及其授权机制
直接或编写应用程序执行非授权操作(暴力破解)
通过多次合法查询数据库从中推导出一些保密数据(例如查取平均工资来推断别人的工资。)
计算机系统的安全模型
数据库有关的安全性:用户身份验证、多层存取控制、审计、视图、数据加密等
数据库管理系统安全性控制模型:
4.2.1用户身份鉴别:
用户标识组成:由用户名和标识号组成,用户标识号在系统整个生命周期内唯一。
用户身份鉴别的方法:
静态口令鉴别:一般由用户自己设定(传统密码)
动态口令鉴别:每次登录都不一样(例如短信验证码)
生物特征鉴别:例如 指纹、虹膜、掌纹等等
智能卡鉴别:是一种不可复制的硬件,内置集成电路的芯片,具有硬件加密功能
4.2.2存取控制
定义用户权限,并将用户权限登记到数据字典中
用户对某一数据对象的操作权力称为权限
DBMS提供适当的语言来定义用户权限,存放在数据字典中,称做安全规则或授权规则
合法权限检查
用户发出存取数据库操作请求
DBMS查找数据字典,进行合法权限检查
常用存取控制方法
自主存取控制(Discretionary Access Control ,简称DAC):
用户对不同的数据对象有不同的存取权限,不同的用户对同一对象也有不同的权限,用户还可将其拥有的存取权限转授给其他用户。C2级的DBMS可支持
强制存取控制(Mandatory Access Control,简称 MAC):
每一个数据对象被标以一定的密级,每一个用户也被授予某一个级别的许可证,对于任意一个对象,只有具有合法许可证的用户才可以存取。B1级的DBMS可支持
4.2.3自主存取控制方法
1.用户权限组成:数据对象+操作类型
2.关系数据库系统中存取对象的控制权限
4.2.4 授权:授予与回收
1.GRANT 授予权限
GRANT <权限>[,<权限>]...
ON <对象类型> <对象名>[,<对象类型> <对象名>]…
TO <用户>[,<用户>]...
[WITH GRANT OPTION];
例:
把查询Student表权限授给用户U1
GRANT SELECT
ON TABLE Student
TO U1;
把对Student表和Course表的全部权限授予用户U2和U3
GRANT ALL PRIVILIGES
ON TABLE Student,Course
TO U2,U3;
把对表SC的查询权限授予所有用户
GRANT SELECT
ON TABLE SC
TO PUBLIC;
把查询Student表和修改学生学号的权限授给用户U4
GRANT UPDATE(Sno), SELECT
ON TABLE Student
TO U4;
把对表SC的INSERT权限授予U5用户,并允许他再将此权限授予其他用户
GRANT INSERT
ON TABLE SC
TO U5
WITH GRANT OPTION;
2.REVOKE:收回权限
REVOKE <权限>[,<权限>]...
ON <对象类型> <对象名>[,<对象类型><对象名>]…
FROM <用户>[,<用户>]...[CASCADE | RESTRICT];
把用户U4修改学生学号的权限收回
REVOKE UPDATE(Sno)
ON TABLE Student
FROM U4;
收回所有用户对表SC的查询权限
REVOKE SELECT
ON TABLE SC
FROM PUBLIC;
把用户U5对SC表的INSERT权限收回,此时U5传播授权给了U6,U6传播给了U7
将用户U5的INSERT权限收回的时候应该使用CASCADE,否则拒绝执行该语句
如果U6或U7还从其他用户处获得对SC表的INSERT权限,则他们仍具有此权限,系统只收回直接或间接从U5处获得的权限`
REVOKE INSERT
ON TABLE SC
FROM U5 CASCADE ;//注意使用CASCADE关键字
总结:
超级管理员的授权:拥有所有对象的所有权限
用户的授权:拥有自己建立的对象的全部操作权限 ,可以使用grant给予其他用户权限
被授权用户的授权:如果拥有继续授权的许可(WITH GRANT OPTION;),就可以继续授权给其他用户
所有授权出去的权力都能收回,如果是一连串的,必须使用cascade
3.创建数据库模式的权限
超级管理员在创建用户时实现对创建数据库模式的权限
- create user 语句格式
CREATE USER <username>
[WITH][DBA|RESOURCE|CONNECT];
注意事项:
只有超级用户(DBA)才有权限创建一个新的数据库用户
新建的用户拥有三种权限CONNECT、RESOURCE和DBA
如果在创建时没有指定新用户权限,该用户默认只有CONNECT权限,该用户不能创建新模式、基本表,只能登录数据库
拥有RESOURCE权限的用户可以创建基本表和视图、但不能创建模式、新用户。
拥有DBA权限的用户是超级用户,可以创建新用户、新模式、基本表、新试图等等,并且拥有一切数据的管理权限,并且可以将这些权限授予其他一般用户
4.2.5数据库角色
定义:被命名的一组与数据库操作相关的权限,角色是权限的集合,
作用:可以为一组具有相同权限的用户创建一个角色,简化授权的过程。(否则需要一个一个grant授予。)
1.角色的创建
CREATE ROLE <角色名>
2.给角色授权
GRANT <权限>[,<权限>]…
ON <对象类型>对象名
TO <角色>[,<角色>]…
3.将一个角色授予其他的角色或用户
GRANT <角色1>[,<角色2>]…
TO <角色3>[,<用户1>]…
[WITH ADMIN OPTION]
1.该语句把角色授予某用户,或授予另一个角色
2.授予者是角色的创建者或拥有在这个角色上的ADMIN OPTION
3.指定了WITH ADMIN OPTION则获得某种权限的角色或用户还可以把这种权限授予其他角色
一个角色的权限:直接授予这个角色的全部权限加上其他角色授予这个角色的全部权限(角色可以传递)
4.角色权限的收回
REVOKE <权限>[,<权限>]…
ON <对象类型> <对象名>
FROM <角色>[,<角色>]…
用户可以回收角色的权限,从而修改角色拥有的权限
REVOKE执行者是:角色的创建者,拥有在这个(些)角色上的ADMIN OPTION
例:
通过角色来实现将一组权限授予一个用户。
步骤如下:
(1)首先创建一个角色 R1
CREATE ROLE R1;
(2)然后使用GRANT语句,使角色R1拥有Student表的 SELECT、UPDATE、INSERT权限
GRANT SELECT, UPDATE, INSERT
ON TABLE Student
TO R1;
(3)将这个角色授予王平,张明,赵玲。使他们具有角色R1所包含的全部权限
GRANT R1
TO 王平,张明,赵玲;
(4) 可以一次性通过R1来回收王平的这3个权限
REVOKE R1
FROM 王平;
4.2.6 强制存取控制方法(MAC)
自主存取控制可能存在数据的“无意泄露”(例如,如果黑客通过一些手段获取了用户权限,那么数据就全部暴露了。)
原因:这种机制仅仅通过对数据的存取权限来进行安全控制,而数据本身并无安全性标记
解决:对系统控制下的所有主体、客体实施强制存取控制策略
主体:系统中的活动实体:数据库管理系统所管理的实际用户,代表用户的各进程
客体:系统中的被动实体,受主体操纵:文件、基本表、索引、视图
作用:保证更高程度的安全性,用户不能直接感知或进行控制,适用于对数据有严格而固定密级分类的部门,如军事部门和政府部门。
敏感度标记:对于主题和客体,为每个实例指派一个敏感度标记(贴一个标签)
敏感度标记分成若干级别:
绝密(Top Secret,TS)
机密(Secret,S)
可信(Confidential,C)
公开(Public,P)
主体的敏感度标记称为许可证级别(Clearance Level)
客体的敏感度标记称为密级(Classification Level)
强制存取控制规则
只有主体的许可证级别大于等于客体的密级,主体才能读取客体
只有主体的许可证级别低于等于客体的密级,主体才能写相应的客体。为什么呢?→保证数据的级别不因你修改和写入而发生变化。
强制存取控制(MAC)是对数据本身进行密级标记,无论数据如何复制,标记与数据是一个不可分的整体,只有符合密级标记要求的用户才可以操纵数据。
实现强制存取控制时要首先实现自主存取控制
原因:较高安全性级别提供的安全保护要包含较低级别的所有保护
自主存取控制与强制存取控制共同构成数据库管理系统的安全机制
4.3 视图机制
把要保密的数据对无权存取这些数据的用户隐藏起来,对数据提供一定程度的安全保护,间接地实现支持存取谓词的用户权限定义。
我的理解:视图是一个虚表,存了一些无关紧要不需要隐藏的数据,例如学生的姓名、年龄等,比较重要的身份证号、账号密码等都隐藏了,一些无读取这些权限的用户想看这个表时,会返回给他一个视图,这样他就看不到比较重要的数据了。
例:
建立计算机系学生的视图,把对该视图的SELECT权限授于王平,把该视图上的所有操作权限授于张明
-- 先建立计算机系学生的视图CS_Student
CREATE VIEW CS_Student
AS
SELECT *
FROM Student
WHERE Sdept='CS';
-- 在视图上进一步定义存取权限
GRANT SELECT
ON CS_Student
TO 王平;
GRANT ALL PRIVILIGES
ON CS_Student
TO 张明;
4.4 审计(Audit)
审计会造成很大的开销,导致效率变低,审计不是必要的,必须是安全性要求较高的部门才使用
审计日记:将用户对数据库所有的操作记录放在上边
审计员
C2以上安全级别的DBMS必须具有审计功能。
审计事件
服务器事件:审计数据库服务器发生的事件,包括数据库服务器的启动、停止、配置文件的重新加载。
系统权限:对系统拥有的结构或模式对象进行操作的审计;要求该操作的权限是通过系统权限获得的。
语句事件:对SQL语句,如DDL、DML、DQL及DCL语句的审计;
模式对象事件:对特定模式对象上进行的SELECT或DML操作的审计 ;
模式对象包括表、视图、存储过程、函数等,不包括依附于表的索引、约束、触发器等。
审计功能
基本功能:提供多种审计查阅方式
多套审计规则:一般在初始化设定
提供审计分析和报表功能
审计日志管理功能:
防止审计员误删审计记录,审计日志必须先转储后删除
对转储的审计记录文件提供完整性和保密性保护
只允许审计员查阅和转储审计记录,不允许任何用户新增和修改审计记录等(包括管理员)
提供查询审计设置及审计记录信息的专门视图
总的就是要保持真实性
审计分类
用户级审计:任何用户都可创建,主要用户针对自己创建的数据库表和视图进行审计
系统级审计:只能由管理员创建,审计整个DBMS
AUDIT语句和NOAUDIT语句
AUDIT语句:设置审计功能
NOAUDIT语句:取消审计功能
例:
对修改SC表结构或修改SC表数据的操作进行审计
AUDIT ALTER, UPDATE
ON SC;
取消对SC表的一切审计
NOAUDIT ALTER, UPDATE
ON SC;
说明:
1.审计设置和审计日志一般存储在数据字典内
2.必须打开审计开关,系统参数audit_trail设为true,才能在系统表SYS_AUDITTRAIL中看到审计信息
3.审计是事后检查的一种形式,而不是当时就能判断
4.5 数据加密
数据加密:防止数据库中数据在存储和传输中失密的有效手段
加密的基本思想:根据一定的算法将原始数据—明文(Plain text)变换为不可直接识别的格式—密文(Cipher text)
加密方法:存储加密和传输加密
1. 存储加密
透明存储加密():
内核级加密保护方式,对用户完全透明
将数据在写到磁盘时对数据进行加密,授权用户读取数据时再对其进行解密
数据库的应用程序不需要做任何修改,只需在创建表语句中说明需加密的字段即可
内核级加密方法: 性能较好,安全完备性较高
非透明存储加密(用户自己加密)通过多个加密函数实现
2. 传输加密
链路加密:在链路层进行加密,传输信息由报头和报文两部分组成,报文和报头均加密
端到端加密:在发送端加密,接收端解密,只加密报文不加密报头,所需密码设备数量相对较少,容易被非法监听者发现并从中获取敏感信息
3. 数据库管理系统可信传输
确认通信双方端点的可靠性(双方出示证书)
采用基于数字证书(CA)的服务器和客户端认证方式(客户端和服务器互相将对方列入可信列表)
通信时均首先向对方提供己方证书,然后使用本地的CA 信任列表和证书撤销列表对接收到的对方证书进行验证
协商加密算法和密钥
- 确认双方端点的可靠性后,通信双方协商本次会话的加密算法与密钥
可信数据传输
业务数据在被发送之前将被用某一组特定的密钥进行加密和消息摘要计算,以密文形式在网络上传输(防止在传输中信息被破坏)
当业务数据被接收的时候,需用相同一组特定的密钥进行解密和摘要计算
4.6 其他安全性保护
推理控制:
处理强制存取控制未解决的问题
避免用户利用能够访问的数据推知更高密级的数 据
常用方法:基于函数依赖的推理控制,基于敏感关联的推理控制
隐蔽信道:
- 处理强制存取控制未解决的问题
数据隐私保护:
描述个人控制其不愿他人知道或他人不便知道的个人数据的能力
范围很广:数据收集、数据存储、数据处理和数据发布等各个阶段