目录
04 数据库安全性与完整性保护
4.1 数据库的安全性
数据库的安全的定义:
-
要求数据库的用户通过规定的途径访问;
-
按照规定的访问规则使用。
能够适应网络环境下的安全要求级别的数据库称为安全数据库,或可信数据库。
数据库安全的基本概念与内容
-
可信计算基TCB:为实现数据库安全所采用的所有实施策略与机制的集合。它是实施、检查、监督数据库安全的机构
-
表、视图、快照、存储过程、数据文件等:
-
主体指数据库中数据的访问者;客体指数据库中的数据及其载体,如:表、视图、快照、存储过程、数据文件等。
-
与数据库安全有关的所有实体都可以被抽象为主体或客体。由所有主体构成的主体集合与由所有客体构成的客体集合之间存在着一种单向访问关系。
-
数据库安全就是研究有关实体的主/客体划分以及主/客体之间的访问关系的控制。
-
-
身份标识与鉴别:
-
目前存在三种控制方式:身份标识与鉴别,自主访问控制,强制访问控制。
-
常用的控制措施:登录控制(对用户标识符和口令的鉴别,限制重复登录失败次数,限制一天中的访问时间),口令字选取(限制用户选择口令的最小长度/组合,或不可使用已使用过的口令;强制实施口令有效期机制),对鉴别数据的保护,会话连接挂起,用户帐号和属性文件。
-
-
自主访问控制:一种基于存取矩阵的安全控制模型。
-
按照主体、客体和允许的存/取操作构成的一个矩阵。
-
-
DAC的特点:矩阵中的元素可以随意改变,主体可以通过授权/回收操作更改某些权限,适合单机方式下的访问控制
-
-
强制访问控制(MAC):
-
是主体访问客体的一种强制性的安全控制方式,主要用于网络环境,对网络中的数据库安全实体作统一的、强制性的访问管理。
-
阻止低信任级别用户读高敏感度信息,也不允许高敏感度信息写入低敏感度区域。
-
-
数据完整性:防止非法使用插入(insert)、删除(delete)、修改(update)等影响数据完整性的操作。
-
常用的控制手段:实体完整性,关联完整性,用户定义完整性约束
-
-
隐蔽通道:
-
在主体对客体的访问过程中,可通过自主及强制访问控制措施来提供安全保护。
-
公开通道是正规的、接受TCB的(自主/强制)访问控制检查的访问通道;隐蔽通道是非正规的、不受 TCB 控制的访问通道。为保证数据安全性,必须防止隐蔽通道的产生
-
-
数据库安全的形式化模型:用数学形式对数据安全模型的安全策略作形式化描述
-
审计
-
跟踪记录用户对数据的访问操作。如访问时间/访问内容/用户名/终端名/操作类型/操作结果。(由于执行审计操作需要额外的时间和空间开销,因此在DBMS中,‘审计’通常是一个可选择的安全保护手段,主要用于安全性要求较高的部门)
-
-
访问监控器:上述的安全策略须有一个网络中的实体来完成,即访问监控器。
-
TCB是一个抽象的功能/策略集合,而访问监控器则是一个客观存在的实体,是TCB在网络中的实现。
-
数据库的安全标准
-
美国(早期):可信计算机系统评估标准TCSEC :安全级别从低到高分为四类(ABCD)共七级。
-
中国:GB 17859 分为5级(从低到高):用户自主保护级,系统审计保护级,安全标记保护级,结构化保护级,访问验证保护级。
SQL对数据库安全的支持
SQL'92中,提供了对美国标准中级数据库安全的支持。
自主访问控制与授权功能:SQL通过(用户,操作对象,操作权限)这样的三元组来定义用户对于数据的访问权限
-
操作权限有:SELECT权,INSERT权,DELETE权,UPDATE权,REFERENCE权,EXECUTE权,USAGE权
-
操作对象有:表、视图,属性,域(type),UDT(用户定义的数据类型),存储过程/函数,触发器、
-
用户即数据库用户。
授权语句:GRANT ... ON ...
回收语句:REVOKE ... ON ...
4.2 数据库的完整性
数据库的完整性指指数据库中数据的正确性和一致性,包括:
-
正确性:数据的有效性、有意义
-
一致性:在多用户(多程序)并发访问数据库的情况下,保证对数据的更新不会出现与实际不一致的情况
-
完整性保护定义
对数据库中数据的正确性和一致性的维护,包括:
-
执行更新操作时,检查是否违反完整性约束条件,并且在证明其无效后作出适当的反应
-
防止有存取权的合法用户的误操作
-
-
完整性保护的目的
及时发现错误,能够采取措施防止错误的进一步蔓延,将数据库恢复到正确状态
-
完整性保护的实现措施
完整性约束条件的定义及检查;触发器;并发控制技术
数据库完整性保护的功能
-
设置功能:设置系统及用户对数据库完整性的基本要求
-
检查功能:有能力检查数据库中的数据是否有违反约束条件的现象出现
-
处理功能:出现违反约束条件时即时处理
完整性规则的三个内容
-
实体完整性规则:在一个基表的主关键字(主码)中,其属性的取值不能为空值
-
参照完整性规则
一个表中的外键要么为空,要么为引用的表中的主键,不能引用不存在的实体。
-
用户定义的完整性规则
完整性约束的设置、检查与处理
-
完整性约束条件设置
-
属性级的约束(域约束):数据类型的约束,非空值约束,取值范围的约束
-
元组级的约束(表约束):主键定义,候选键(唯一键)定义,外键定义,属性间关系定义
-
全局约束(断言assertion):单个/多个关系间的约束条件
-
-
完整性约束条件的检查:在DBMS内部设置专门的软件检查模块
-
完整性约束条件的处理:
在用户的操作会破坏数据的完整性,系统将拒绝执行/调用相应的函数(一般在外键定义中或触发器中)进行处理。
# 属性级的约束:
{ NOT NULL |
[ CONSTRAINT constraint_name ]
UNIQUE
| PRIMARY KEY
| CHECK ( search_condition )
| REFERENCES table_name [ ( column_name ) ]
[ ON DELETE CASCADE | RESTRICT | SET NULL ]
[ ON UPDATE CASCADE | RESTRICT | SET NULL ] }
# 元组级的约束:
PRIMARY KEY (<column-list>) # 主键定义
UNIQUE( <column-list> ) # 唯一键定义
FOREIGN KEY ( <fk-column-list> ) #外键定义
REFERENCES <table-name> ( <pk-column-list> )
[ ON UPDATE [ RESTRICT | CASCADE | SET NULL ] ]
[ ON DELETE [ RESTRICT | CASCADE | SET NULL ] ]
#例1
CREATE TABLE Student (
sno NUMBER(5)
CONSTRAINT C1 CHECK (sno BETWEEN 90000 AND 99999),
sname VARCHAR (20)
CONSTRAINT C2 NOT NULL,
sage NUMBER(3)
CONSTRAINT C3 CHECK (sage<29) );
#全局约束:断言
#定义断言:
CREATE ASSERTION <name> CHECK( <condition> )
#撤销断言:
DROP ASSERTION <assertion-name-list>
#例:每门课选修人数不超过20
CREATE ASSERTION ass_1 CHECK (
20 <= ALL ( SELECT COUNT(*)
FROM SC
GROUP BY C# )
);
触发器
-
触发器的组成
-
触发事件(由用户定义):
某个完整性约束条件的否定或某种数据操纵事件。如用户登录,数据的增/删/改
-
结果事件:
用以消除触发事件所引起的负面影响的程序。通常是一组由用户书写的SQL命令
-
触发过程:
当DBMS检测到触发事件的发生时,自动调用并执行结果事件的过程
-
-
触发器的定义命令
CREATE TRIGGER trigger_name { BEFORE | AFTER } { INSERT | DELETE | UPDATE [ OF colname { , colname ... } ] } ON table_name [ REFERENCING corr_name_def { , ...... } ] [ FOR EACH ROW | FOR EACH STATEMENT ] [ WHEN ( search_condition ) ] { statement | BEGIN ATOMIC statement; { statement; ... } END #删除触发器 DROP TRIGGER trigger_name; #例: #触发事件:修改或增添教师的工资和职称 #结果事件:在插入新的教师元组或教师的职称晋升为教授时,若教授工资低于1000元,则将其自动转为1000元。 CREATE TRIGGER update_sal BEFORE INSERT or UPDATE(Sal, Pos) ON Teach FOR EACH ROW WHEN (:new.Pos =‘教授’) /*某教师的职称为教授*/ BEGIN IF :new.sal < 1000 THEN :new.sal := 1000; END IF; END;