数据库安全性
一、计算机安全性概论
(一)核心概念
- 数据库安全性:保护数据库免受非法使用导致的数据泄露、更改或破坏,是衡量数据库系统的关键指标之一,与计算机系统安全性相互关联。
- 计算机系统安全性:通过各类安全保护措施,保障计算机硬件、软件及数据安全,防止因偶然或恶意因素使系统受损、数据遭篡改或泄露。包含技术安全、管理安全和政策法律三个层面。
(二)安全标准
-
TCSEC/TDI 标准
(美国国防部)
- 目的:为评估计算机系统敏感信息安全操作的可信度提供标准,为制造商设计满足敏感应用安全要求的产品提供指导。
- 安全级别(从低到高):D(最小保护)、C1(自主安全保护)、C2(受控存取保护)、B1(标记安全保护)、B2(结构化保护)、B3(安全域)、A1(验证设计)。
- 评估指标:安全策略(R1)、责任(R2)、保证(R3)、文档(R4)。
-
CC 标准
(通用准则)
- 结构:将信息产品安全要求分为安全功能要求(规范安全行为)和安全保证要求(解决功能实施问题),均采用 “类 - 子类 - 组件” 结构描述。
- 评估保证级(EAL)与 TCSEC 对应关系:EAL2 对应 C1,EAL3 对应 C2,EAL4 对应 B1,EAL5 对应 B2,EAL6 对应 B3,EAL7 对应 A1。
二、数据库安全控制措施
(一)用户标识与鉴别
- 作用:作为系统最外层安全保护,通过验证用户身份(如用户名 / 口令)控制对系统的访问。
(二)存取控制
- 核心机制
- 定义用户权限:明确用户在哪些数据对象上可进行哪些操作(如查询、插入、更新等),并登记到数据字典。
- 合法权限检查:DBMS 根据数据字典中的权限定义,对用户操作请求进行合法性验证,拒绝越权操作。
- 两种控制方式
- 自主存取控制(DAC)
- 特点:用户对不同数据对象有不同权限,可自主将权限授予其他用户,灵活性高。
- 实现方式:通过 SQL 的
GRANT
(授权)和REVOKE
(收回权限)语句实现。 - 权限要素:数据对象(如表、属性列、视图等)和操作类型(如
SELECT
、INSERT
、UPDATE
等)。 - 示例
- 授权:
GRANT SELECT ON Student TO U1;
(授予 U1 查询 Student 表的权限)。 - 收回权限:
REVOKE UPDATE(Sno) ON Student FROM U4;
(收回 U4 修改 Student 表中学号的权限)。
- 授权:
- 强制存取控制(MAC)
- 适用场景:对数据密级分类严格的场景(如军事、金融),由系统自动控制,用户无法直接干预。
- 核心概念
- 主体与客体:主体是活动实体(如用户、进程),客体是被动实体(如数据对象)。
- 敏感度标记:主体的标记为许可证级别,客体的标记为密级(如绝密、机密、公开等)。
- 存取规则
- 读取规则:主体许可证级别≥客体密级,方可读取客体。
- 写入规则:主体许可证级别 = 客体密级,方可写入客体。
- 与 DAC 的关系:二者结合构成 DBMS 安全机制,先进行 DAC 检查,再进行 MAC 检查。
- 自主存取控制(DAC)
(三)视图机制
-
作用:通过定义视图限制用户访问范围,DBA 为不同用户创建特定视图并授权,用户只能操作视图内的数据。
-
示例
CREATE VIEW CS_Student AS SELECT * FROM Student WHERE Sdept='CS'; -- 创建计算机系学生视图 GRANT SELECT ON CS_Student TO 王平; -- 授予王平查询该视图的权限
(四)审计
-
作用:记录用户对数据库的所有操作(如
ALTER
、UPDATE
等),存入审计日志,用于安全追溯、合规检查和监控潜在威胁。 -
特点:需消耗较多时间和空间,通常作为可选功能。
-
示例
AUDIT ALTER,UPDATE ON SC; -- 开启对SC表的ALTER和UPDATE操作审计 NOAUDIT ALL ON SC; -- 关闭对SC表的所有审计
(五)数据加密
- 基本思想:通过算法将明文转换为密文,防止未授权用户获取数据内容。
- 主要方法
- 替换法:用密钥将明文字符转换为密文字符。
- 置换法:重新排列明文字符顺序。
- DES 标准:结合替换法和置换法的官方加密标准。
三、其他安全要点
(一)数据库角色管理
-
角色定义:一组与数据库操作相关的权限集合,可批量管理具有相同权限的用户。
-
操作示例
CREATE ROLE R1; -- 创建角色R1 GRANT SELECT, UPDATE, INSERT ON Student TO R1; -- 为R1授权 GRANT R1 TO 王平, 张明, 赵玲; -- 将角色授予用户
(二)统计数据库安全性
- 问题:用户可能通过合法统计查询间接获取敏感个体数据(如通过两次工资总额查询推断他人工资)。
- 解决原则:确保破坏安全的代价远高于所获利益,如限制查询集合大小、增加干扰数据等。
WITH ADMIN OPTION
是数据库中用于 角色或权限管理 的关键字,主要作用是让被授权者(用户或角色)拥有再授权的能力,即可以将自己拥有的角色或权限进一步授予其他用户或角色。以下是详细说明:
(三)角色授权
-
角色授权场景
当向某个用户授予角色时使用WITH ADMIN OPTION
,该用户不仅拥有该角色的所有权限,还能将这个角色 授予其他用户或角色,甚至可以收回其他用户的该角色权限。
示例:-- 创建角色 R1 CREATE ROLE R1; -- 授予用户 U1 角色 R1,并允许其再授权 GRANT R1 TO U1 WITH ADMIN OPTION;
- U1 获得 R1 角色的所有权限。
- U1 可以执行
GRANT R1 TO U2;
将 R1 授予 U2,或执行REVOKE R1 FROM U2;
收回 U2 的 R1 角色。
-
权限授权场景
在部分数据库(如 Oracle)中,对 系统权限 授权时使用WITH ADMIN OPTION
,允许被授权者将权限再授予他人。
示例(Oracle):-- 授予用户 U1 创建表的权限,并允许其再授权 GRANT CREATE TABLE TO U1 WITH ADMIN OPTION;
- U1 可执行
GRANT CREATE TABLE TO U2;
将权限授予 U2。
- U1 可执行
与 WITH GRANT OPTION 的区别
关键字 | 适用场景 | 授权对象 | 再授权范围 |
---|---|---|---|
WITH ADMIN OPTION | 角色授权或系统权限授权 | 角色或系统权限 | 可授予用户或角色,可递归授权 |
WITH GRANT OPTION | 对象权限授权(如表、视图) | 对象权限(如 SELECT、INSERT、UPDATA) | 只能授予其他用户,不可授予角色 |
示例对比:
- 角色授权:
GRANT R1 TO U1 WITH ADMIN OPTION;
(U1 可将 R1 授予 U2 或 R2)。 - 对象权限授权:
GRANT SELECT ON Table1 TO U1 WITH GRANT OPTION;
(U1 可将 Table1 的查询权限授予 U2,但不能授予角色)。
习题:
解析:
第 1 题
数据库的安全性是指保护数据库以防止不合法的使用所造成的数据泄露、更改或破坏。确保只有授权用户能访问和操作数据库中的数据,维护数据的保密性、完整性和可用性。
第 2 题
- 人为因素:如恶意的黑客攻击,通过 SQL 注入漏洞获取或篡改数据库数据;内部人员越权访问,比如普通员工非法查看敏感财务数据。
- 自然因素:如服务器所在机房遭遇火灾、洪水等自然灾害,可能导致数据库存储设备损坏,数据丢失。
- 系统漏洞:数据库管理系统本身存在安全漏洞,未及时打补丁,被攻击者利用来突破安全防线。
第 3 题
- 用户身份鉴别:通过用户名 - 密码、生物识别(指纹、面部识别等)等方式确认用户身份。
- 存取控制:包括自主存取控制(DAC),用户可根据自己意愿对数据进行授权;强制存取控制(MAC),由系统根据密级等因素统一控制用户对数据的访问。
- 视图机制:为不同用户定义不同视图,限制用户只能看到视图中的数据,间接实现数据安全。
- 审计:对数据库的操作进行记录,便于事后追踪分析,发现非法操作。
- 数据加密:对数据库中的数据加密存储,防止数据在存储或传输过程中被窃取。
第 4 题
- 自主存取控制(DAC):用户对自己拥有的对象(表、视图等)有一定的自主控制权,可根据需要将自己的权限授予其他用户。例如,数据库管理员创建用户 A 后,用户 A 可将自己对某张表的查询权限授予用户 B。这种方式灵活,但安全性相对弱,可能因为用户误操作或被欺骗而导致权限扩散。
- 强制存取控制(MAC):系统为主体(用户、进程等)和客体(数据对象)都定义敏感度标记(如绝密、机密、秘密等)。只有当主体的敏感度标记不低于客体的敏感度标记时,主体才能读取客体;主体的敏感度标记不高于客体的敏感度标记时,主体才能写入客体。这种方式更严格,常用于对安全性要求极高的场景,如军事、金融等领域。
第 5 题
- ①:
GRANT ALL PRIVILEGES ON 学生, 班级
TO U1
WITH GRANT OPTION;
解释:ALL PRIVILEGES
表示所有权限,ON
后跟要授权的表名,TO
指定被授权用户,WITH GRANT OPTION
使 U1 可将权限再授予其他用户。
- ②:
GRANT SELECT, UPDATE(家庭住址) ON 学生
TO U2;
解释:授予 U2 对 “学生” 表的 SELECT
(查看)权限,以及对 “家庭住址” 字段的 UPDATE
(更新)权限 。
- ③:
GRANT SELECT ON 班级
TO PUBLIC;
解释:PUBLIC
代表所有用户,此语句将 “班级” 表的 SELECT
(查看)权限授予所有用户。
- ④:
GRANT SELECT, UPDATE ON 学生
TO R1;
解释:将 “学生” 表的 SELECT
(查询)和 UPDATE
(更新)权限授予角色 R1。
- ⑤:
GRANT R1 TO U1
WITH ADMIN OPTION;
解释:将角色 R1 授予 U1,WITH ADMIN OPTION
使 U1 可将角色 R1 再授予其他角色。
第 6 题
- ①:
GRANT SELECT ON 职工, 部门
TO 王明;
- ②:
GRANT INSERT, DELETE ON 职工, 部门
TO 李勇;
- ③:
-- 先创建视图
CREATE VIEW EmpSelfView AS
SELECT * FROM 职工
WHERE 职工号 = CURRENT_USER; GRANT SELECT ON EmpSelfView
TO ALL;
解释:先创建视图 EmpSelfView
,视图中只包含当前用户(职工)自己的记录,然后将该视图的 SELECT
权限授予所有职工(可理解为每个职工自己 )。
- ④:
GRANT SELECT, UPDATE(工资) ON 职工
TO 刘星;
- ⑤:
GRANT ALTER ON 职工, 部门
TO 张新;
解释:ALTER
权限用于修改表结构,将此权限授予张新。
- ⑥:
GRANT ALL PRIVILEGES ON 职工, 部门
TO 周平
WITH GRANT OPTION;
- ⑦:
-- 创建视图
CREATE VIEW DeptSalaryStatsView AS
SELECT 部门号, MAX(工资) AS max_salary, MIN(工资) AS min_salary, AVG(工资) AS avg_salary
FROM 职工
GROUP BY 部门号; GRANT SELECT ON DeptSalaryStatsView
TO 杨兰;
解释:先创建视图 DeptSalaryStatsView
计算每个部门的最高、最低和平均工资,然后将该视图的 SELECT
权限授予杨兰,这样她看不到具体个人工资。
第 7 题
- ①:
REVOKE SELECT ON 职工, 部门
FROM 王明;
- ②:
REVOKE INSERT, DELETE ON 职工, 部门
FROM 李勇;
- ③:
REVOKE SELECT ON EmpSelfView
FROM ALL;
DROP VIEW EmpSelfView;
- ④:
REVOKE SELECT, UPDATE(工资) ON 职工
FROM 刘星;
- ⑤:
REVOKE ALTER ON 职工, 部门
FROM 张新;
- ⑥:
REVOKE ALL PRIVILEGES ON 职工, 部门
FROM 周平;
- ⑦:
REVOKE SELECT ON DeptSalaryStatsView
FROM 杨兰;
DROP VIEW DeptSalaryStatsView;
第 8 题
- 主体:是指请求访问客体的活动实体,如用户、进程等。主体发起对数据库中数据的访问操作请求。
- 客体:是指被访问的对象,即数据库中的数据,如表、视图、记录等。
- 敏感度标记:对主体和客体都赋予的一种安全属性。用于标识主体的访问权限级别和客体的敏感程度。例如,将数据分为绝密、机密、秘密、公开等不同级别,主体只有具备相应级别或更高级别权限才能访问对应级别的客体。
第 9 题
例如,在一个军事数据库中,定义主体(用户)分为士兵(敏感度标记为 “秘密”)、军官(敏感度标记为 “机密”)、将军(敏感度标记为 “绝密”);客体(数据)中部队人员名单为 “秘密”,作战计划为 “机密”,战略部署为 “绝密”。
- 士兵只能访问部队人员名单(因为其敏感度标记 “秘密” 等于客体 “部队人员名单” 的敏感度标记 ),不能访问作战计划和战略部署。
- 军官可以访问部队人员名单和作战计划(军官的 “机密” 敏感度标记不低于 “秘密” 和 “机密” 级别的客体 ),但不能访问战略部署。
- 将军可以访问所有数据(将军的 “绝密” 敏感度标记不低于其他所有客体的敏感度标记 )。
第 10 题
- 数据库审计功能:是指对数据库的操作进行记录和跟踪,包括操作时间、操作用户、操作类型(如
SELECT
、INSERT
、UPDATE
、DELETE
等)、操作对象(表、视图等)等信息。这些记录存储在审计日志中。 - 提供审计功能的原因:
- 安全追溯:当数据库出现安全问题(如数据被非法篡改、泄露)时,可通过审计日志追溯操作源头,找到违规操作的用户或进程。
- 合规要求:许多行业(如金融、医疗)有严格的数据安全合规规定,审计功能可帮助企业满足监管要求,证明对数据操作的合规性。
- 安全监控:实时或定期查看审计日志,可发现潜在的安全威胁,如异常频繁的访问、未授权的操作尝试等,以便及时采取措施防范。