数据库安全性与SQL权限管理

数据库安全性

问题的提出

  • 数据库的一大特点是数据可共享
  • 数据共享必然带来数据库安全性问题
  • 数据库系统中的数据共享不能是无条件的共享

数据库安全性的目的

  • 数据库安全性是指保护数据库以防不合法使用所造成的数据泄露, 更改, 破坏.
  • 系统安全保护措施是否有效是数据库系统主要的性能指标之一.

数据库安全性概述

数据库的不安全因素

  1. 非授权用户对数据库的恶意存取和破坏 (黑客, 犯罪分子)
    • 黑客假冒合法用户偷取, 修改, 破坏用户数据.
    • 安全措施包括 : 用户身份鉴别, 存取控制, 视图 等.
  2. 数据库中重要或敏感的数据被泄露
    • 黑客盗窃数据库中的重要数据, 导致机密信息被暴露.
    • 安全措施包括 : 强制存取控制, 数据加密存储, 加密传输, 审计日志分析
  3. 安全环境的脆弱性
    • 数据库的安全性与计算机系统的安全性紧密联系
    • 建立一套可信的计算机系统的概念和标准

安全标准简介

发展历程 : TCSEC -> CC -> ISO15408(CC V2.1)

TCSEC标准

1991年4月由美国NSCS()颁布TDI.
NSCS : 国家计算机安全中心
TDI : <<可信计算机系统评估标准关于可信数据库系统的解释>>

  • TDI又称紫皮书. 它将TCSEC扩展到数据库管理系统
  • TDI中定义了数据库管理系统的设计与实现中需满足和用以进行安全性级别评估的标准

TCSEC/TDI的安全级别划分 :

avatar
安全级别由D到A1逐级递增.

  • D : 不符合任何更高标准的
    • DOS系统
  • C1 : 初级的自主安全保护, 对用户和数据的分离,进行自主存取控制(DAC)
    • 大多数现有商业系统
  • C2 : 安全产品的最低档次, 提供受控的存取保护, 进一步细化DAC.(这一级别产品通常不突出”安全”特色)
    • Windows 2000 , Oracle 11g
  • B1 : 标记安全保护, 对标记的主体和客体实施强制存取控制(MAC), 审计等安全机制(安全可信的产品)
    • HP-UX BLS RELEASE 9.09+ , Trusted Oracle , Secure SQL Server version 11.0.6
  • B2 : 结构化保护, 对系统内所有主客体试试DAC与MAC
  • B3 : 安全域, TCB必须满足访问监控器的要求, 审计跟踪能力更强, 提供系统恢复过程
  • A1 : 验证设计, B3级保护的同时给出系统形式化的设计说明和验证实现

CC标准

提出国际公认的表述信息安全性的结构.

把信息产品的安全要求分为 :

  • 安全功能要求 : 规范系统产品的安全行为
  • 安全保证要求 : 正确有效的实施功能

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

avatar
保证程度由EAL1到EAL7逐级提升


数据库安全性控制

在计算机系统中, 安全措施逐层设置

层级 用户 DBMS OS DB
保护 用户标识和鉴别 数据库安全保护 操作系统安全保护 数据密码存储
  • 系统根据用户标识鉴定用户身份, 合法用户才准许进入计算机系统
  • 数据库管理系统进行存取控制, 只允许用户执行合法操作
  • 操作系统有自己的保护措施(涉及操作系统)
  • 数据以密码形式存储到数据库

数据库安全性控制的常用方法

  • 用户身份鉴别
  • 存取控制
  • 视图
  • 审计
  • 数据加密

数据库安全保护的控制模型:

安全保护控制模型.png

  • 身份鉴别 : DBMS对提出SQL访问请求的数据库用户进行身份鉴别, 防止不可信用户使用系统.
  • SQL层 : 在SQL处理层进行自主存取控制和强制存取控制, 进一步可以进行推理控制.
  • 审计 / 入侵检测 : 对用户访问行为和系统关键操作进行审计, 对异常用户行为进行简单入侵检测.

用户身份鉴别 (Identification & Authentication)

系统提供的最外层安全保护措施, 也就是登录的安全保护
用户标识 : 由用户名和用户标识号组成 (用户标识号在系统整个生命周期内唯一)

用户鉴别的方法

  1. 静态口令鉴别 (用户自己设定静态口令, 这些口令静态不变. 比如静态密码)
  2. 动态口令鉴别 (每次鉴别均使用动态产生的新口令登录, 一次一密. 比如短信登陆)
  3. 智能卡鉴别 (智能卡是不可复制的硬件, 内置集成电路的芯片, 具有硬件加密功能. 比如门禁卡)
  4. 生物特征鉴别 (通过生物特征进行认证, 指纹, 虹膜, 掌纹等. 比如指纹解锁)

存取控制

用户登录成功不代表可以访问所有数据, 每个用户只能访问其权限内可访问的数据.

存取控制机制组成

  • 权限定义机制 : 定义用户权限, 并将用户权限登记到数据字典中
    • 用户对某一数据对象的操作权力称为权限
    • DBMS提供适当的语言来定义用户权限, 存放在数据字典中, 称为安全规则或授权规则
  • 合法权限检查
    • 用户发出存取数据库的操作请求.
    • DBMS查找数据字典, 进行合法权限检查

自主存取控制方法

自主存取控制定义 (Discretionary Access Control 检查 DAC)

  • 用户对不同数据对象由不同的存取权限
  • 不同的用户对同一对象也有不同的权限
  • 用户还可将其拥有的存取权限转授给其他用户

关系数据库系统中存取控制对象的及其权限:

数据库安全性-存取控制对象.png
对于数据对象的权限管理通过SQL的 GRANT 语句和 REVOKE 语句实现
对于模式对象的权限管理通过SQL的 CREATE USER 语句实现

授权 : 授予与回收

通过SQL的 GRANT 语句和 REVOKE 语句实现权限的授予和回收

权限授予 GRANT

GRANT语句格式

语义 : 将对指定操作对象 指定操作权限授予指定的用户
GRANT <权限1>[(属性名1)] [, <权限2>[(属性名2)]]...
ON <对象类型1> <对象名1> [, <对象类型2> <对象名2>]...
TO <用户1> [, <用户2>]...
[WITH GRANT OPTION];
GRANT : 指定要授予的操作权限
ON子句 : 指定该权限所属的对象 (指定操作对象)
TO子句 : 指定要授予权限的用户
WITH GRANT OPTION子句 : 指定该子句则被授权的用户被允许转授该权限, 否则不可.
: SQL中不允许循环授权. 即A给B, B给C, C给A.

有权发出GRANT者:

  • 数据库管理员 (Root用户)
  • 数据库对象的创建者 (属主Owner)
  • 拥有该权限的用户

可指定的接受权限的用户:

  • 一个或多个具体用户
  • PUBLIC (全体用户)

例子2-1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 将查询Student表的权限授予用户U1
GRANT SELECT
ON TABLE Student
TO U1;

# 将Student表 和 Course表的全部权限授予用户U2 和U3
GRANT ALL PRIVILIGES # ALL PRIVILIGES 谓词表示相关对象的所有权限
ON TABLE Student, Course
TO U2, U3;

# 把对SC表的查询权限授予所有用户
GRANT SELECT
ON TABLE SC
TO PUBLIC; # PUBLIC 谓词表示所有用户

# 把查询Student表和修改学生学号的权限授予用户U4
GRANT UPTDATE(Sno), SELECT # 对属性列的授权必须显式指出列名
ON TABLE Student
TO U4;

# 把SC表的INSERT权限授予用户U5, 并允许其转授权限
GRANT INSERT
ON TABLE SC
TO U5
WITH GRANT OPTION; # WITH GRANT OPTION 子句表明目标用户可以转授权限
# U5得到权限后, 还可以授权给U6同时允许转授, U6可以授权给U7同时不允许转授, U7就不能授权给别人了

执行完上述例子后, 数据库中用户权限定义表 如下图:

数据库安全性-权限定义表.png

权限回收 REVOKE

REVOKE语句格式

语义 : 将指定对象的指定操作权限从指定用户处回收
REVOKE <权限>[(属性名)] [, <权限>[(属性名)]]...
ON <对象类型> <对象名> [, <对象类型> <对象名>]...
FROM <用户> [, <用户>]...[CASCADE | RESTRICT];
REVOKE : 指定要回收的权限
ON : 指定要回收权限的对象
FROM : 指定要回收权限的用户
CASCADE | RESTRICT : CASCADE表示级联回收, RESTRICT表示受限回收 (不同系统的缺省值不一样)
(GRANT里提到不允许循环授权, 原因就是回收时将产生歧义)

例子2-2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 把用户U4修改学生学号的权限回收
REVOKE UPDATE(Sno)
ON TABLE Student
FROM U4;

# 回收所有用户对SC表的查询权限
REVOKE SELECT
ON TABLE SC
FROM PUBLIC;

# 回收用户U5及其转授权限者对于SC表的INSERT权限回收
REVOKE INSERT
ON TABLE SC
FROM U5 CASCADE; # CASCADE 表示级联回收
#这里U5 U6 U7的权限都被回收了, 但如果U6 U7从其他用户那儿获取了该权限, 则它们仍然具有该权限

执行完上述例子后, 数据库中用户权限定义表 如下图:

数据库安全性-权限定义表2.png

创建数据库模式的权限 CREATE USER (创建用户)

CREATE USER的语句格式

CREATE USER <用户名>
[WITH] [DBA | RESOURCE | CONNECT]
CREATE USER : 指定要创建用户的用户名
WITH子句 : 指定该用户的初始权限
DBA RESOURCE CONNECT三种权限的权限范围 :

CREATE USER CREATE SCHEMA CREATE TABLE 登录数据库, 执行数据查询和操作
DBA 可以 可以 可以 可以
RESOURCE 不可以 不可以 可以 可以
CONNECT 不可以 不可以 不可以 可以, 但必须拥有相应选权限

数据库角色

被命名的一组与数据库操作相关的权限

  • 角色是权限的集合
  • 角色可以为一组具有相同权限的用户创建一个角色
  • 简化授权的过程

使用角色管理数据库权限的过程:

方法类似授予权限, 多了授予角色和给角色授权的步骤

  1. 角色创建
    • CREATE ROLE <角色名> (新角色的权限是空的)
  2. 为角色授权
    • GRANT ... ON ... TO <角色名>[, <角色名>] (与给用户授权一样, 只是用户名换成角色名)
  3. 将一个角色授予其他的角色或用户
    • GRANT <角色名>[,<角色名>]... TO <角色名>/<用户名>... [WITH ADMIN OPTION]
    • 指定WITH ADMIN OPTION后,授权的用户有权将权限和角色转授出去

有权授予角色权限的人 : 该角色的创建者, 拥有这个角色的ADMIN OPTION者

角色权限的收回

方法类似回收权限, 只不过目标从用户换成了角色
REVOKE <权限>[,<权限>]
ON <对象类型> <对象名>
FROM <角色名>[,<角色名>]
有权回收角色权限的人 : 该角色的创建者, 拥有这个角色的ADMIN OPTION者

例子2-3

1
2
3
4
5
6
7
8
9
10
# 创建角色 R1
CREATE ROLE R1; # 此时R1没有任何权限
# 授予角色R1 Student表的SELECT UPDATE INSERT权限
GRANT SELECT, UPDATE, INSERT ON TABLE Student TO R1; # R1获得了Student表的SELECT UPDATE INSERT权限
# 将角色R1授予用户U1, U2, U3
GRANT R1 TO U1, U2, U3; # U1, U2, U3获得了R1角色的权限
# 将U1对于Student表的SELECT UPDATE INSERT权限回收
REVOKE R1 FROM U1; # 一次性回收了U1有关R1的所有权限
# 收回角色R1对于Student表的INSERT权限
REVOKE INSERT ON TABLE Student FROM R1; # R1失去了Student表的INSERT权限

强制存取控制 (MAC)

通过GRANT和REVOKE可实现自主存取控制, 但自主存取控制有缺陷:

  • 可能存在数据的”无意泄露” (人的原因)

强制存取控制的优势:

  • 保证更高的安全性
  • 用户不能直接感知或进行控制
  • 适用于对数据有严格而固定密级分类的部门 (军政部门)

主体与客体

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

  • 主体 : 系统中活动的实体
    • 数据库管理系统管理的实际用户
    • 代表用户的各进程
  • 客体 : 系统中的被动实体, 受主体操控
    • 文件, 基本表, 索引, 视图

敏感度标记

对于主体和客体, DBMS为每个实例指派一个敏感度标记(Label)

  • 主体的敏感度标记被称为 : 许可证级别
  • 客体的敏感度标记被称为 : 密级

敏感度标记分为若干级别 (TS >= S >= C >= P)

  • 绝密 (Top Secret, TS)
  • 机密 (Secret, S)
  • 可信 (Confidential, C)
  • 公开 (Public, P)

强制存取控制规则

  1. 仅当主体的许可证级别大于或等于客体的密级时, 主体才能相应的客体
  2. 仅当主体的许可证级别小于或等于客体的密级时, 主体才能相应的客体
    (之所以不允许主体写敏感度比自己低的客体, 是为了防止其恶意将数据降级造成数据暴露)

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

DAC与MAC共同构成了DBMS的安全机制


视图机制

视图把要保密的数据对无权操作该数据的用户隐藏, 对数据提供了一定程度的安全保护.

使用GRANT语句可以为用户授权某些属性(列)的权限, 但无法使用其为用户授权某些元组(行)的权限.
借助视图机制则可以实现这一功能.

例子3-1

1
2
3
4
5
6
# 授权王平老师能查询计算机系学生的情况, 授权系主任张明能对计算机系学生的信息进行所有操作
# 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 张明;

总结 : 通过视图限制对元组的操作权限, 使用GRANT语句限制对属性的操作权限


审计(Audit)

上述提到的安全性措施包括:

  • 用户身份鉴别
  • 自主存取控制
  • 强制存取控制
  • 视图

这些都属于 预防性措施 , 防止出现安全问题.
审计 属于 监控措施 , 是当安全问题出现后的补救措施.
两种措施相互配合, 使得数据库系统安全性更有保障.

审计的工作 :

  • 启用一个专用的审计日志 (Audit Log) , 将用户对数据库的所有操作记录在上面.
  • 审计员利用审计日志 , 监控数据库中的各种行为 , 发现非法存取与潜在威胁
  • C2级别以上的DBMS必须具备审计功能

可以被审计的事件

  • 服务器事件
    • 审计数据库服务器发生的事件
  • 系统权限
    • 对系统拥有的结构或模式对象进行操作的审计
    • 要求该操作的权限是通过系统权限获得的
  • 语句事件
    • 对SQL语句, 如DDL, DML, DQL, DCL语句的审计
  • 模式对象事件
    • 对特定模式对象上进行的SELECT或DML操作的审计

审计日志的管理

  • 基本功能 : 提供多种审计查阅方式
  • 多套审计功能 : 一般在初始化设定
  • 提供审计分析和报表功能
  • 审计日志管理功能
    • 防止审计员误删审计数据 , 审计日志必须先转储再删除
    • 对转储的审计记录文件提供完整性和保密性保护
    • 只允许审计员查阅和转储审计记录, 不允许任何用户新增和修改审计记录

审计功能是可选性

  • 审计很费时间和空间
  • DBA可以根据应用对安全性的要求, 灵活地打开或关闭审计功能
  • 通常审计功能只用于安全性较高的部门

审计功能设置

  • AUDIT语句 : 设置审计功能
  • NOAUDIT语句 : 取消审计功能

设置审计功能

审计分为 用户级审计系统级审计.

用户级审计

  • 任何用户可设置的审计
  • 主要是针对用户子句创建的数据库表和视图进行审计

系统级审计

  • 只能由数据库管理员设置
  • 监测成功或失败的登录要求, 监测授权和回收操作以及其他数据库权限下的操作

例子4-1

1
2
3
4
# 对修改SC表 结构 或修改SC表 数据 的操作进行审计
AUDIT ALTER, UPDATE ON SC;
# 取消对SC表的一切审计
NOAUDIT ALTER, UPDATE ON SC; #可见 只能一个个写出来取消

数据加密

防止数据库中数据再 存储传输 中失效的有效手段.

加密方式:

  • 存储加密
  • 传输加密

存储加密

  • 透明存储加密
    • 内核级加密保护方式, 对用户完全透明
    • 将数据卸载磁盘时对数据加密, 授权用户读取数据时再解密
    • 数据库的应用程序不需要修改, 主要在创建表语句中说明需要加密的字段即可
    • 内核级加密方法: 性能好, 安全完备性高
  • 非透明存储加密
    • 通过多个加密函数实现

传输加密

  • 链路加密
    • 对报头和报文都进行加密
  • 端到端加密
    • 只加密报文, 不加密报头

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

数据库安全性-可信传输示意图.png


其他安全性保护

推理控制

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

隐蔽信道

  • 处理强制存取控制未解决的问题
  • 高安全等级用户按约定主动向低安全等级用户传输信息, 从而导致敏感信息泄露

小结

实现数据库系统安全性的技术和方法:

  • 用户身份鉴别
  • 存取控制技术 : 自主存取控制(DAC) 与 强制存取控制(MAC)
  • 视图技术
  • 审计技术
  • 数据加密 : 加密存储 与 加密传输

用户权限管理

  • 使用 GRANTREVOKE 语句实现自主存取控制
  • 使用 CREATE ROLE 语句创建角色, 使用 GRANT 语句给角色授权
  • 掌握视图机制在数据库中安全保护中的作用 (限制元组的访问权限)

难点

  • MAC中主体能否存取客体的规则, 以及规定的原因.