数据库安全性概述
1.数据库安全性定义数据库的安全性是指保护数据库以防止不合法的使用所造成的数据泄露、更改或破坏。
2.重要性
数据库的一大特点是数据可以共享
数据共享必然带来数据库的安全性问题
数据库系统中的数据共享不能是无条件的共享
系统的安全保护措施是否有效是数据库系统的主要性能指标之一。
数据库的不安全因素
1)非授权用户对数据库的恶意存取和破坏
- 安全措施:用户身份鉴别、存取控制、和视图等
2)数据库中重要或敏感数据被泄露
- 安全措施:审计、日志、入侵检测、数据加密等
3)安全环境的脆弱性,包括:硬件、OS、网络等。
- 可信计算机系统
数据库安全技术
- 用户身份验证
- 多层存取控制
- 审计
- 视图
- 数据加密等
用户身份鉴别
- 用户标识与鉴别(Identification & Authentication):
- 系统提供的最外层安全保护措施;
- 系统提供一定的方式让用户标识自己的名字和身份,系统进行核实,通过鉴定后才提供系统使用权。
- 常用鉴别方法:
- 口令:静态(易被窃取)、动态(一次一密)
- 生物特征识别:指纹、声音、照片等
- 智能卡
- 回答问题
存取控制
1.什么是存取控制?对于获得上机权的用户还要根据系统预先定义好的外模式(视图)或用户权限进行存取控制,保证用户只能存取他有权存取的数据。
2.方法
- 定义用户权限
- 合法权限检查
3.常用存取控制方法
- 自主存取控制(Discretionary Access Control,DAC),C2级,灵活
- 强制存取控制(Mandatory Access Control,MAC),B1级,严格
视图机制
- 视图能够把要保密的数据对无权存取这些数据的用户隐藏起来,因此对数据提供一定程度的安全保护。
- 视图机制间接实现了支持存取谓词的用户权限定义。
[例] 建立计算机系学生的视图,把对该视图的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 张明
审计
审计
- 系统自动建立审计日志,将用户对数据库的所有操作记录在上面。
- DBA利用审计日志找出非法存取数据的人、时间和内容。
- C2以上安全级别的DBMS必须具有。
审计分类
–用户级审计:针对自己创建的数据库表或视图进行审计。
记录所有用户对这些表或视图的一切成功和(或)不成功的访问要求以及各种类型的SQL操作 。–系统级审计:由DBA设置
监测成功或失败的登录要求;
监测GRANT和REVOKE操作以及其他数据库级权限下的操作。
审计AUDIT语句
AUDIT语句:设置审计功能
NOAUDIT语句:取消审计功能
数据加密
- 思想
数据库中的数据以密码形式存放,使用时由用户设计的解码程序将其转换成用户可读的数据。这样,数据库中的数据即使被窃取,也只能是一些无法辨认的代码。 - 数据库加密:存储加密、传输加密
- 数据库加密在哪个层次实现?
- OS层
- DBMS内核层
- DBMS外层
自主存取控制技术
自主存取控制
用户“自主”决定将数据的存取权限授予何人、决定是否将“授权”的权限授予别人,称为“自主存取控制”。
- 定义:用户对于不同的数据库对象有不同的存取权限,不同的用户对同一对象也有不同的权限,而且用户还可将其拥有的存取权限转授给其他用户。
- 用户权限组成要素 :数据对象、操作类型
- 授权:定义用户可以在哪些数据库对象上进行哪些类型的操作。
授权与回收
SQL中使用GRANT语句和REVOKE语句来实现自主存取控制。
GRANT语句
GRANT语句的一般格式:
1
2
3
4GRANT<权限>[,<权限>]...
[ON<对象类型> <对象名>]
TO<用户>[,<用户>]...
[WITH GRANT OPTION];语义:将对指定操作对象的指定操作权限授予指定的用户
- 授权人:DBA、数据库对象创建者、拥有该权限的用户
- 被授权限的用户: 一个或多个具体用户、PUBLIC(全体用户)
- WITH GRANT OPTION子句:指定:可以再授予,没有指定:不能传播
- 不允许循环授权
REVOKE语句
授予的权限可以由DBA或其他授权者用REVOKE语句收回。
REVOKE语句的一般格式为:
1
2
3REVOKE<权限>[,<权限>]...
[ON<对象类型> <对象名>]
FROM<用户>[,<用户>]...[CASCADE | RESTRICT];
创建数据库模式的权限
DBA在创建用户时,可以创建数据库模式的权限。
CREATE USER语句格式:
1 | CREATE USER <username> |
数据库角色
被命名的一组与数据库操作相关的权限
- 角色是权限的集合
- 可以为一组具有相同权限的用户创建一个角色
- 简化授权的过程
1、角色的创建
1 | CREATE ROLE <角色名> |
2、给角色授权
1 | GRANT<权限>[,<权限>]... |
3、将一个角色授予其他的角色或用户
1 | GRANT<角色1>[,<角色2>]... |
4、角色权限收回
1 | REVOKE<权限>[,<权限>]... |
示例如下:
自主存取控制缺点
- 可能存在数据的“无意泄露”
- 原因:这种机制仅仅通过对数据的存取权限来进行安全控制,而数据本身并无安全性标记
强制存取控制机制
对系统控制下的所有主客体赋予安全性标记,系统根据标记安全策略,实施强制存取控制
强制存取控制(MAC)
- 保证更高程度的安全性
- 用户不能直接感知或进行控制
- 适用于对数据有严格而固定密级分类的部门
- 军事部门
- 政府部门
强制存取控制方法
- 主体是系统中的活动实体
- DBMS所管理的实际用户
- 代表用户的各进程
- 客体是系统中的被动实体,是受主体操纵的
- 文件、基表、索引、视图
- 敏感度标记(Label)
- 绝密(Top Secret)> 机密(Secret)> 可信(Confidential)> 公开(Public)
- 主体的敏感度标记称为许可证级别(Clearance Level)
- 客体的敏感度标记称为密级(Classification Level)
- 强制存取控制就是通过对比主体的许可证级别和客体的密级,最终确定主体能否存取客体。
主体可更新密级高于他的客体
强制存取控制规则
- 强制存取控制规则:
- 仅当主体的许可证级别大于或等于客体的密级时,该主体才能读取相应的客体
- 仅当主体的许可证级别小于或等于客体的密级时,该主体才能写相应的客体
- 规则的关键点:
禁止拥有高许可证级别的主体更新低密级的数据对象
强制存取控制的优点
- 禁止拥有高许可证级别的主体更新低密级的数据对象,从而保证了敏感数据的可靠性;
- 禁止低许可证级别的主体浏览高密级的数据,避免了敏感数据的泄漏;
- MAC对数据本身进行密级标记,无论数据如何复制,标记与数据是不可分割的整体。只有符合密级标记要求的用户才可以操作相应数据,提高了安全性级别。
强制存取控制方法
- DAC与MAC共同构成DBMS的安全机制
- 实现MAC时要首先实现DAC
- 原因:较高安全性级别提供的安全保护要包含较低级别的所有保护
- 先进行DAC检查,通过DAC检查的数据对象再由系统进行MAC检查,只有通过MAC检查的数据对象方可存取。
数据库安全机制的设计目标:试图破坏安全的人所花费的代价 >> 得到的利益