数据库安全性

1、数据库安全性概述

(1.1)数据库的不安全因素

(1)非授权用户对数据库的恶意存取和破坏

① 一些黑客(Hacker)和犯罪分子在用户存取数据库时猎取用户名和用户口令,然后假冒合法用户偷取、修改甚至破坏用户数据。

② 数据库管理系统提供的安全措施主要包括用户身份鉴别、存取控制和视图等技术。

(2)数据库中重要或敏感的数据被泄露

① 黑客和敌对分子千方百计盗窃数据库中的重要数据, 一些机密信息被暴露。

② 数据库管理系统提供的主要技术有强制存取控制、数据加密存储和加密传输等。

③ 审计日志分析。

(3)安全环境的脆弱性

① 数据库的安全性与计算机系统的安全性紧密联系。

        计算机硬件、操作系统、网络系统等的安全性。

② 建立一套可信(Trusted)计算机系统的概念和标准。

(1.2)安全标准简介

(1)TCSEC 标准

TCSEC/TDI 标准的基本内容,从四个方面来描述安全性级别划分的指标:安全策略、责任、保证、文档。

TCSEC/TDI 安全级别划分:


mysql 数据库安全性 数据库的安全性_存取控制

TCSEC/TDI 安全级别划分

D级:将一切不符合更高标准的系统均归于 D 组。

典型例子:DOS 是安全标准为 D 的操作系统。因为 DOS 在安全性方面几乎没有什么专门的机制来保障。

C1级:非常初级的自主安全保护。能够实现对用户和数据的分离,进行自主存取控制( DAC),保护或限制用户权限的传播。

例如:现有的商业系统稍作改进即可满足。 

C2级:是安全产品的最低档次。提供受控的存取保护,将 C1 级的 DAC 进一步细化,以个人身份注册负责,并实施审计和资源隔离。达到 C2 级的产品在其名称中往往不突出 “安全” 这一特色。

典型例子:Windows 2000、Oracle 11g。

B1级:标记安全保护。“安全” 或 “可信的” 产品。对系统的数据加以标记,对标记的主体和客体实施强制存取控制(MAC)、审计等安全机制。

典型例子:

        操作系统:

                惠普公司的 HP-UX BLS release 9.09+;

        数据库:

                Oracle 公司的 Trusted Oracle;

                Sybase 公司的 Secure SQL Server version 11.0.6。

B2级:结构化保护。建立形式化的安全策略模型并对系统内的所有主体和客体实施 DAC 和 MAC。

B3级:安全域。该级的 TCB 必须满足访问监控器的要求,审计跟踪能力更强,并提供系统恢复过程。

A1级:验证设计,即提供 B3 级保护的同时给出系统的形式化设计说明和验证以确信各安全保护真正实现。

(2)CC 标准

CC 提出了国际公认的表述信息技术安全性的结构。把信息产品的安全要求分为:安全功能要求、安全保证要求。

CC 评估保证级(EAL)划分:


mysql 数据库安全性 数据库的安全性_数据_02

CC 评估保证级(EAL)的划分

2、数据库安全性控制

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

mysql 数据库安全性 数据库的安全性_数据_03

计算机系统的安全模型

(1)系统根据用户标识鉴定用户身份,合法用户才准许进入计算机系统;

(2)数据库管理系统进行存取控制,只允许用户执行合法操作;

(3)操作系统有自己的保护措施;

(4)数据以密码形式存储到数据库中。

        数据库安全性控制的常用方法:用户身份鉴别、存取控制、视图、审计、数据加密。

(2.1)用户身份鉴别

        用户身份鉴别:系统提供的最外层安全保护措施。用户标识:由用户名和用户标识号组成 (用户标识号在系统整个生命周期内唯一)

        用户身份鉴别的方法:

(1)静态口令鉴别:

        静态口令一般由用户自己设定,这些口令是静态不变的。

(2)动态口令鉴别:

        口令是动态变化的,每次鉴别时均需使用动态产生的新口令登录数据库管理系统,即采用一次一密的方法。

(3)智能卡鉴别:

        智能卡是一种不可复制的硬件,内置集成电路的芯片,具有硬件加密功能。

(4)生物特征鉴别:

        通过生物特征进行认证的技术,生物特征如指纹、虹膜和掌纹等。

(2.2)存取控制

        存取控制机制组成:

(1)定义用户权限,并将用户权限登记到数据字典中:

        ① 用户对某一数据对象的操作权力称为权限;

        ② DBMS 提供适当的语言来定义用户权限,存放在数据字典中,称做安全规则或授权规则。

(2)合法权限检查:

        ① 用户发出存取数据库操作请求 ;

        ② DBMS 查找数据字典,进行合法权限检查 用户权限定义和合法权检查机制一起组成了 DBMS的存取控制子系

(2.3)自主存取控制

(Discretionary Access Control , 简称 DAC):

① 用户对不同的数据对象有不同的存取权限;

② 不同的用户对同一对象也有不同的权限;

③ 用户还可将其拥有的存取权限转授给其他用户。

SQL 的 GRANT 语句和 REVOKE

关系数据库系统中的存取权限

对象类型

对象

操作类型

数据库模式

模式

CREATE SCHEMA

基本表

CREATE TABLE,ALTER TABLE

视图

CREATE VIVE

索引

CREATE INDEX

数据

基本表和视图

SELECT,INSERT,UPDATE,DELETE,

REFERENCES,ALL PRIVILEGES

属性列

SELECT,INSERT,UPDATE,REFERENCES,ALL PRIVILEGES

(2.4)授权:授权与回收

(2.4.1)权限授予:GRANT

GRANT 语句的一般格式:

GRANT <权限> [ , <权限> ] ...

ON <对象类型> <对象名> [ , <对象类型> <对象名> ] ...

TO <用户> [ , <用户> ] ...

[ WITH GRANT OPTION ] ;

语义为:

        将对指定操作对象的指定操作权限授予指定的用户。

注意:

        如果指定了 WITH GRANT OPTION 子句,则获得某种权限的用户还可以把这种权限再授予其他的用户。如果没有指定 WITH GRANT OPTION 子句,则获得某种权限的用只能使用该权限,不能传播该权限。

GRANT 语句的可是数据库管理员,也可以是该数据库对象创建者(即属主owner),还可以是已经拥有该权的用户。接受权限的用户可以是一个或多个具体用户,也可以是 PUBLIC,即全体用户。

        SQL 标准允许具有 WITH GRANT OPTION 的用户把相应权限或其子集传递授予其他用户,但不允许循环授权,即被授权者不能把权限再授回给授权者或其祖先,如下图所示:


mysql 数据库安全性 数据库的安全性_数据库原理_04

不允许循环授权

【例1】把查询 Student 表权限授给用户 U1。

(将一种权限授予一个用户)

GRANT SELECT

ON TABLE Student

TO U1;

【例2】把对 Student 表和 Course 表的全部权限授予用户 U2 和 U3。

(一次向多个用户传播多种同类对象的权限)

GRANT ALL PRIVILEGES

ON TABLE Student, Course

TO U2, U3;

【例3】把对表 SC 的查询权限授予所有用户。

GRANT SELECT

ON TABLE SC

TO PUBLIC;

【例4】把查询 Student 表和修改学生学号的权限授给用户 U4。

(一次完成了对基本表和属性列这些不同对象的授权)

GRANT UPDATE(Sno), SELECT

ON TABLE Student

TO U4;

注意:对属性列的授权时必须明确指出相应属性列名。

【例5】把对表 SC 的 INSERT 权限授予 U5 用户, 并允许他再将此权限授予其他用户。

GRANT INSERT

ON TABLE SC

TO U5

WITH GRANT OPTION;

(2.4.2)权限回收:REVOKE

REVOKE 语句收回。一般格式为:

REVOKE <权限> [ , <权限> ] ...

ON <对象类型> <对象名> [ , <对象类型> <对象名> ] ...

FROM <用户> [ , <用户> ] ... [ CASCADE | RESTRICT ] ;

注意:

        ① 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 ;

(2.4.3)创建数据库模式的权限

  GRANT 和 REVOKE

 CREATE USER

CREATE USER <username> [WITH] [ DBA | RESOURCE | CONNECT ];

CREATE USER 语句说明如下:

(1)只有系统的超级用户才有权创建一个新的数据库用户。

(2)新创建的数据库用户有三种权限:CONNECT、RESOURCE 和 DBA。 

(3)CREATE USER 命令中如果没有指定创建的新用户的权限,默认该用户拥有 CONNECT 权限。

        ① 拥有 CONNECT 权限的用户不能创建新用户,不能创建模式,也不能创建基本表,只能登录数据库。由数据库管理员或其他用户授予他应有的权限,根据获得的授权情况他可以对数据库对象进行权限范围内的操作。

        ② 拥有 RESOURCE 权限的用户能创建基本表和视图,成为所创建对象的属主,但不能创建模式,不能创建新的用户。数据库对象的属主可以使用 GRANT 语句把该对象上的存取权限授予其他用户。

        ③ 拥有 DBA 权限的用户是系统中的超级用户,可以创建新的用户、创建模式、创建基本表和视图等;DBA拥有对所有数据库对象的存取权限,还可以把这些权限授予一般用户。

        如下表所示:

权限与可执行的操作对照表拥有的权限可否执行的操作CREATE USERCREATE SCHEMACREATE TABLE

登录数据库,

执行数据查询和操纵

DBA可以可以可以可以RESOURCE不可以不可以可以可以CONNECT不可以不可以不可以可以,但是需要权限

(2.5)数据库角色

        数据库角色:被命名的一组与数据库操作相关的权限,角色是权限的集合。因此可以为一组具有相同权限的用户创建一个角色来简化授权的过程。

SQL 中首先用 CREATE ROLE 语句创建角色,然后用 GRANT 语句给角色授权,用REVOKE

(2.5.1)角色的创建

CREATE ROLE <角色名>

新创建的角色是空的,没有任何内容。

(2.5.2)给角色授权

GRANT <权限> [ , <权限> ] ...

ON <对象类型> 对象名 

TO <角色> [ , <角色> ] ...

(2.5.3)将一个角色授予其他角色或者用户

GRANT <角色1> [ , <角色2> ] ...

TO <角色3> [ , <用户> ] ...

[ WITH GRANT OPTION ]

注意:

        ① 授予者或者是角色的创建者,或者拥有在这个角色上的 ADMIN OPTION。

        ② 如果指定了 WITH ADMIN OPTION子句,则获得某种权限的角色或用户还可以把这种权限再授予其他的角色。

        ③一个角色包含的权限包括直接授予这个角色的全部权限加上其他角色授予这个角色的全部权限。

(2.5.4)角色权限的收回

REVOKE <权限> [ , <权限> ] ...

ON <对象类型> <对象名>

FROM <角色> [ , <角色> ] ...

注意:

        ① 用户可以收回角色的权限,从而修改角色拥有的权限。

        ② REVOKE 动作的执行者或者是角色的创建者,或者拥有在这个(些)角色上 ADMIN OPTION。

【例1】通过角色来实现权限管理。

步骤:

(1)首先创建一个角色 R1;

CREATE ROLE R1;

(2)然后使用 GRANT 语句,使角色 R1 拥有 Student 表的 SELECT、UPDATE、INSERT权限;

GRANT SELECT, UPDATE, INSERT

ON TABLE Student

TO R1;

(3)将这个角色授予王平,张明,赵玲。使他们具有角色 R1 所包含的全部权限;

GRANT R1

TO 王平,张明,赵玲;

(4)可以一次性通过 R1 来回收王平的这 3 个权限。

REVOKE R1

FROM 王平;

【例2】增加角色的权限。

GRANT DELETE

ON TABLE

Student TO R1;

【例3】减少角色的权限。

REVOKE SELECT

ON TABLE Student

FROM R1;

(2.6)强制存取控制

(MAC)能够通过授权机制有效地控制对敏感数据的存取。但是在这种授权机制下,仍可能存在数据的 “无意泄露”。

        例如,甲将自己权限范围内的某些数据存取权限授权给乙,甲的意图是仅允许乙本人操纵这些数据。但甲的这种安全性要求并不能得到保证,因为乙一旦获得了对数据的权限,就可以将数据备份,获得自身权限内的副本,并在不征得甲同意的前提下传播副本。

        造成这一问题的根本原因就在于,这种机制仅仅通过对数据的存取权限来进行安全控制,而数据本身并无安全性标记。要解决这一问题,就需要对系统控制下的所有主客体实施强制存取控制策略。

TDI/TCSEC

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

(1)主体是系统中的活动实体,数据库管理系统所管理的实际用户,也包括代表用户的各进程;

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

2、数据库管理系统为它们每个实例指派了一个敏感度标记。

        敏感度标记被分成若干级别,例如绝密(Top Secret,TS)、机密(Secret,S)、可信(Confidential,C)、公开(Public,P)等。密级的次序是 TS>S>=C>=P。

        主体的敏感度标记称为许可证级别 (clearance level),客体的敏感度标记称为密级(classification level)。

        强制存取控制机制就是通过对比主体的敏感度标记和客体的敏感度标记,最终确定主体是否能够存取客体。

        强制存取控制规则:

(1)仅当主体的许可证级别大于或等于客体的密级时, 该主体才能读取相应的客体;

(2)仅当主体的许可证级别小于或等于客体的密级时, 该主体才能写相应的客体。

        强制存取控制是对数据本身进行密级标记,无论数据如何复制,标记与数据是一个不可分的整体,只有符合密级标记要求的用户才可以操纵数据。

DAC + MAC 安全检查:


mysql 数据库安全性 数据库的安全性_mysql 数据库安全性_05

DAC + MAC 安全检查

  

MAC 时要首先实现自主存取控制DAC。原因:较高安全性级别提供的安全保护要包含较低级别的所有保护。自主存取控制 DAC 与强制存取控制 MAC 共同构成数据库管理系统的安全机制。

3、视图机制

        通过视图机制把要保密的数据对无权存取这些数据的用户隐藏起来,对数据提供一定程度的安全保护。

        视图机制间接地实现支持存取谓词的用户权限定义。这就要求系统能支持 “存取谓词” 的用户权限定义。在不直接支持存取谓词的系统中,可以先建立视图,然后在视图上进一步定义存取权限。

【例】授权王平老师能查询计算机系学生的情况,授权系主任张明能对计算机系学生的信息进行所有操作。

(1) 先建立计算机系学生的视图 CS_Student

CREATE VIEW CS_Student

AS

SELECT *

FROM Student

WHERE Sdept = 'CS';

(2) 在视图上进一步定义存取权限

GRANT SELECT

ON CS_Student

TO 王平;

GRANT ALL PRIVILIGES

ON CS_Student

TO 张明;

4、审计(Audit)

(auditlog)中。审计员可以利用审计日志监控数据库中的各种行为,重现导致数据库现有状况的一系列事件,找出非法存取数据的人、时间和内容等。还可以通过对审计日志分析,对潜在的威胁提前采取措施加以防范。C2 以上安全级别的 DBMS

        可以被审计的事件

(1)服务器事件:

        审计数据库服务器发生的事件。

(2)系统权限:

        ① 对系统拥有的结构或模式对象进行操作的审计;

        ② 要求该操作的权限是通过系统权限获得的;

(3)语句事件:

        对 SQL 语句,如DDL、DML、DQL及DCL语句的审计。

(4)模式对象事件:

        对特定模式对象上进行的 SELECT 或 DML 操作的审计。

        审计日志管理:

(1)基本功能:提供多种审计查阅方式;

(2)多套审计规则:一般在初始化设定;

(3)提供审计分析和报表功能;

(4)审计日志管理功能;

        ① 防止审计员误删审计记录,审计日志必须先转储后删除;

        ② 对转储的审计记录文件提供完整性和保密性保护;

        ③ 只允许审计员查阅和转储审计记录,不允许任何用户新 增和修改审计记录等。

(5)提供查询审计设置及审计记录信息的专门视图。

        审计功能的可选性:

(1)审计很费时间和空间;

(2)DBA 可以根据应用对安全性的要求,灵活地打开或关闭审计功能;

(3)审计功能主要用于安全性要求较高的部门。

        审计功能设置:

AUDIT 语句:设置审计功能;

NOAUDIT 语句:取消审计功能。

        设置审计功能:

用户级审计:任何用户可设置的审计;主要是用户针对自己创建的数据库表和视图进行审计

系统级审计:只能由数据库管理员设置;监测成功或失败的登录要求、监测授权和收回操作以及其他数据库级权限下的操作。

【例1】对修改 SC 表结构或修改 SC 表数据的操作进行审计

AUDIT ALTER, UPDATE

ON SC;

【例2】取消对 SC 表的一切审计

NOAUDIT ALTER, UPDATE

ON SC;

5、数据加密

        数据加密:防止数据库中数据在存储和传输中失密的有效手段

(Plain text)变换为不可直接识别的格式 — 密文(Cipher text)。

        加密方法:存储加密、传输加密:

1、存储加密

(1)透明存储加密:

        ① 内核级加密保护方式,对用户完全透明;

        ② 将数据在写到磁盘时对数据进行加密,授权用户读取数据时再对其进行解密;

        ③ 数据库的应用程序不需要做任何修改,只需在创建表语句中说明需加密的字段即可。

        ④ 内核级加密方法:性能较好,安全完备性较高

(2)非透明存储加密:

        通过多个加密函数实现

2、传输加密

(1)链路加密:

        ① 传输信息由报头和报文两部分组成;

                报头:路由选择信息;报文:要传送的数据信息

        ② 报文和报头均加密。

(2)端到端加密:

        ① 在发送端加密,接收端解密;

        ② 只加密报文不加密报头;

        ③ 所需密码设备数量相对较少,容易被非法监听者发现并从中获取敏感信息。


mysql 数据库安全性 数据库的安全性_mysql 数据库安全性_06

数据库管理系统可信传输示意图

6、其他安全性保护

        推理控制:处理强制存取控制未解决的问题,避免用户利用能够访问的数据推知更高密级的数据。常用方法:基于函数依赖的推理控制、基于敏感关联的推理控制。

        隐蔽信道:处理强制存取控制未解决的问题;高安全等级用户按事先约定方式主动向低安全等级用户传输信息,从而导致高安全等级敏感信息泄露。