数据库的安全性
数据库的安全性是指保护数据库以防止不合法的使用所造成的数据泄露、更改或破坏。
数据库的安全级别划分
安全级别 | 定义 |
---|---|
A1 | 验证设计 |
B3 | 安全域 |
B2 | 结构化保护 |
B1 | 标记安全保护 |
C2 | 受控的存取保护 |
C1 | 自主安全保护 |
D | 最小保护 |
数据库安全性控制
用户的表示与鉴别
用户标识与鉴别是系统提供的最外层安全保护措施。其方法是由系统提供一定的方式让用户标识自己的身份或名字。每次用户要求进入系统时,由系统进行核对,通过鉴定后才能提供机器使用权。
- 用户标识(User Identification)
用一个用户名或者用户标识号(UID)来表明用户身份。系统内部记录着所有合法用户的标识,系统鉴别此用户是否是合法用户。
- 口令(Password)
为了进一步核实用户,系统常常要求用户输入口令。系统核对口令以鉴别用户身份。
存取控制
数据库安全最重要的一点就是确保只授权给有资格的用户访问数据库的权限,同时令所有未被授权的用户无法接近数据,这主要通过数据库的存取控制机制实现。
存取控制机制主要包含两部分:
1.定义用户权限,并将用户权限登记到数据字典中。
2.合法权限检查
包括自主存取控制(DAC)和强制存取控制(MAC),这两类方法的简单定义是:
- 在自主存取控制方法中,用户对不同的数据库对象有着不同的存取权限,不同的用户对同一对象也有不同的权限,而且用户还可以将其拥有的存取控制权限转给其他用户。因此自主存取控制非常灵活。
- 在强制存取控制方法中,每一个数据库对象都被标以一定的密级,每一个用户也被授予某一个级别的许可证。对于任一个用户,只有具有合法许可证的用户才能可以存取,因此强制存取方法比较严格。
自主存取控制(DAC)方法
用户权限主要有两个要素组成:数据库对象和操作类型。在数据库系统中,定义存取权限称为授权。
1.授权与回收
- GRANT语句
GRANT语句的一般格式为:
grant<权限>[,<权限>]
on <对象类型><对象名>
to user <用户>
[with grant option];// 表示可以将权限授予给其他人
例:把查询Student表的权限授予给用户U1,且U1可将此权限授予给其他用户。
grant select
on table Student
to U1;
with grant option;
- REVOKE语句
REVOKE语句的一般格式为:
revoke<权限>[,<权限>]
on <对象类型><对象名>
from <用户>
[cascade|restrict];
例:把用户U1修改学生学号的权限收回。
revoke update(Sno)
on table Student
from U1;
强制存取控制(MAC)方法
在MAC中,DBMS所管理的全部实体都被分为主体和客体两大类。
主体是系统中的活动实体,既包括DBMS所管理的实际用户,也包括代表用户的各进程。客体是系统中的被动实体,是受主体操纵的,包括文件、基本表、索引、视图等。对于主体和客体,DBMS为他们每个实体指派一个敏感度标记(Label)。
当某一用户以标记Label注册入系统时,系统要求他对任何客体的存取必须遵循以下规则:
- 仅当主体的许可证级别大于或等于客体的密级时,该主体才能读取相应的客体;
- 仅当主体的许可证级别等于客体的密级时,该主体才能写相应的客体。
视图机制
通过为不同的用户定义不同的视图,把数据对象限制在一定范围内,可以把要保密的数据对无权寻去的用户隐藏起来,从而自动地对数据提供一定程度的安全保护。
审计(Audit)
审计功能是DBMS达到C2安全级别以上必不可少的重要指标。
审计一般分为用户级审计和系统级审计。
用户级审计是对任何用户设置的审计,主要是用户针对自己创建的数据库表或视图进行审计,记录所有用户对这些表或视图的一切成功或不成功的访问要求以及各种类型的SQL操作。
系统级审计只能由DBA设置,用于监测成功或失败的登录要求、监测grant和revoke操作以下其他数据库级权限下的操作。
audit语句用来设置审计功能,noaudit语句取消审计功能。
例:对修改SC表结构或修改SC表数据的操作进行审计。
audit alter,update
on SC;
例:取消对SC表的一切审计。
noaudit alter,update
on SC;
审计设置以及审计内容一般都存放在数据字典中。