数据库安全性
好了,我们都知道,数据库的一大特点是数据可以共享,那么问题就来了,数据共享必定带来数据库的安全性问题,什么安全性问题呢?比如说某些数据是某些用户不该获取的,所以说数据库系统中的数据共享不能是无条件的共享。而数据库安全性就是指保护数据库以防止不合法使用所造成的数据泄露、更改或者破坏。
根据前面的序言,现在我大概讲讲接下来的内容的大纲吧,其分:
4.1 数据库安全性概述
4.2 数据库安全性控制
4.3 视图机制
4.4 审计(Audit)
4.5 数据加密
4.6 统计数据库安全性
好了,有了大纲之后,我们一个一个的去谈。首先来数据库的安全性概述,我们都知道有安全性问题,那么数据库的不安全因素又是什么呢?
1) 计算机系统安全性
- 为计算机系统建立和采取的各种安全保护措施,以保护计算机系统中的硬件、软件及数据,防止其因偶然或恶意的原因使系统遭到破坏,数据遭到更改或泄露等。
2)对数据库安全性产生威胁的因素
- 非授权用户对数据库的恶意存取和破坏
- 数据库中重要或敏感的数据被泄露
- 安全环境的脆弱性
同时,我们知道现在公司都有个规定,这个规定都是按照一定的标准去得到的,同样,我们数据库安全性也有一套方法,其是按照一定的标准的去得到,分TCSEC标准和CC标准。
其中TCSEC/TDI标准的基本内容:
- TCSEC/TDI,从四个方面来描述安全性级别划分的指标
- 安全策略
- 责任
- 保证
- 文档
根据上述的几个指标可分安全性级别如下所示:
v 而 CC
- 其是提出国际公认的表述信息技术安全性的结构
- 把信息产品的安全要求分为:
- 安全功能要求
- 安全保证要求
v CC文本组成
- 简介和一般模型
- 安全功能要求
- 安全保证要求
说完了数据库安全性的概述之后,现在我们了解数据库安全性的控制,简单点就是用什么方法来达到数据库安全。在了解方法之前,首先我们了解非法使用数据库的情况:
- 编写合法程序绕过DBMS及其授权机制
- 直接或编写应用程序执行非授权操作
- 通过多次合法查询数据库从中推导出一些保密数据
好了,在了解了一些非法使用数据库的情况之后,下面我们用一个图来引出常用方法
-
引出数据库安全性控制的常用方法为如下:
- 用户标识和鉴定
- 存取控制
- 视图
- 审计
- 密码存储
接下来,我们对这些方法进行一一解释。
首先来用户识别和鉴定。
其是系统提供的最外层安全保护措施。每个用户在系统中都有一个用户标识。每个用户标识由用户名和用户标识号(口令或者说密码或UID)两部分组成,用户标识号在系统的整个生命周期内是唯一的。系统内部记录着所有合法用户的标识,系统鉴别是指由系统提供一定的方式让用户标识自己的名字或身份。每次用户要求进入系统时,由系统进行核对,通过鉴定后才提供使用数据库管理系统的权限。而对于用户身份的鉴定方法有很多种,而在一个系统中往往多多种方法的结合,从而获得更强的安全性。具体方法如下:
静态口令鉴别(生日号等,登录的qq密码等)
动态口令鉴别(手机验证码登录,扫二维码登录等)
生物特征鉴别(指纹等)
智能卡鉴别(实际应用中常采用个人身份识别码和智能卡相结合的方式)
然后说说存取控制
存取控制机制组成分定用户权限和合法权限检查两种,而用户权限定义和合法权检查机制一起组成了 DBMS的存取控制子系统。根据机制的组成可得一些存储控制方法,常用的存储控制方法如下:
接下来就对这两个方式进行解释,首先看看自主存取控制方法,其是:
嘿,上面说到一个用户权限的组成的一个因素是数据对象,那么数据对象又有什么呢?
同时,我们上面也提到自主控制方法是通过GRANT语句和REVOKE语句去实现的,那么具体语句的语法又是怎样的呢?具体看下文:
注意:语法格式中有一条子句为WITH GRANT OPTION子句。
下面,我们看看几个例子从而加深对GRANT语句应用的理解:
现在就对例1到例7的语句之后,学生-课程数据库中的用户权限定义表:
说完GRANT语句,现在说说REVOKE语句,我们授予的权限可以由DBA或其他授权者用REVOKE语句收回。
直接利用例子来加深对该语句的理解把:
执行[例8]到[例10]的语句后,学生-课程数据库中的用户权限定义表
最后小结一下SQL灵活的授权机制:
好了,上面说的GRANT和REVOKE语句向用户授予或收回对数据的操作权限。对创建数据库一类的数据库对象的授权则由数据库管理员在创建用户时实现。其语法格式为:
注意:CREATE USER语句不是SQL标准,因此不同的关系数据库管理系统的语法和内容相差甚远。这里介绍该语句的目的是说明对于数据库模式这一类数据对象也有安全控制的需要,也是要授权的。
好了,接下来我们引进一个全新的概念,为数据库角色,其是被命名的一组与数据库操作相关的权限,也就是说角色是权限的集合,可以为一组具有相同权限的用户创建一个角色,从而简化授权的过程。其使用过程直接看图:
用例子来加深理解:
好了,说完自主存取控制方法,怎么去实现这个方法,授权还可以给数据库模式授权,以及引入一个权限的集合数据库角色。现在我们就进行第二个方法的讲解,为强制存取控制方法。
前面说的自主存取控制其实是有缺点的,什么缺点呢?其可能存在数据的“无意泄露”,原因是:这种机制仅仅通过对数据的存取权限来进行安全控制,而数据本身并无安全性标记。为了解决这个问题,我们的解决方案就是对系统控制下的所有主客体实施强制存取控制策略(敏感度标记)。
那么强制存取控制又是怎样的呢?其能保证更高程度的安全性,用户不能直接感知或进行控制,适用于对数据有严格而固定密级分类的部门
- 军事部门
- 政府部门
要想使用强制存取控制策略,你需要面对的对象是主体,客体,敏感度标记(主——许可证级别,客——密级)
然后在使用这个方法之后,有两个规则,分别为强制存取控制的规则和修正规则,具体看下:
然后这两个规则有个共同点,禁止了拥有高许可证级别的主体更新低密级的数
据对象。
注意:
强制存取控制是对数据本身进行密级标记,无论数据如何复制,标记与数据实不可分的整体,只有符合密级标记要求的用户才可以操纵数据,从而提供了更高级别的安全性。
最后总结说一下DBMS的安全机制,其是由DAC(自主存取控制)和MAC(强制存取控制)共同构成的,实现MAC时要首先实现DAC,因为较高安全性级别的安全保护要包含低级别的所有保护。
好了,说完数据库安全性控制,现在讲讲视图机制,视图机制其实就是把要保密的数据对无权存取这些数据的用户隐藏起来,对数据提供一定程度的安全保护。
看下例子:
好了,说完视图机制,现在我们谈谈审计。审计的功能把用户对数据库的所有操作自动记录下来放在审计日志( 将用户对数据库的所有操作记录在上面)中。审计员可以利用审计日志监控数据库中的各种行为,重现导致数据库现有状况的一系列事件,找出非法存取数据的人,时间和内容等。该功能就是数据库管理系统达到C2以上安全级别必不可少的一项指标,也就是说C2以上安全级别的DBMS必须具有该功能。
实现审计功能,通过以下的两条语句:
例子:
说了,说完审计,后面说说数据加密,数据加密是防止数据库中数据在存储和传输中失密的有效手段,而明文变换成不可直接识别的格式,这个格式叫做密文,加密的基本思想是根据一定的算法讲原始数据(原文)变换成不可直接识别的格式——密文,从而使得不知道解密算法的人无法获知数据的内容。数据加密主要包括存储加密和传输加密。
那么我们了解一下这两种存储方法。
存储加密
其一般提供透明和费透明两种存储加密方式。透明存储加密是内核级加密保护方式,对用户完全透明,非透明存储加密则是通过多个加密函数来实现的。
透明存储加密是数据在写到磁盘时对数据进行加密,授权用户读取数据时再对其进行解密。由于数据加密对用户透明,数据库的应用程序不需要做任何修改,只需在创建表语句中说明需加密的字段即可。当对加密数据进行增删改查操作时,数据库管理系统将自动对数据进行加,解密工作。基于数据库内核的数据存储加密,解密方法性能较好,安全完备性较高。
传输加密
在客户/服务器结构中,数据库用户与服务器之间若采用明文方式传输数据,容易被网络恶意用户截获或篡改,存在安全隐患。因此,为了保证二者之间的安全数据交换,数据库管理系统提供了传输加密功能。而常用的传输加密方式有链路加密(报头,报文均加密)和端到端加密(只加密报文)。其中链路加密对传输数据在链路层进行加密,它的传输信息由报头和报文两部分组成,前者是路由选择信息,而后者是传送的数据信息。这种方式对报文和报头均加密。相对地,端对端加密对传输数据在发送端加密,接受端解密。它只加密报文,不加密报头,与链路加密相比,它只在发送端和接收端需要密码设备,而中间节点不需要密码设备,因此它所需密码设备数量相对较少,但这种方式不加密报头,容易被非法监听者发现并从中获取敏感信息。
好了,说了那么多现在我们看看,一种基于基于安全套接层协议的数据库管理系统可信传输方案(端到端的传输加密方式)。
注意:密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数。密钥分为对称密钥与非对称密钥。
最后聊聊统计数据库的安全性,看关键词,统计数据库。那什么是统计数据库?
那么为了实现这个功能,统计数据库就会面临一些特殊的安全性问题:
为了避免这些问题,会有相应的规则限制,从而达到统计数据库安全:
最后达到数据库安全机制的设计目标:
试图破坏安全的人所花费的代价 >> 得到的利益