第四章 数据库安全性
目录
- 第四章 数据库安全性
- 4.1 概述
- 4.2 数据库安全性控制
- 1.用户身份识别
- 2.存取控制
- 3.自主存取控制方法
- 4.授权:授予与收回
- GRANT:授权语句
- REVOKE:收回权限
- 3.创建数据库模式的权限
- 4.数据库角色
- 5.角色权限的回收
- 6.强制存取控制方法MAC
- 4.3 视图机制
- 4.4 审计
- 4.5 数据加密
- 4.6 其他安全性保护
4.1 概述
数据库安全性是指保护数据库防止不合法使用所造成的数据泄漏、更改和破坏
数据库的不安全因素主要有以下几种:
- 非授权用户对数据库的恶意存取和破坏
- 数据库中重要或者敏感数据被泄漏
- 安全环境的脆弱性
4.2 数据库安全性控制
1.用户身份识别
用户身份识别是DBMS最外层的安全保护措施,每个用户在系统中都有一个唯一的标识,每次用户进入系统时,由系统进行核对,通过鉴定后才提供使用DBMS的权限。常用的用户身份鉴别方法有以下几种:
-
静态口令鉴别
最常见的鉴别方法,静态口令一般由用户自己设定,鉴别的时候输入正确指令则可以登入用户,这些口令是静态不变的。这种方法实现简单,但是安全性较低。在实际中,用户喜欢使用自己的生日、手机号,甚至直接是admin等简单密码作为口令,因此十分容易被破解,这种被称为弱口令攻击。另外的攻击被称为撞库,一旦黑客攻陷一个数据库,则会用从该数据库中获得的用户口令去测试其他数据库,一旦有用户在两个数据库中使用了相同的口令,就可能被破解。一般加强安全性的方法都是提高口令复杂度
-
动态口令鉴别
目前较为安全的鉴别方式,这种方式口令是动态的,每次鉴别时需要使用动态产生的新口令登陆数据库。常用的方法有短信验证码和动态令牌的方法。与静态口令相比,动态口令增加了窃取和破解的难度,安全性较高
-
生物特征鉴别
指纹、声纹、面部、瞳孔识别。安全级别较高。
-
智能卡识别
智能卡是一种不可复制的硬件,内置集成电路芯片,具有硬件加密功能。智能卡由用户随身携带,登陆DBMS需要将卡插入专用读卡器。但是智能卡中的数据是静态的,可能通过内存扫描和网络监听泄漏,因此一般都是智能卡和PIN码相结合使用。
2.存取控制
数据库安全最重要的一点是确保只授权给有资格的用户访问数据库的权限,同时令未授权的无法接触数据。
存取控制机制主要包括定义用户权限和合法性权限检查两部分:
-
定义用户权限,并且将用户权限登记到数据字典中
将用户拥有何种权限通过定义后存储在数据字典中,被称为安全规则或者授权规则。
-
合法权限检查
每当用户发出存取数据库的操作请求后,DBMS查找数据字典,进行合法权限检查,如果用户操作超出了定义的权限,则拒绝执行。
定义用户权限和合法权限检查机制一起组成了DBMS系统的存取控制子系统C2级的DBMS支持自主存取控制(DAC),用户对于不同数据库对象由不同的存取权限,而且用户还可以将拥有存取权限转授给其他用户,因此自主存取非常灵活。
B1级的DBMS支持强制存取控制(MAC),每一个数据库对象被标定一定的密级,每一个用户被授予一定的访问级别许可证,只有具有合法许可证的用户才可以存取,强制存取控制比较严格
3.自主存取控制方法
用户权限由两要素组成:数据库对象和操作类型。定义一个用户的存取权限就是定义这个用户可以在哪些数据库对象上进行什么类型操作。定义存取权限由称为授权。这主要通过SQL的GRANT语句和REVOKE语句实现
在关系数据库中,存取控制对象不只有数据本身,还有数据库模式(包括数据库、基本表、视图和索引的创建等)。下面列出主要的存取权限
4.授权:授予与收回
GRANT:授权语句
GRANT一般格式为:
GRANT <权限>[,<权限>]…
ON <对象类型><对象名》[,<对象类型><对象名>]…
TO <用户>[,<用户>]…
[WITH GRANT OPTION]
语意为:将指定操作对象的指定操作权限授予给指定用户。如果指定了WITH GRANT OPTION语句,则获得某种权限的用户可以讲权限再授予其他用户,没有的话被授予者只能使用,不能传播权限。同时,SQL不允许循环授权(也就是A授权给B,B授权给C,C授权给A)
REVOKE:收回权限
授予用户权限可以由数据库管理员或者其授权者使用REVOKE收回,REVOKE语句一般格式是:
REVOKE <权限>[,<权限>]…
ON <对象类型><对象名>[,<对象类型><对象名>]…
FROM <用户>[,<用户>]…[CASCADE|RESTRICT];
CASCADE级联会将该用户的权限以及它授予其他用户的权限一并收回;RESTRICT限制如果发现用户还将权限授予了其他用户,则会拒绝执行
因为用户可以自主地觉定将数据存储的权限授予何人,决定他人有无授权的权力,因此这样的存取控制又称自主存取控制
3.创建数据库模式的权限
上述是向用户授予或者回收对数据的操作权限。对创建数据库模式一类的数据库对象的授权则由数据库管理员在创建用户时实现。
创建用户语句格式如下:
CREATE USER <username> [WITH] [DBA|RESOURCE|CONNECT]
- 只有系统的超级用户才有权创建一个新的数据库用户
- 新创建的数据库用户有三种权限
- 默认权限为CONNECT。该权限的用户只能登陆数据库,并且使用由DBA或者其他用户授予的存取权限。他不能新建用户、创建模式、创建基本表。
- 拥有RESOURCE权限的用户能够创建基本表和视图,称为所创建对象的属主(OWNER),但是不能创建模式、创建用户。数据库对象的属主可以通过GRANT语句将该对象的权限授予他人。
- 拥有DBA权限的用户时超级用户,可以创建用户、创建模式、创建基本表和视图;DBA拥有所有数据库对象的存取权限,也可以将权限授予一般用户
4.数据库角色
数据库角色是被命名的一组与数据库操作相关的权限,角色是权限的集合。
创建角色:
CREATE ROLE <ROLE NAME>
给角色授权:
GRANT <权限>[,<权限>]...
ON <对象类型>对象名
TO <角色>[,<角色>]...
将一个角色授予其他的角色和用户
GRANT <ROLE1>[,<ROLE2>]...
TO <ROLE3>[,<用户1>]...
[WITH ADMIN OPTION]
5.角色权限的回收
REVOKE <权限>[,<权限>]
TO <对象类型><对象名>
FROM <角色>[,<角色>]
6.强制存取控制方法MAC
自主存取控制由于用户对数据存储的权限也是可以授予的,因此仍可能存在数据的无意泄露。比如甲授权乙操作A表,但是乙却复制了A表的副本,使得A表内容发生了泄露,此时就需要强制存取控制方法
所谓强制存取控制是指系统为保证更高的安全性,采取强制存取检查手段。它不是用户能够直接感知或进行控制的。该策略适用于那些对数据由严格而且固定密级分类的部门,比如说军事部门或者政府部门。
在该系统中,DBMS所管理的全部实体被分为了主体和客体两大类。主体是系统中活动的实体,包括实际用户以及代表各个用户的各个进程。客体是被动实体,是受主体操纵的,包括文件、基本表、索引、视图等等。对于实体和客体,DBMS都会为他们每一个实例直拍一个敏感度标记
敏感度标记被分为若干级别,分为绝密(TS),机密(S),可信(C),公开(P)。主体的敏感度标记称为许可证级别,客体的称为密级。其要求如下:
- 只有主体许可级别>=客体密级的时候,主体才能读取相应客体
- 只有主体许可级别<=客体密级的时候,主体才能写相应客体
如果没有第二条限制,可能把数据的密级从高流向低,造成数据泄露。比如某个TS密级的主体将一个TS的数据恶意降低到了P,然后写回,则会导致数据泄露。强制存取控制是对数据本身进行密级标记,两者是不可分割的,因此哪怕是数据被复制了,密级也会跟随着被复制,即时有了数据,没有足够的密级也无法访问。
4.3 视图机制
可以为不同用户定义不同的视图,将数据对象限制在一定范围内。就是说,通过视图机制把保密的数据对某些用户隐藏起来。这些用户的视图中并不包含他们无权查看的数据。这是视图的主要功能之一。
4.4 审计
审计功能是达到C2以上安全级别必不可少的一项指标。审计功能将用户对数据库的所有操作自动记录下来并且放入到审计日志中。审计员可以利用审计日志监控数据库中的各种行为,重现导致数据库现状的一系列事件,并且找出非法存取数据的人、时间和内容。审计通常十分耗费时间和空间,所以DBMS往往可以灵活打开或者关闭审计功能。审计功能主要用户对安全性要求较高的部门。
审计事件
一般包含服务器事件、系统权限、语句事件、模式对象事件等等
审计功能
- 基本功能,提供多种审计察隅方式:基本的、可选的、有限的
- 提供多套升级规则
- 提供审计分析和报表功能
- 审计日志管理功能,包括防止误删除等等
使用SQL语句AUDIT和NOT AUDIT来开关审计,比如,对Student表的UPDATE和ALTER打开审计功能
AUDIT ALTER, UPDATE
ON Studnet
4.5 数据加密
加密的基本思想是根据一定的原始算法,将一定的原始数据——明文变成不可直接识别的格式——密文。数据加密主要包括存储加密和传输加密
存储加密
对于存储加密一般提供透明和非透明两种存储加密方式。透明存储加密是内核级加密保护方式,对用户完全透明;非透明存储加密则是通过多个加密函数实现的。透明存储加密是数据在写到磁盘时对数据进行加密,用户读取数据时再对其进行解密。
传输加密
4.6 其他安全性保护
为了满足较高的安全等级的DBMS,在自主存取技术和强制存取控制之外,还有推理控制以及数据库应用中隐秘信道和数据隐私保护技术
推理控制处理的是强制存取控制未解决的问题。例如,利用列的函数依赖关系,用户能够从低安全等级信息推导出无权访问的高安全等级信息,进而导致信息泄露。数据库推理控制机制用来避免用户利用其可访问的数据反推出更高密级的数据。
隐秘信道处理的内容是利用未被强制存取控制 的SQL执行后反馈的信息进行间接信息传递。