数据库安全性
数据库的不安全因素:
- 非授权用户对数据库的恶意存取和破坏
- 数据库中重要或敏感的数据被泄露
- 安全环境的脆弱性
安全性描述
TCSEC/TDI
内容:定义了数据库管理系统的设计与实现中需要满足和用以进行安全性级别评估的标准,从4个方面描述安全性级别划分的指标,即安全策略、责任、保证和文档
TCSEC/TDI 将系统划分为4组7个等级,依次是 D、C(C1,C2)、B(B1,B2,B3)、A(A1),按系统可靠或可信程度逐渐增高
安全性控制
用户身份鉴别
用户身份鉴别是数据库管理系统提供的最外层安全保护措施
每个用户在系统中都有一个用户标识,每个用户标识由用户名和用户标识号两部分组成,系统内部记录着所有合法用户的标识
UID 在系统的整个生命周期内是唯一的
系统鉴别是指由系统提供一定的方式让用户标识自己的名字或身份
每次用户要求进入系统时,由系统进行核对,通过鉴定后才提供使用数据库管理系统的权限
鉴别方法
存取控制
数据库安全最重要的一点就是确保只授权给有资格的用户访问数据库的权限,同时令所有未被授权的人员无法接近数据,主要通过数据库系统的存取控制机制实现
存取控制机制主要包括定义用户权限和合法权限检查两部分
定义用户权限
定义用户权限,并将用户权限登记到数据字典中
权限是指用户对某一数据对象的操作权力
数据库管理系统必须提供适当的语言定义用户权限,这些定义经过编译后存储在数据字典中,被称做安全规则或授权规则
组成要素:数据库对象和操作类型
授权:定义存取权限
合法权限检查
当用户发出存取数据库的操作请求后,数据库管理系统查找数据字典,根据安全规则进行合法权限检查,若用户的操作请求超出定义的权限,系统将拒绝执行此操作
存取控制子系统
定义用户权限和合法权限检查机制一起组成了数据库管理系统的存取控制子系统
C2级的数据库管理系统支持自主存取控制,B1级的数据库管理系统支持强制存取控制
自主存取控制
自主存取控制对用户进行等级划分
用户对不同的数据库对象有不同的存取权限
不同的用户对同一对象有不同的权限
用户可将其拥有的存取权限转授给其他用户
自主存取控制非常灵活
实现
主要通过 SQL 的 grant 语句和 revoke 语句实现
存取权限
在非关系系统中,用户只能对数据进行操作,存取控制的数据库对象仅限于数据本身
在关系数据库系统中,存取控制的对象不仅有数据本身,还有数据库模式
授权:授予与收回
grant 向用户授予权限
revoke 收回已经授予用户的权限
grant 授权
grant <权限>[,<权限>] ...
on <对象类型> <对象名> [,<对象类型> <对象名>] ...
to <用户> [,<用户>] ...
[with grant option]
//若指定,则获得某种权限的用户可以把这种权限再授予其他用户//若未指定,则获得某种权限的用户只能使用该权限,不能传播该权限
语义:将对指定操作对象的指定操作权限授予指定的用户
授权者:数据库管理员,该数据库对象创建者(即属主owner),已经拥有该权限的用户
被授权者:一个或多个具体用户,public(即全体用户)
不允许循环授权,即被授权者不能把权限再授回给授权者或其祖先
对属性列授权时必须明确指出相应的属性列名
修改权限的执行必须有查询权限
数据库管理员拥有对数据库中所有对象的所有权限,可以根据实际情况将不同的权限授予不同的用户
revoke 回收权限
revoke <权限> [,<权限>] ...
on <对象类型> <对象名> [,<对象类型> <对象名>] ...
from <用户> [,<用户>] ...... [ cascade | restrict ]
//级联 cascade
所有授予出去的权力在必要时都可以用 revoke 语句收回
只能收回你给我的权限,至于别人给的无权干涉
用户可以“自主”地决定将数据的存取权限授予何人、决定是否将“授权”的权限授予别人,因此称这样的存取控制是自主存取控制
创建数据库模式的权限
创建数据库模式一类的数据库对象的授权由数据库管理员在创建用户时实现
create user <username> [with] [DBA|resource|connect]
- 只有系统的超级用户才有权创建一个新的数据库用户
- 新创建的数据库用户有三种权限:connect(普通用户)、resource(owner)、DBA
- 若没有指定创建的新用户的权限,默认该用户拥有 connect 权限 。拥有 connect 权限的用户不能创建新用户,不能创建模式,也不能创建基本表,只能登录数据库。有数据库管理员或其他用户授予他应有的权限,根据获得的授权情况可以对数据库对象进行权限范围内的操作
- 拥有 resource 权限的用户能创建基本表和视图,成为所创建对象的属主,但不能创建模式,不能创建新的用户。数据库对象的属主可以使用 grant 语句把该对象上的存取权限授予其他用户
- 拥有 DBA 权限的用户是系统中的超级用户,可以创建新的用户、创建模式、创建基本表和视图等;DBA 拥有对所有数据库对象的存取权限,还可以把这些权限授予一般用户
数据库角色
定义:是被命名的一组与数据库操作相关的权限,角色是权限的集合
可以为一组具有相同权限的用户创建一个角色
使用角色管理数据库权限可以简化授权的过程,使自主授权的执行更加灵活、方便
角色的创建
create role <角色名>
新创建的角色是空的,没有任何内容
给角色授权
grant <权限> [,<权限>] ...
on <对象类型> 对象名
to <角色> [,<角色>] ...
数据库管理员和用户可以利用 grant 语句将权限授予某一个或几个角色
与给用户授权一致
将一个角色授予其他的角色或用户
grant <角色1> [,<角色2>] ...
to <角色3> [,<用户1>] ...
[with admin option]
把多个角色授权于某用户或另外一个角色,那么被授权方所拥有的权限就是授予它的全部角色所包含的权限的总和
授予者:角色的创建者或拥有在这个角色上的 admin option
一个角色包含的权限包括直接授予这个角色的全部权限加上其他角色授予这个角色的全部权限
角色权限的收回
revoke <权限> [,<权限>] ...
on <对象类型> <对象名>
from <角色> [,<角色>] ...
用户可以收回角色的权限,从而修改角色拥有的权限
执行者:角色的创建者或拥有在这个角色上的 admin option
强制存取控制
强制存取控制不仅对用户划分等级,对数据也进行等级划分
强制存取控制是指系统为保证更高程度的安全性,按照 TDI/TCSEC 标准中安全策略的要求所采纳的强制存取检查手段
用户不能直接感知或进行控制
适用于对数据有严格而固定密级分类的部门
每一个数据库对象被标以一定的密级
每一个用户被授予某一个级别的许可证
对于任意一个对象,只有具有合法许可证的用户才可以存取
强制存取控制相对比较严格
在强制存取控制中,数据库管理系统所管理的全部实体被分为主体和客体两大类
主体是系统中的活动实体,既包括数据库管理系统所管理的实际用户,也包括代表用户的各进程
客体是系统中的被动实体,是受主体操纵的
对于主体和客体,数据库管理系统为其每个实例(值)指派一个敏感度标记
敏感度标记被分为若干级别,绝密 TS、机密 S、可信 C、公开 P ......密级的次序是 TS>=S>=C>=P
主体的敏感度标记称为许可证级别
客体的敏感度标记称为密级
仅当主体的许可证级别大于或等于客体的密级时,该主体才能读取相应的客体
仅当主体的许可证级别小于或等于客体的密级时,该主体才能写相应的客体
强制存取控制是对数据本身进行密级标记,无论数据如何复制,标记与数据是一个不可分的整体,只有符合密级标记要求的用户才可以操纵数据,从而提供了更高级别的安全性
视图机制
为不同的用户定义不同的视图,把数据对象限制在一定的范围内,即通过视图机制把要保密的数据对无权存取的用户隐藏,从而自动对用户提供一定程度的安全保护
审计
审计功能是数据库管理系统达到 C2 以上安全级别必不可少的一项指标
审计功能把用户对数据库的所有操作自动记录下来放入审计日志中,审计员可以利用审计日志监控数据库中的各种行为,重现导致数据库现有状况的一系列事件,找出非法存取数据的人、时间和内容等
审计很费时间和空间,所以数据库管理系统往往把审计设置为可选特征,允许数据库管理员根据具体应用对安全性的要求灵活地打开或关闭审计功能
审计功能主要用于安全性要求较高的部门
审计事件
- 服务器事件:审计数据库服务器发生的事件,包括数据库服务器的启动、停止、数据库服务器配置文件的重新加载
- 系统权限:对系统拥有的结构或模式对象进行操作的审计,要求该操作的权限是通过系统权限获得的
- 语句事件:对 SQL 语句的审计
- 模式对象事件:对特定模式对象上进行的 SELECT 和 DML 操作的审计。模式对象包括表、视图、存储过程、函数等、模式对象不包括依附于表的索引、约束、触发器、分区表等
审计功能
- 基本功能,提供多种审计查阅方式:基本的、可选的、有限的 ......
- 提供多套审计规则,审计规则一般在数据库初始化时设定,以方便设计员管理
- 提供审计分析和报表功能
- 审计日志管理功能,包括为防止审计员误删审计记录,审计日志必须先转储后删除;对转储的审计记录文件提供完整性和保密性保护;只允许审计员查阅和转储审计记录,不允许任何用户新增或修改审计记录 ......
- 系统提供查询审计设置及审计记录信息的专门视图。对于系统权限级别、语句级别及模式对象级别的审计记录可以通过相关的系统表直接查看
AUDIT 语句和 NOAUDIT 语句
AUDIT 语句用来设置审计功能
NOAUDIT 语句则取消审计功能
审计一般可分为用户级审计和系统级审计
用户级审计是任何用户可设置的审计,主要是用户针对自己创建的数据库表或视图进行审计,记录所有用户对这些表或视图的一切成功或不成功的访问要求以及各种类型的 SQL 操作
系统级审计只能由数据库管理员设置,用以监测成功或失败的登录要求、监测授权和收回操作以及其他数据库级权限下的操作
数据库安全审计系统提供了一种事后检查的安全机制
数据加密
数据加密是防止数据库数据在存储和传输中失密的有效手段
加密的基本思想:根据一定的算法将原始数据——明文变化为不可直接识别的格式——密文,从而使得不知道解密算法的人无法获知数据的内容
数据加密主要包括存储加密和传输加密
其他安全性保护
推理控制
处理内容:强制存取控制未解决的问题
作用:用来避免用户利用其能够访问的数据推知更高密级的数据,即用户利用其被允许的多次查询的结果,结合相关的领域背景知识以及数据之间的约束,推导出其不能访问的数据
隐蔽信道
处理内容:强制存取控制未解决的问题
数据隐私
定义:控制不愿被他人知道或他人不便知道的个人数据的能力
范围:很广,涉及数据管理中的数据收集、数据存储、数据处理和数据发布等各个阶段