在一般的计算机系统中,安全措施是一级一级层层设置的。

在数据库中,安全措施主要包括用户身份鉴别、多层存取控制、审计、视图和数据加密等安全技术。

用户身份鉴别

用户鉴别是数据库管理系统提供的最外层安全保护措施。每个用户在系统中都有一个用户标识,由用户名(User Name)和用户标识符(Uid)两部分组成,而UID在整个系统的生命周期中都是唯一的。

用户鉴别方法有很多种,而且在一个系统中往往是多种方法的结合,以获得更强的安全性。常用的用户身份鉴别方法有以下几种。

静态口令鉴别

这种方法是当前常用的鉴别方法。静态口令通常由用户自己设置,鉴别时需要输入正确的口令,例如,电脑的登录密码、QQ和Wechat的账号密码都是静态口令。

数据库管理系统从口令的复杂度,口令的管理、存储以及传输等多方面来保障口令的安全可靠。例如,要求口令长度至少8位,要求字母、数字和特殊字符混合组成,其中特殊字符指除空白符、英文字母、单引号和数字外的所有可见字符。

动态口令鉴别

这种方法是目前较为安全的鉴别方法,它的口令是动态变化的,每次鉴别时均需要使用动态生成的新口令登录数据库管理系统,也即采用一次一密的方法。常用的方式比如短信验证码、邮箱验证码等,它的安全性相比静态口令要高一些。

生物特征鉴别

生物特征是指生物体唯一具有的、可以测量、识别和验证的稳定的生物特征,比如指纹、掌纹、虹膜等,这种方式通常采用图形处理和模式识别等人工智能技术实现基于生物特征的认证,相较于口令鉴别,实现了质的飞跃。

智能卡鉴别

智能卡是一种不可复制的硬件,内置集成电路芯片,具有硬件和加密功能,通常由用户随身携带,登录数据库管理系统时将智能卡插入专用读卡器内进行身份验证。由于智能卡读取到的数据是静态的,通过内存扫描或网络监听等技术还是可能截取到用户的身份验证信息,存在安全隐患,而且智能卡同样存在丢失或被窃取的风险。在实际生活中,居民身份证、银行卡都属于此类别。

存取控制

数据库安全中最重要的一点就是确保只给授权的用户访问数据库的权限,而所有未被授权的人员都无法接近数据,这主要通过数据库系统的存取控制机制实现。

存取控制机制主要包括定义用户权限和合法权限两部分。

  • 定义用户权限,并将用户权限登记到数据字典中

  • 查找数据字典,根据安全规则进行合法权限检查

定义用户权限和合法权限检查机制一起组成了数据库管理系统的存取控制子系统。

C2级的数据库管理系统支持自主存取控制(DAC),B1级的数据库管理系统支持强制存取控制(MAC)。

在自主存取控制方法中,用户对于不同的数据库对象有不同的存取权限,不同的用户对同一对象也有不同的权限,而且用户还可以将其拥有的存取权限转授给其他用户。因此,自主存取控制非常灵活

在强制存取控制方法中,每一个数据库对象被标以一定的密级,每一个用户也被授予了某一个级别的许可证。对于任意一个对象,只有具有合法许可证的用户才可以存取。因此,强制存取控制比较严格。

MAC建立在DAC基础上

自主存取控制方法

用户权限通常由数据库对象和操作类型两个要素组成,在数据库系统中,定义存取权限。存取控制的对象不仅有数据本身(基本表中的数据、属性列上的数据),还有数据库模式(包括模式、基本表、视图和索引的创建等)

授权:授予与收回

在SQL中使用GRANT和REVOKE语句向用户授予或收回对数据的操作权限。GRANT语句向用户授予权限,REVOKE语句收回已经赋予用户的权限。

GRANT的一般格式如下:

GRANT <权限> [,<权限>]...
ON <对象类型> <对象名称>[,<对象类型> <对象名称>]...
TO <用户>[,<用户>]
[WITH GRANT OPTION];

发出GRANT语句的可以是数据库管理员,也可以是该数据库对象创建者(即属主owner),还可以是已经拥有该权限的用户。

接收权限的用户可以是一个或多个具体用户,也可以是PUBLIC,即全体用户。

如果指定了WITH GRANT OPTION,则被授予权限的用户还可以将其授予给其他用户,若无,则不能传播该权限。

REVOKE的一般格式如下:

REVOKE <权限>[,<权限>]...
ON <对象类型> <对象名称>[,<对象类型> <对象名称>]...
FROM <用户>[,<用户>]...
[CASCADE | RESTRICT];

其基本使用方法同GRANT类似,不同之处在于,当指定CASCAED,也即级联删除时,系统会把所有直接或间接从被收回授权的用户的获取到权限的用户也一并回收,若指定RESTRICT,则只回收指定用户的权限。

数据库角色

数据库角色是被命名的一组与数据库操作相关的权限,角色是权限的集合,使用角色来管理数据库系统可以简化授权的过程。

创建角色的语句如下:

CREATE ROLE <角色名称>

同样可以使用GRANT语句为角色授权:

GRANT <权限>[,<权限>]...
ON <对象类型> 对象名称
TO <角色>[,<角色>]...

而由于角色是权限的集合,同样可以使用GRANT语句将角色赋予给其他角色或用户:

GRANT <角色1>[<角色2>]...
TO <角色3>[,<用户1>]...
[WITH ADMIN OPTION];

也同样可以使用REVOKE语句收回角色的权限:

REVOKE  <权限>[,<权限>]...
ON <对象类型> <对象名称>
FROM <角色>[,<角色>]

强制存取控制方法

对于自主控制权限,由于用户对数据的存取权限是自主的,用户可以自由的将数据的存取权限授予给他人,以及决定是否授予传播权限,故这种方式可能存在数据的"无意泄露"。这种机制仅仅通过对数据的存取权限来进行安全控制,而数据本身没有安全标记。

所以,解决上述问题的策略就是对系统控制下的所有主客体实施强制的存取控制权限,强制存取控制通常有更高的安全性,它不能被用户直接感知或进行控制,所以这种方式适用于那些对数据有严格而固定密级分级的部门,例如军事部门或政府部门。

在强制存取控制中,数据库管理系统所管理的全部实体被分为主体和客体两大类。

  • 主体是系统中的活动实体,既包括数据库管理系统所管理的实际用户,也包括代表用户的各项进程。

  • 客体是系统中的被动实体,是受主体操纵的,包括文件、基本表、索引、试图等。

对于数据库系统中的所有主体和客体,数据库管理系统都为它们指派了一个敏感度标记

敏感度标记分为以下四个密级:

  • 绝密(Top Secret)

  • 机密(Secret)

  • 可信(Confidential)

  • 公开(Public)

各密级的次序如下:

TS >= S >= C >= P

主体的敏感度标记称为许可证级别

客体的敏感度标记称为密级

对于强制存取控制方法,数据库管理系统遵循以下两个规则:

  • 仅当主体的许可证级别 >= 客体的密级时,主体才能读取相应的客体。

  • 仅当主体的许可证级别 = 客体的密级时,主体才能写相应的客体。

禁止拥有高密级许可证的主体更新低密级的数据对象。

前面已经提过,较高安全性级别提供的安全保护要包含较低级别的所有保护,因此,在实现强制存取控制时首先要实现自主存取控制,即自主存取控制与强制存取控制共同构成数据库管理系统的安全机制。

视图机制

视图机制间接实现了存取谓词的用户权限定义,也即,通过视图机制把要保密的数据对无权存取的用户隐藏起来,从而自动对数据提供一定程度的安全保护。

eg. 建立计算机系学生的视图,把对该视图的SELECT的权限授予给王平,将在改图上的所有操作权限授予给张明。

CREATE VIEW CS_Student 
AS
SELECT *
FROM Student
WHERE Sdept='CS';

GRANT SELECT
ON CS_Student 
TO 王平;

GRANT ALL PRIVILEGES
ON CS_Student
TO 张明;

审计

审计(audit)功能是数据库管理系统达到C2以上安全级别必不可少的一项指标。

它将用户对数据库的所有操作自动记录下来放入审计日志中,审计员利用审计日志监控数据库中的各种行为,重现导致数据库现有状况的一系列事件,找出非法存取数据的人、时间和内容等。

审计通常需要耗费大量的时间和空间,故在数据库管理系统中常常被设置为可选特征,它主要用于安全性要求较高的部门。

eg. 对修改SC表结构或修改SC表数据的操作进行审计

AUDIT ALTER UPDATE
ON SC;

eg. 取消对SC表的一切审计

NOAUDIT ALTER,UPDATE
ON SC;

数据库安全审计系统提供了一种事后检查的安全机制。

数据加密

加密的基本思想是根据一定的算法将原始数据——明文变换为不可直接识别的格式——密文,从而使不知道解密算法的人无法获知数据的内容。

数据的加密主要包括存储加密和传输加密。

存储加密

对于存储加密,一般提供透明和非透明两种存储加密方式。

透明存储加密是内核级加密保护方式,对用户完全透明。

非透明存储加密则是通过多个加密函数实现的。

传输加密

常用的传输加密方式如链路加密和端到端加密。

链路加密对传输数据在链路层进行加密,它的传输信息由报头和报文两部分组成,前者是路由选中信息,后者是传送的数据信息,这种方式对报文和报头均加密。

端到端加密对传输数据在发送端加密,接收端解密,它只加密密文,不加密报头,只需要在发送端和接收端设置密码设备,但它相对来说,更容易被非法监听者发现并从中获取敏感信息。

其他安全性保护

推理控制:处理的是强制存取控制未解决的问题。例如,利用列的函数依赖关系,用户能从低安全等级信息推导出其无权访问的高安全性等级信息,进而导致信息泄露。

数据库推理控制机制可以用来避免用户利用其能够访问的数据推知更高密级的数据,常用的方法如基于函数依赖的推理控制和基于敏感关联的推理控制等。

隐蔽信道:处理内容也是强制存取控制未解决的问题

菜菜,捞捞~