数据库的一大特点是数据可以共享,既然是共享,那么肯定会有数据的安全性问题。所以说数据的共享不能是无条件的共享。
1.数据库安全性概述
数据库的安全性是指保护数据库防止不合法使用所造成的数据泄露、更改或破坏。
系统安全保护措施是否有效是数据库系统主要的性能指标之一。
数据库的不安全因素
非授权用户对数据库的恶意存取和破坏
一些黑客(Hacker)和犯罪分子在用户存取数据库时猎取用户名和用户口令,然后假冒合法用户偷取、修改甚至破坏用户数据。
数据库管理系统提供的安全措施主要包括用户身份鉴别、存取控制和视图等技术。
数据库中重要或敏感数据别泄露
为防止数据泄露,数据库系统提供的主要技术有强制存取控制、数据加密存储和数据加密传输。此外安全性较高的部门提供日志审计功能,对入侵进行追踪。
安全环境的脆弱性
数据库的安全性与计算机系统的安全性,与计算机硬件、操作系统、网络系统等安全性是紧密联系的。操作系统安全性的脆弱,网络协议安全保障的不足都会造成数据库安全性的破坏。为加强计算机安全保护,随着互联网的发展,逐步发展建立了一套可信计算机系统概念和标准。
安全标准简介
计算机以及信息安全方面有一系列的安全标准,最有影响力的两个是:TCSEC和CC。
TCSEC
TCSEC又称紫皮书,1991年4月美国NCSC(国家计算机安全中心)颁布了《可信计算机系统评估标准关于可信数据库系统的解释》( Trusted Database Interpretation 简称TCSEC/TDI),它将TCSEC扩展到数据库管理系统,它定义了数据库管理系统的设计与实现中需满足和用以进行安全性级别评估的标准。从四个方面描述安全级别划分的指标:安全策略、责任、保证和文档。
根据计算机系统各项标准的支持情况,TCSEC/TDI将系统划分为四组(division)七个等级,依次是 D、C(C1,C2)、B(B1,B2,B3)、A(A1),按照系统可靠或可信度逐渐增高。
- D:该级别是最低级别。保留D级是为了将一切不符合更高标准的系统统统归于D组。
- C1:该级只提供了非常初级的自主安全保护,能够实现对用户和数据的分离,进行自主存储机制。现有的商业系统稍作改进即可满足
- C2:是安全产品的最低档,提供受控的存取保护,即将C1级的DAC进一步细化,以个人身份注册负责,并实施审计和隔离。C2级产品没有突出的安全特色。如Oracle7、Windows2000。
- B1:该级别的产品才被认为是真正意义上的安全产品。
- B2:结构化保护,建立形式化的安全策略模型并对系统内的所有主体和客体实施DAC和MAC
- B3:安全域,该级的TCB必须满足访问监控器的要求,审计跟踪能力更强,并提供系统恢复过程
- A1:验证设计,即提供B3级保护的同时给出系统的形式化设计说明和验证以确信各安全保护真正实现。
CC
CC是取代TCSEC的一个标准。CC提出国际公认的表述信息技术安全性的结构;把信息产品的安全要求分为:安全功能要求、安全保证要求。安全要求用以规范产品和系统的安全行为,安全保证要求解决如何正确有效地实施这些功能。
CC文本组成:
- 简介和一般模型
介绍有关术语、基本概念和一般模型以及与评估有关的一些框架 - 安全功能要求
列出了一系列类、子类和组件 - 安全保证要求
列出了一系列保证类、子类和组件
提出了评估保证级(Evaluation Assurance Level,EAL),从EAL1至EAL7共分为七级,安保证程度逐渐增高。
2.数据库安全性控制
存取控制流程
- 首先,数据库管理系统对提出SQL访问请求的数据库用户进行身份鉴别,防止不可信用户使用系统。
- 然后,在SQL处理层进行自主存取控制和强制存取控制,进一步可以进行推理控制。
- 还可以对用户访问行为和系统关键操作进行审计,对异常用户行为进行简单入侵检测。
用户身份鉴别
用户身份鉴别是系统提供的最外层安全保护措施。每个用户在系统中都有一个安全标识。常用的身份鉴别方法又如下几种:
静态口令鉴别
静态口令也就是我们常说的密码,他可以有数字字符串等构成。
动态口令鉴别
动态口令即动态密码,一个密码只能用于一次登录。常见的动态密码有短信验证码。
生物特征鉴别
通过生物特征进行认证的技术,生物特征如指纹、虹膜和掌纹等
智能卡鉴别
智能卡是一种不可复制的硬件,内置集成电路的芯片,具有硬件加密功能。如门卡。
存取控制
存取控制主要包括定义用户权限和合法权限检查两个部分。
- 定义用户权限,并将用户权限登记到数据字典中。
- 用户对某一数据对象的操作权力称为权限
- DBMS提供适当的语言来定义用户权限,存放在数据字典中,称做安全规则或授权规则
- 合法权限检查:用户发出存取数据库操作请求,DBMS查找数据字典,进行合法权限检查
用户权限定义和合法权检查机制一起组成了数据库管理系统的存取控制子系统
常用存取控制方法:
- 自主存取控制
C2级
用户对不同的数据对象有不同的存取权限
不同的用户对同一对象也有不同的权限
用户还可将其拥有的存取权限转授给其他用户 - 强制存取控制
B1级
每一个数据对象被标以一定的密级
每一个用户也被授予某一个级别的许可证
对于任意一个对象,只有具有合法许可证的用户才可以存取
自主存取控制方法(DAC)
大型数据库系统都支持自主存取控制,SQL标准也对自主存取控制提供支持,这主要通过SQL的GRANT
和REVOKE
实现。
- 用户权限由两个要素组成:数据库对象和操作类型。
- 定义一个存储权限就是定义这个用户可以在哪些对象上进行哪些操作。定义存储权限称为授权。
在非关系系统中,用户只能对数据进行操作,存取控制对象也仅限于数据本身。关系数据库中存取控制对象如下:
授权:授予与收回
SQL中GRANT
用于授予权限,REVOKE
用户收回已经授权的权限。
授权
GRANT <权限>[,<权限>]...
ON <对象类型> <对象名>[,<对象类型> <对象名>]…
TO <用户>[,<用户>]...
[WITH GRANT OPTION];
1.发出GRANT
语句可以是:数据库管理员、数据库对象创建者、已经拥有该权限的用户
2.接受GRANT可以是:一个或多个具体用户,PUBLIC(即全体用户)
3.如果指定了WITH GRANT OPTION,则获得某种权限的用户还可以把权限授予其他用户,但是不能循环授权
例1:把查询Student表的权限授予给用户u1
GRANT SELECT
ON TABLE Student
TO u1;
例2:把对stu表和course表的全部权限授予给用户u2和u3且让他们可以传播权限。
GRANT PRIVILEGES
ON TABLE stu,course
TO u2,u3
WITH GRANT OPTION;
例3:把对表stu的查询权限授予所有用户
GRANT SELECT
ON TABLE stu
TO PUBLIC;
例4:把查询学生表stu学号的权限授予给用户u4
GRANT SELECT(sno)
ON TABLE stu
TO u4;
收回
授予的权限可以由数据库管理员或其他授权者用REVOKE语句收回
REVOKE语句的一般格式为:
REVOKE <权限>[,<权限>]...
ON <对象类型> <对象名>[,<对象类型><对象名>]…
FROM <用户>[,<用户>]...[CASCADE | RESTRICT];
例1:把用户U4修改学生学号的权限收回
REVOKE UPDATE(Sno)
ON TABLE Student
FROM U4;
例2:收回所有用户对表SC的查询权限
REVOKE SELECT
ON TABLE SC
FROM PUBLIC;
例3:把用户U5对SC表的INSERT权限收回
REVOKE INSERT
ON TABLE SC
FROM U5 CASCADE ;
这里使用CASCADE
关键字是因为U5有将自己的权限授予其他用户。所以收回时一并收回,不然会报错。
创建数据库模式的权限
对创建数据库模式一类的数据库对象由数据库管理员在创建用户时创建。
CREATE USER <username>
[WITH][DBA|RESOURCE|CONNECT];
注意:CREATE USER不是SQL标准,各个系统的实现相差甚远
说明:
- 只有系统的超级用户才有权创建一个新的数据库用户
- 新创建的数据库用户有三种权限:CONNECT、RESOURCE和DBA
- 如没有指定创建的新用户的权限,默认该用户拥有CONNECT权限。拥有CONNECT权限的用户不能创建新用户,不能创建模式,也不能创建基本表,只能登录数据库
- 拥有RESOURCE权限的用户能创建基本表和视图,成为所创建对象的属主。但不能创建模式,不能创建新的用户
- 拥有DBA权限的用户是系统中的超级用户,可以创建新的用户、创建模式、创建基本表和视图等;DBA拥有对所有数据库对象的存取权限,还可以把这些权限授予一般用户
数据库角色
数据库角色是被命名的一组与数据库操作相关的权限,角色是权限的集合。可以为一组具有相同权限的用户创建一个角色,使用角色简化授权的过程。
角色的创建
CREATE ROLE <角色名>
这样创建的角色是空的没有任何内容,可以用GRANT
为角色分配权限
给角色授权
GRANT <权限>[,<权限>]…
ON <对象类型>对象名
TO <角色>[,<角色>]…
将一个角色授予其他角色或用户
GRANT <角色1>[,<角色2>]…
TO <角色3>[,<用户1>]…
[WITH ADMIN OPTION]
- 该语句把角色授予某用户,或授予另一个角色
- 授予者是角色的创建者或拥有在这个角色上的ADMIN OPTION
- 指定了WITH ADMIN OPTION则获得某种权限的角色或用户还可以把这种权限授予其他角色
- 一个角色的权限:直接授予这个角色的全部权限加上其他角色
授予这个角色的全部权限
角色权限的收回
REVOKE <权限>[,<权限>]…
ON <对象类型> <对象名>
FROM <角色>[,<角色>]…
REVOKE执行者是:
- 角色的创建者
- 拥有在这个(些)角色上的ADMIN OPTION
强制存取控制方法(MAC)
用于解决自主存储机制可能存在的“无意泄露”问题。
强制存取机制
是指为保证系统更高程度的安全性,按照TCSEC标准中安全策略的要求所采取的强制存取检查手段。它不是用户能直接感知或进行控制的,用于数据有严格而固定密级分类的部门,例如政府部门或军事部门。
在强制存取控制中,数据库管理系统所管理的全部实体被分为主体和客体两大类
主体
- 主体是系统中的活动实体
- 数据库管理系统所管理的实际用户
- 代表用户的各进程
客体
客体是系统中的被动实体,受主体操纵的文件、基本表、索引、视图等。
敏感度标记
对于主体和客体,数据库管理系统为它们每个实例指派一个敏感度标记
敏感度标记分成若干级别绝密(Top Secret,TS)、机密(Secret,S)、可信(Confidential,C)、公开(Public,P)。
TS>=S>=C>=P
主体的敏感度标记称为许可证级别,客体的敏感度标记称为密级。
强制存取控制规则
强制存取机制是通过对比主体和客体的敏感度标记和客体的敏感度标记,最终确定主体是否能够存取客体。
(1)仅当主体的许可证级别大于或等于客体的密级时,该主体才能读取相应的客体
(2)仅当主体的许可证级别小于或等于客体的密级时,该主体才能写相应的客体
- 强制存取控制(MAC)是对数据本身进行密级标记,无论数据如何复制,标记与数据是一个不可分的整体,只有符合密级标记要求的用户才可以操纵数据。
- 自主存取控制与强制存取控制共同构成数据库管理系统的安全机制
流程
先进行自主存取控制检查,通过自主存取控制检查的数据对象再由系统进行强制存取控制检查,只有通过强制存取控制检查的数据对象方可存取。
3.视图机制
视图机制即通过视图来对数据进行保护。简单的说就是通过视图机制把要保密的数据对无权操作的用户隐藏起来,从而自动对数据提供一定程度的安全保护。
视图机制间接地实现支持存取谓词的用户权限定义。
例:某大学老师王平只能检索计算机系学生的信息,系主任张明具有检索和增删改计算机系所有学生的权限。通过视图建立安全机制如下:
-- 先建立计算机系学生的视图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.审计
什么是审计
启用一个专用的审计日志(Audit Log)将用户对数据库的所有操作记录在上面,审计员利用审计日志监控数据库中的各种行为,找出非法存取数据的人、时间和内容。还有一个就是C2以上安全级别的DBMS必须具有审计功能。
审计事件
服务器事件
审计数据库服务器发生的事件就是服务器事件,包含数据库服务器启动、停止、数据库服务器配置文件重新加载。
系统权限
对系统拥有的结构或模式对象进行操作的审计,要求该操作的权限是通过系统权限获得的
语句事件
对SQL语句,如DDL、DML、DQL及DCL语句的审计
模式对象事件
对特定模式对象上进行的SELECT或DML操作的审计
审计功能
- 基本功能:提供多种审计查阅方式提供多种审计查阅方式
- 多套审计规则:一般在初始化设定
- 提供审计分析和报表功能
- 审计日志管理功能
- 防止审计员误删审计记录,审计日志必须先转储后删除
- 对转储的审计记录文件提供完整性和保密性保护
- 只允许审计员查阅和转储审计记录,不允许任何用户新增和修改审计记录等
- 提供查询审计设置及审计记录信息的专门视图
AUDIT语句和NOAUDIT语句
AUDIT语句用来设置审计功能 ,NOAUDIT语句用来取消审计功能 。
审计一般分为用户级审计和系统级审计。
- 用户级审计是任何用户都可以设置的审计,主要用于记录各种类型的SQL操作。
- 系统级审计职能由数据库管理员设置,用以监控成功或失败的登录要求、监测授权和收回操作以及其他数据库级权限下的操作。
- 对修改SC表结构或修改SC表数据的操作进行审计
AUDIT ALTER,UPDATE
ON SC;
-- 取消对SC表的一切审计
NOAUDIT ALTER,UPDATE
ON SC;
5.数据加密
对于敏感的数据,我们常常采用数据加密技术对数据进行加密。加密的基本思想是:根据一定的算法将原始数据(明文)变换为不可直接识别的格式(密文),从而使得不知道解密算法的人无法获取数据内容。
数据加密主要包括存储加密和传输加密。
存储加密
一般提供透明和非透明两种存储加密方式。
- 透明存储加密方式:是通过内核加密保护方式,对用户完全透明,是数据在写到磁盘时对数据进行加密,授权用户读取时再对其进行解密。数据库程序不需要做任何修改,只需要在创建表语句中说明加密字段即可。
内核级加密方法: 性能较好,安全完备性较高 - 非透明存储方式:通过多个加密函数实现
传输加密
6.其他安全性保护
为满足较高安全等级数据库管理系统的安全性保护要求,在自主存储控制和强制存取控制之外,还有推理控制以及数据库应用中隐蔽信道和数据隐私保护技术等。
推理控制处理的是强制存取没有解决的问题。数据库推理控制机制用来避免用户利用其能够访问的数据推知更高机密的数据。常用方法:基于函数依赖的推理控制、基于敏感关联的推理控制。
隐蔽通道也是处理强制存取没有解决的问题
数据隐私保护:
- 描述个人控制其不愿他人知道或他人不便知道的个人数据的能力
- 范围很广:数据收集、数据存储、数据处理和数据发布等各个阶段