数据库管理系统提供统一的数据保护功能来保证数据的安全可靠和正确有效。数据库的数据保护主要包括数据的安全性和完整性。
一、安全性概述
数据库的安全性是指保护数据库以防止不合法使用所造成的数据泄露、更改或损坏。系统安全保护措施是否有效是数据库系统的主要技术指标之一。
1、数据库的不安全因素
1)非授权用户对数据库的恶意存取和破坏
措施:包括用户身份鉴别、存取控制和视图等技术。
2)数据库中重要或敏感的数据被泄露
措施:强制存取控制、数据加密存储和加密传输等。
3)安全环境的脆弱性
措施:加强计算机系统的安全性保证,建立完善的可信标准(安全标准)。
2、安全标准简介
安全标准比较有影响力的有:
1)TCSEC(桔皮书):1985年美国国防部(DoD)正式颁布的《DoD可信计算机系统评估标准》。
2)CC:1993年联合行动,解决原标准中概念和技术上的差异,将各自独立的准则合成一组单一的、能被广泛使用的IT暗转准则,这一行动被称为通用准则(CC)项目。CC v2.1版于1999年被ISO采用为国际标准,2001年我国采用为国家标准。
目前,CC已经取代TCSEC称为评估信息产品安全性的主要标准。
安全级别可分为: D < C2 < C1 < B3 < B2 < B1 < A1
其中C2级的数据库管理系统支持自主存取控制(DAC),B1级的数据库管理系统支持强制存取控制(MAC)。
二、安全控制
计算机系统的安全模型:
数据库管理系统安全性控制模型:
1、用户身份鉴别
用户身份鉴别是数据库管理系统提供的最外层安全保护措施,每个用户在系统中都有一个用户标识(由用户名和用户标识号组成),用户标识号(UID)在系统的生命周期内是唯一的,并且系统内部记录这所有合法用户的标识,系统鉴别是指由系统提供一定的方式让用户标识自己的身份或名字。用户进入系统时由系统进行核对,通过鉴定后才提供使用数据库管理系统的权限。
用户身份鉴别的方法:
- 静态口令鉴别
目前常用的鉴别方法,相当于设置用户的密码。
优缺点:简单,容易被攻击,安全性较低。 - 动态口令鉴别
口令是动态变化的,登陆系统前就会获取新口令,相当于短信验证码或者动态令牌。
优缺点:增加口令被窃取或破解的难度,安全性相对高一些。 - 生物特征鉴别
采用图像处理和模式识别等技术,相当于指纹识别或者脸部识别。
优缺点:产生质的飞跃,安全性较高。 - 智能卡识别
智能卡是一种不可复制的硬件,内置集成电路的芯片,具有硬件加密功能。实际应用中一般采用个人身份识别码(PIN)和智能卡相结合的方式。
2、存取控制
数据库安全最重要的一点就是确保只授权给有资格的用户访问数据库的权限,同时令所有未授权的人员无法接近数据,这主要通过数据库系统存取控制机制实现。
存取控制机制主要包括定义用户权限,并将用户权限登记到数据字典中和合法权限检查。两者机制一起组成数据库管理系统的存取控制子系统。
3、自主存取控制方法
自主存取控制方法主要通过SQL的GRANT语句和REVOKE语句来实现。
用户权限是由数据库对象和操作类型组成的。定义一个用户的存取权限就是要定义这个用户在那些数据库对象上可以进行那些类型的操作,即定义存取权限(授权)。
在非关系系统中,用户只能对数据进行操作,存取控制的数据库对象也仅限于数据本身;在关系数据库系统中,存取控制的对象不仅有数据本身(基本表中的数据、属性列上的数据),还有数据库模式(数据库、基本表、视图和索引的创建等)。
关系数据库存取权限表
备注:在授予用户列INSERT权限时,一定要包含主码的INSERT权限,否则用户的插入动作会因为主码为空而被拒绝。
4、授权:授予与收回
SQL中使用GRANT(授予权限)和REVOKE(收回已授予的权限)语句向用户授予或收回对数据的操作权限。
GRANT
语句:GTANT <权限>[,<权限>]… ON<对象类型><对象名>[,<对象类型><对象名>]…TO<用户>[,<用户>]…[WITH GRANT OPTION];
例句:GRANT SELECT(权限) ON TABLE SC(表名) TO USER(用户名);
语义:将对指定操作对象的指定操作权限授予指定的用户。可以由数据库管理员、数据库对象创建者(属主owner),也可以是已经用于该权限的用户。接受权限的用户可以是一个或多个具体用户,也可以是全体用户(PUBLIC)。WITN GTANT OPTION就是获得某种权限的用户还可以将权限授予其他用户,如果没有就代表只能使用该权限,不能传播。
SQL标准允许具有WITH GRANT OPTION的用户把相应权限或其子集传递授予其他用户,但不允许循环授权,即被授权者不能把权限再授回给授权者或其祖先。
REVOKE
语句:REVOKE <权限>[,<权限>]…ON<对象类型><对象名>[,<对象类型><对象名>]…FROM<用户>[,<用户>…[CASCADE|RESTRICT];
例句:REVOKE SELECT(权限) ON TABLE SC(表名) FROM USER(用户名);
备注:使用该语句的为数据库管理员或其他授权者
这里默认为CASCADE,就是没有自动执行级联操作,只是收回了该用户的权限,该用户授予的其他用户的权限保留,如果使用RESTRICT就是收回该用户以及该用户授予权限的用户的权限。
总结: 用户可以“自主”地决定将数据的存取权限授予何人,决定是否也将“授权”的权限授予别人,这样的存取控制就是自主存取控制。
对创建数据库模式一类的数据库对象的授权由数据库管理员在创建用户时实现。
语句:CREATE USER [WITH][DBA|RESOURCE|CONNECT];
说明:权限与可执行的操作对照表
**备注:**CREATE USER语句不是SQL标准,不同的关系数据库管理系统的语法和内容是有差别的。
5、数据库角色
数据库角色是被命名的一组与数据库操作相关的权限,角色是权限的集合。可以为一组具有相同权限的用户创建一个角色,使用角色来管理数据库权限可以简化授权的过程。
- 角色的创建
CREATE ROLE <角色名>; - 给角色授权
GRANT <权限>[,<权限>]… ON <对象类型>对象名 TO<角色>[,<角色>]… - 将一个角色授予其他的角色或用户
- GRANT <角色1>[,<角色2>]…TO <角色3>[,<用户1>]…[WITH ADMIN OPRION];
指定了WITN ADMIN OPTION子句,则获得某种权限的角色或用户还可以把这种权限再授予其他的角色,角色3拥有角色1和角色2的所有权限。一个角色包含的权限包括直接授予这个角色的全部权限加上其他角色授予这个角色的全部权限。 - 角色权限的收回
REVOKE <权限>[,<权限>]… ON<对象类型><对象名>FROM <角色>[,<角色>]…
用户可以回收角色的权限,从而修改角色拥有的权限。
示例:
CREATE ROLE R1; 创建角色
GRANT SELECT ON TABLE SC; 授权
GTANT T1 TO USER; 授权用户
REVOKE R1 FROM USER; 回收权限
6、强制存取控制方法
自主存取控制(MAC)能够通过授权机制有效地控制对敏感数据的存取,但是由于用户对数据的存取权限是自主的,可以自由授权,这样会导致安全性降低,因此需要对系统控制下的所有主客体实施强制存取控制策略。
定义:系统为保护更高程度的安全性,按照TDI/TCSEC标准中的安全策略的要求所采取的强制存取检查手段。它不是用户能直接感知或进行控制的。强制存取控制适用于那些数据有严格而固定密级分类的部门(军事或政府等)。
在强制存取控制中,数据库管理系统所管理的全部实体被分为主体和客体两大类。
1. 主体是系统中的活动实体,既包含数据库管理系统所管理的实际用户,也包含代表用户的各进程。
2. 客体是系统中的被动实体,是受主体操纵的,包括文件、基本表、索引、视图等。
数据库管理系统为主体和客体每个实例(值)指派一个敏感标记(label)。label分为绝密(TS)>=机密(S)>=可信(C)>=公开(P)。主体的敏感度标记称为许可证级别,客体的敏感度标记称为密级。强制存取控制机制就是通过对比主体的敏感度标记和客体的敏感度标记,最终确定主体是否能够存取客体。
当某一用户(或某一主体)以标记label注册入系统时,系统要求他对任何客体的存取要遵循:
1)仅当主体的许可证级别大于或等于客体的密级时,该主才能读取相应的客体。
2)仅当主体的许可证级别小于或等于客体的密级时,该主体才能写相应的客体。
强制存取控制是对数据本身进行密级标记,无论数据如何复制,标记与数据是一个不可分的整体,只有符合密级标记要求的用户才可以操纵数据,从而提供了更高级别的安全性。较高安全性级别提供的安全保护要包含较低级别的所有保护,因此在实现强制存取控制时要首先实现自主存取控制(DAC),即自主存取控制与强制存取控制共同构成数据库管理系统的安全机制。
系统首先进行自主存取控制检查,对通过自主存取控制检查的允许存取的数据库对象再由系统自动进行强制存取控制检查,只有通过强制存取控制检查的数据库对象方可存取。