数据库安全性
4.1数据库安全性概述
数据库的安全性是指保护数据库以防止不合法的使用所造成的数据泄露、破坏、更改。
数据库系统中大量数据集中存放,而且为众多终端用户直接共享,从而使安全问题更为突出。
4.1.1 数据库的不安全因素
- 非授权用户对数据库的恶意存取和破坏。
数据库管系统提供的安全措施主要包括用户身份鉴别、存取款控制和视图技术。 - 数据库中重要或敏感的数据被泄露
数据库管理系统提供的技术有强制存取和控制、数据加密存储、加密传输、etc。
在安全性比较高的部门提供审计功能,通过分析审计日志,可以对潜在的威胁提前采取措施加以防范。 - 安全环境的脆弱性
数据库的安全性与计算机系统的安全性、包括计算机硬件、操作系统、网络系统等的安全性是紧密相连的。
4.1.2安全标准简介
4.2数据库安全性控制
4.2.1用户身份鉴别
- 静态口令鉴别
passward,简单,容易被攻击,安全性较低。
数据库管理系统从口令的复杂度、口令的管理、存储、传输等多方面来保障口令的安全可靠。
在存储和传输的过程中口令信息不可见,均以密文的方式存在,用户身份鉴别可以重复使用多次。 - 动态口令鉴别
一次一密,如短信密码和动态令牌。 - 生物特征鉴别
指纹、虹膜、掌纹。 - 智能卡鉴别
智能卡是一种不可复制的硬件,内置集成电路芯片,具有硬件加密功能。
智能卡中的数据还是静态的,有可能通过内存扫描或者网络监听等技术截获,因此一般采用智能卡和PIN相结合的方式。
4.2.2存取控制
存取控制主要包括定义用户权限和合法权限检查两部分。
- 定义用户权限
用户对某一数据对象的操作权力称为权限,某个用户应该具有何种权限是一个管理问题、政策问题,而不是一个技术问题。 - 合法权限检查
定义用户权限和合法权限检查机制一起组成了数据库管理系统的存取控制子系统
- 自主存取控制
用户对于不同的数据库对象有不同的存取权限,不同的用户对同一个对象也具有不同的权限。 - 强制存取控制
每一个数据库对象被标以一定的密级,每一个用户也被授予一定级别的许可证。
4.2.3自主存取控制方法
用户权限由两个要素组成:数据库对象和操作类型。
定义存取权限称为授权。
在关系数据库中,存取控制的对象不仅仅有数据本身,还有数据库模式。
需要说明的是,对列update
要遵守表在定义的时候的主码以及其他约束;在授予用户insert
权限的时候,一定要包含主码的权限。
4.2.4授权:授予与收回
授予权限的关键字:grant
,收回权限的关键字:revoke
。
grant
语句的一般格式
grant <权限> [,<权限>]...
on <对象类型> <对象名> [,<对象类型> <对象名>]...
to <用户> [,<用户>]...
[with grant option];
发出该语句的对象可以是:数据库管理员、该数据库对象的创建者,已拥有相应权限的用户。
接受权限的用户可以是一个或者多个具体的用户,也可以是全体用户public
。
如果指定了with grant option
,被授予权限的用户可以继续授予权限,但不允许循环授权。
几个例子:
grant select
on table Student
to BBO;
/*将Student的查询权限授予BBO*/
grant all privileges
on table Student
to BBO;
/*将Student的所有权限授予BBO*/
grant select
on table Student
to public;
/*将Student的查询权限授予全体用户*/
revoke
语句的一般格式
revoke <权限> [,<权限>]...
on <对象类型> <对象名> [,<对象类型> <对象名>]
from <用户> [,<用户>] ... [cascade | restrict];
cascade
会级联收回权限。
- 创建数据库模式的权限
一般在DBA创建用户的时候指定:
create user <username> [with][DBA | resource | connect];
- 只有系统的超级用户才可以创建新的数据库用户
- 创建新的用户的时候,有三种权限可选
-
connect
是默认值,不能创建用户、创建模式、创建基本表,其他权限由其他用户授予。 -
resource
权限能够创建基本表和视图,不能创建模式和用户。 -
DBA
可以删库跑路,为所欲为。
4.2.5数据库角色
定义:被命名的一组与数据库相关的权限,角色是权限的集合。
- 角色的创建
create role <角色名>;
- 给角色授权
grant <权限>[,<权限>]...
on <对象类型> <对象名>
to <角色>[,<角色>];
- 将一个角色授予其他的角色和用户
grant <角色1>[,<角色2>]...
to <角色3>[,<用户1>]
[with admin option];
如果有with admin option
,权限可以层层授予。
- 角色权限的收回
revoke <权限> [,<权限>]...
on <对象类型> <对象类型>
from <角色> [,<角色>];
revoke
的执行者是是角色的创建者,或者在这些角色上有admin option
的人。
4.2.6强制存取控制方法
主体:系统中的活动实体,包括数据库的各种实际用户,也包括代表各用户的各个进程。
客体:文件、基本表、视图、索引等受主体操纵的。
主体的敏感度标记称为许可证级别;
客体的敏感度标记称为密级。
敏感度标记:绝密TS,机密S,可信C,公开P。
- 当主体的许可证级别大于或等于客体的密级时,该主体才能读取相应的客体。
- 当主体的许可证级别小于或等于客体的密级时,该主体才能写入相应的客体。
第二条是为了防止主体读取数据之后降低密级写入,造成数据泄露。
实际应用中,对于一条输入的SQL语句,一般先进行语法检查,再进行自主存取控制,再进行强制存取控制。
4.3视图机制
可以为不同的用户定义不同的视图,把数据对象限制在一定的范围内,即通过视图机制将要保密的数据向无关的用户隐藏起来,从而提供一定程度的安全保护。
4.4审计
审计功能将用户对数据库的所有操作自动记录下来放入审计日志(audit log)。
审计员可以利用审计日志监控数据库中的各种行为,重现导致数据库现有状况的一系列事件,找出非法存取数据的人、时间、内容。
- 审计事件
- 服务器事件:数据库的启动、停止,服务器配置文件的重新加载。
- 系统权限:对系统拥有的结构或是模式对象的审计。
- 语句事件:对SQL语句的审计。
- 模式对象事件:对特定的对象进行操作的审计。
- 审计功能
- 基本功能:提供多种审计查询方式
- 设置多种审计规则
- 审计分析和报表功能,防止误删除,保密性,完整性
- 系统提供查询审计设置及审计记录信息的专门视图
audit
和noaudit
语句
- 开启
audit alter update
on SC;
- 关闭
noaudit alter update
on SC;
4.5数据加密
- 储存加密
- 透明
- 非透明
- 传输加密
- 链路加密
- 端到端加密
4.6其他安全保护
- 推理控制
避免用户利用其能够访问的数据推知更高密级的数据 - 隐蔽信道