WEO啦

数据库的安全性与完整性课件

时间:2023-03-20 02:17:55  热度:0°C

1、第七章 数据库的安全性与完整性/7/1 基本概念 数据库的安全性/ 是指保护数据库以防止不合法的使用所造成的数据泄露、更改或破坏。 数据库安全性是一个涵盖许多问题的广阔领域。 安全性的类型: 某些信息的访问关系到法律和***的问题。有些信息可能会认为是属于个人信息,未授权人员不能对其进行访问。 有关政府、机构或公司层次上的政策问题,这些政策确定哪些信息不应该向公众公开。 与系统有关的问题。系统级上应加强哪几类安全功能(如:物理硬件级、OS级、DBMS级) 一些***需要把安全性问题划分为多个安全级别(如:绝密、机密、秘密、公开)。 数据库的完整性/ 是指数据的正确性、有效性和相容性/7/2 数据库

2、安全性控制/在一个多用户数据库系统中,DBMS必须提供相应的技术以保证特定的用户或用户组,只能访问数据库的指定部分,而不能访问数据库的其他部分。 典型的DBMS包含一个数据库安全和授权子系统,由它来负责实现一个数据库的安全性功能以避免发生未授权的访问。 DBMS的安全子系统主要包括两部分: 定义用户权限,并将用户权限登记到数据字典中。 合法权限检查,若用户的操作请求超出了定义的权限,系统将拒绝执行此操作/7/2 数据库安全性控制/安全措施应该一级一级层层设置。 计算机系统的安全模型/DB 数据密 码存储/OS 安全保护/DBMS 存取控制/7/2 数据库安全性控制/数据库安全控制方法 一、用户

3、标识与鉴别 1/ 利用用户自身具备的各种自然特征标识自己和提供鉴别的依据。 2/ 利用用户持有的***。 3/ 利用口令。 口令保密可采用的一些方法: (1)扩大口令集和口令长度。 (2)规定口令的生效时间,定期或不定期地更换口令。 (3)设置多层口令系统。 (4)设置动态口令/7/2 数据库安全性控制/二 、存取控制 1/ 存取控制方法 (1) 自主存取控制(DAC-Discretionary Access Control ) 这种方法是基于授予和收回权限的机制。它已经发展成为关系数据库系统的主要安全机制。这种机制是一种“all-or-nothing”方法,即一个用户要么拥有该特权,要么没有该

4、特权。但是在很多应用中,还需要另外一种安全性策略,这种策略需要在安全性级别的基础上对数据或用户进行分类/7/2 数据库安全性控制/2)强制存取控制(MAC-Mandatory Access Control) 在强制存取控制(MAC)方法中,每一个数据对象被标以一定的密级,每一个用户也被授予某一个级别的许可证。 对于任意一个对象,只有具有合法许可证的用户才可以存取。强制存取控制因此相对比较严格。 MAC适用于对数据有严格而固定密级分类的部门。 主体是指数据库中数据访问者(用户、DBA)、进程、线程等,是系统中的活动实体。 客体是指数据库中数据及其载体(表、视图、索引、存储过程等),是系统中的被动

5、实体/7/2 数据库安全性控制/对于主体和客体,DBMS为它们每个实例(值)指派一 个敏感度标记(Label)。 敏感度标记被分成若干级别,例如绝密、机密、秘密、公开等。 主体的敏感度标记称为许可证级别。 客体的敏感度标记称为密级/客体子集/主体子集/7/2 数据库安全性控制/MAC机制就是通过对比主体的Label和客体的Label,最终确定主体是否能够存取客体。 当某一主体以标记label注册入系统时,系统要求他对任何客体的存取必须遵循如下规则: 仅当主体的许可证级别大于或等于客体的密级时,该主体才能读取相应的客体; 仅当主体的许可证级别等于客体的密级时,该主体才能写相应的客体。 这两种规则

6、的共同点在于它们均禁止了拥有高许可证级别的主体更新低密级的数据对象,从而防止了敏感数据的泄漏/自主访问控制与强制访问控制的比较/自主访问控制 优点:有高度的灵活性,这使得它适用于多个应用领域。 缺点:防范恶意攻击的脆弱性。因为一旦被授权用户访问以后,自主授权模型就不能对如何传播和如何使用信息进行任何的控制了。 强制访问控制 优点:可以保证更高程度的保护,防止了信息的非法流动。适用于需要高度保护的政府、军事等应用。 缺点:过于严格,要求将主体和客体严格地划分到安全级别中,因此仅适用于少数环境/7/2 数据库安全性控制/2/自主存取控制的实现 (1) 用户分类和权限 用户/ 系统用户(DBA)、数

7、据对象属主(owner)、一般用户、公共用户(public)。 权限:包括数据访问权限(读、***、修改、删除等)和数据库模式修改权限(索引、资源、修改、撤消等)两类/7/2 数据库安全性控制/2) 授权 GRANT语句向用户授予操作权限。 一般格式为: GRANT ,|ALL ON TO ,/|PUBLIC WITH GRANT OPTION 语义为:将对指定操作对象的指定操作权限授予指定的用户。 ALL/ 所有权限 PUBLIC/ 公共用户 对不同类型的操作对象有不同的操作权限/可将此权限转授/7/2 数据库安全性控制/例:把查询表SC和修改其学号的权限授给用户 U2和U4。 GRANT S

8、ELECT , UPDATE(Sno) ON TABLE SC TO U2,U4/例:把对表SC的INSERT权限授给用户U5,并允许将此权限再授予其他用户。 GRANT INSERT ON TABLE SC TO U5 WITH GRANT OPTION; U5还可以将此权限授予U6: GRANT INSERT ON TABLE SC TO U6/PUBLIC/全体/U6能不能再 传播此权限/7/2 数据库安全性控制/例/ DBA把在数据库 DB1中建立表的权限授予用户U1。 GRANT CREATETAB ON DATABASE DB1 TO U1/U1隐含权限/3) 收回权限 格式:RE

9、VOKE ,|ALL ON FROM,/|PUBLIC CASCADE|RESTRICT/ CASCADE/ 级联(但系统只收回直接或间接从某处获得的权限) 例:P/214 图7-4/7/2 数据库安全性控制/4) 数据库角色的授权 角色/ 是权限的***。 数据库角色:是一组对数据库进行各种操作的权限的***。 将某一组用户设置为某一角色,他将拥有该角色中的每一个权限。这样只要对角色进行权限设置便可以实现对所有用户权限的设置,大大减少了管理员的工作量,简化了授权的过程。 用户与角色之间存在多对多的联系。 创建角色必须具有create role系统权限/7/2 数据库安全性控制/创建角色: CRE

10、ATE ROLE 将权限授予角色: GRANT , ON TO ,/ 将角色授予用户: GRANT , TO ,/ WITH ADMIN OPTION/可将此权限转授/回收角色的权限: REVOKE, ON FROM/7/2 数据库安全性控制/例7-7 CREATE ROLE C1/ GRANT SELECT/INSERTON TABLE Student TO C1; GRANT C1 TO U1/U2/U3; GRANT UPDATE/DELETE ON TABLE Student TO C1/REVOKE C1 FROM U3/ REVOKE INSERT ON TABLE Student

11、 FROM C1/7/2 数据库安全性控制/三、视图机制 通过视图机制把要保密的数据对无权存取的用户隐藏起来,从而自动地对数据提供一定程度的安全保护。 四、数据加密 是在不安全的环境中维护数据安全性的一种方法。加密技术首先使用某个预定的加密密钥对数据应用加密算法,然后结果数据必须要使用解密密钥进行解密,以恢复原来的数据。 五、审计 审计是对选定的用户动作的监控和记录,以监测可能的不合法行为。 审计常用于: (1)审查可疑的活动。 (2)监视和收集关于数据库活动的数据/7/2 数据库安全性控制/六/ 统计数据库的安全性 统计数据库:用于提供基于各种标准的统计信息和值汇总数据。只允许用户查询***类

12、型信息,不允许查询单个记录信息的数据库。 统计数据库用户:政府统计部门或市场研究公司等。他们被允许访问统计数据库,以检索与人口有关的统计信息,但同时还需要禁止他们访问有关特定个人的详细机密性信息。 统计数据库的安全性必须确保有关个人的信息不能被访问/7/2 数据库安全性控制/在统计DB中存在着特殊的安全问题:即可能有隐蔽的信息通道,使合法的查询导出不合法的信息。 例1/ 查询一:本单位20岁以下的教师有多少? 查询二:本单位20岁以下的教师工资总额是多少? 若一的结果为1,则二为该职工的工资。 解决:限定查询的记录量(查询至少涉及N个以上的记录) 例2/ 查询一:用户A与其他N个职工的工资总额

13、是多少? 查询二:用户B与其他N个职工的工资总额是多少? 假设二的查询结果为Y,一的查询结果为X,A的工资为Z, 则B的工资=Y-(X-Z) 解决:限定查询的次数(规定任意两个查询相交的数据项不能超过M个/7/3 数据库的完整性控制/一、数据库的完整性 数据库的完整性:是指数据的正确性、有效性和相容性。 说明:完整性是为了防止数据库中存在不符合语义的数据,防止错误信息的输入和输出。 数据库完整性约束条件:加在数据库数据之上的语义约束条件。 完整性检查:DBMS中检查数据是否满足完整性条件的机制。 DBMS的完整性控制机制应具有三个方面的功能: (1)定义功能:提供定义完整性约束条件的机制。 (

14、2)检查功能:检查用户发出的操作请求是否违背了完整性约束条件。 (3)防范功能:如果发现用户的操作请求使数据违背了完整性约束条件,采取一定的动作来保证数据的完整性/7/3 数据库的完整性控制/完整性控制的规则: 一条完整性规则可以用一个五元组 (D,O,A,C,P)来表示: (1)D(Data) 约束作用的数据对象。 (2)O(Operation) 触发完整性检查的数据库操作,即当用户发出什么操作请求时需要检查该完整性规则,是立即检查还是延迟检查。 (3)A(Assertion) 数据对象必须满足的断言或语义约束,这是规则的主体。 (4)C(Condition) 选择A作用的数据对象值的谓词。

15、 (5)P(Procedure) 违反完整性规则时触发的过程/7/3 数据库的完整性控制/如/ 在“讲师工资不得低于1000元”的约束中: D 约束作用的对象为工资Sal属性 O ***或修改职工元组时 A Sal不能小于1000 C 职称=讲师 (A仅作用于职称=讲师的记录) P 拒绝执行该操作/7/3 数据库的完整性控制/完整性的语义约束和检查: (1)立即执行约束:检查是否违背完整性约束的时机通常是在一条语句执行完后立即检查。 (2)延迟执行约束:完整性检查延迟到整个事务执行结束后再进行,检查正确方可提交。 (3)在事务的某些特定检查点检查。 (4)在一个维护操作请求之后且执行之前检查。

16、(5)在DBA或审计员发出检查请求时/7/3 数据库的完整性控制/二、完整性约束条件 作用的对象: 关系、元组、列 静态约束:是指数据库每一确定状态时的数据对象所应满足的约束条件,它是反映数据库状态合理性的约束。 动态约束:是指数据库从一种状态转变为另一种状态时,新、旧值之间所应满足的约束条件,它是反映数据库状态变迁的约束/7/3 数据库的完整性控制/1、静态列级约束 是对一个列的取值域的说明: 对数据类型、格式的约束;对取值范围或取值***的约束;对空值的约束等。 2、静态元组约束 是规定元组的各个列之间的约束关系。 例/ 讲师工资不低于1000元/ 3、静态关系约束 在一个关系的各个元组之间

17、或者若干关系之间常常存在各种联系或约束。 常见的静态关系约束有: 实体完整性约束、参照完整性约束、函数依赖约束、统计约束(字段值与关系中多个元组的统计值之间的约束关系。如/经理的工资不得高于本部门职工平均工资的5倍,不得低于本部门职工平均工资的2倍/7/3 数据库的完整性控制/4、动态列级约束 是修改列定义或列值时应满足的约束条件,包括下面两方面: (1)修改列定义时的约束 (2)修改列值时的约束(如:职工工资调整不得低于其原来的工资) 5、动态元组约束 是指修改元组的值时元组中各个字段间需要满足某种约束条件。 如:新工资不得低于原工资+工龄*1/5 6、动态关系约束 是加在关系变化前后状态上

18、的***条件,例如事务一致性、原子性等约束条件/7/3 数据库的完整性控制/三、SQL中的完整性约束 约束分类 列级约束:只能应用在一列上。 表级约束:可以应用在一个表中的多列上。 当约束用于表级时,应按下列形式设置: CONSTRAINT 各种约束形式 例:CREATE TABLE book ( bid int NOT NULL/ -列级约束 bname char(8) NOT NULL/ -列级约束 authorid char(10)/7/3 数据库的完整性控制/1、基本表的约束 (1)主码约束 主码能够惟一地确定表中的每一条记录,主码不能取空值。主码约束可以保证实体的完整性。 格式:PRI

19、MARY KEY () 例:CREATE TABLE book ( bid int PRIMARY KEY/ bname char(8) NOT NULL/ authorid char(10)/7/3 数据库的完整性控制/例:CREATE TABLE sc ( sno char(8)/ cno char(4) / grade int/ CONSTRAINT pk_sc primary key(sno/cno)/7/3 数据库的完整性控制/2)外码约束 外码约束主要用来维护两个表之间数据的一致性,实现表之间的参照完整性。 格式: FOREIGN KEY () REFERENCES () ON D

20、ELETE ON UPDATE /NO ACTION、CASCADE、RESTRICT、SET NULL、SET DEFAULT/7/3 数据库的完整性控制/例:CREATE TABLE authors ( authorid int PRIMARY KEY/ authorname char(20)/ address char(30) ) CREATE TABLE book ( bid int PRIMARY KEY/ bname char(8) NOT NULL/ authorid int/ CONSTRAINT fk_book FOREIGN KEY(authorid) REFERENCES

21、 authors(authorid)/7/3 数据库的完整性控制/假定被参照关系称为父表,参照关系称为子表。 当删除(DELETE)或修改(UPDATE)父表中的某行时,对子表采取的动作可有下列的选择: CASCADE (级联)/ 删除或修改父表中的行并自动删除或修改在子表中匹配的行。 RESTRICT (受限):只有当子表外码中没有与父表要删除或修改的主码相同时,才能删除父表中的行,否则拒绝执行此操作。 SET NULL (置空值):删除或修改父表中的行并将子表中的外码设置为NULL。只有当外码没有被设置成NOT NULL时才有效。 SET DEFAULT (置默认值):删除或修改父表中的行

22、并将子表中的外码设置为指定的默认值。只有外码指定了默认值时才有效。 NOT ACTION:拒绝对父表进行删除或修改/7/3 数据库的完整性控制/3) 惟一约束 惟一约束用于指定一个或多个列的组合值具有惟一性,以防止在列中输入重复的值。 应用场合:每个表中只能有一个主码,因此当表中已经有一个主码时,如果还要保证其他的标识符惟一时,就可以使用惟一性约束。 例:CREATE TABLE student ( sno int PRIMARY KEY/ sname char(8) NOT NULL/ sex char (2)/ cardno char(18) UNIQUE/7/3 数据库的完整性控制/4)

23、检查约束 检查约束对输入列或者整个表中的值设置检查条件,以***输入值。 格式:CHECK () 例:CREATE TABLE student ( sno int PRIMARY KEY/ sname char(8) NOT NULL/ sex char(2), cardno char(18) UNIQUE/ CONSTRAINT chk_sex check (sex in (男/女)/7/3 数据库的完整性控制/5) 默认约束 默认约束指在***操作中没有提供输入值时,系统自动指定值。 例:CREATE TABLE student ( sno int PRIMARY KEY/ sname cha

24、r(8) NOT NULL/ sex char(2) DEFAULT 男 cardno char(18) UNIQUE/ CONSTRAINT chk_sex check (sex in (男/女)/7/3 数据库的完整性控制/2、域约束 CREATE DOMAIN CHECK () 例7/13 CREATE DOMAIN Grade CHAR(1) DEFAULT ? CONSTRAINT Valid_grade CHECK (VALUE IN (A/B/C/D/E/7/3 数据库的完整性控制/3、断言 CHECK子句只对定义它的表起作用,对其它表不起作用。 例7/11 对关系SC的定义加入

25、子句: CHECK (sno IN (SELECT sno FROM Student) CHECK (cno IN (SELECT cno FROM Course) 当对表Student中删除一个元组时,这个操作与关系SC的CHECK无关。 CHECK子句中的条件尽量不要涉及其他关系/7/3 数据库的完整性控制/当约束条件涉及多个表、使用***操作时应使用断言。 格式:CREATE ASSERTION CHECK () 例 7/15 每门课程只允许100个学生选修。 CREATE ASSERTION Asser1 CHECK (ALL(SELECT COUNT(sno) FROM SC GROU

26、P BY cno)=100)/ 例 7/16 不允许计算机学院的学生选修019号课程。 CREATE ASSERTION Asser2 CHECK NOT EXISTS (SELECT * FROM Student/SC WHERE Student/sno=SC/sno AND Student/dept=计算机学院 AND SC/cno=019/7/4 触发器/触发器:是靠事件驱动的特殊过程。 触发器与存储过程的区别: 存储过程通过其他程序的调用来运行,或直接启动运行,可传递参数;而触发器的启动运行必须由一个发生的事件来激发,它是自动隐式运行的,触发器不能接收参数,也不能被调用。 触发器的类型

27、: DML触发器:它是在执行insert、update或delete语句时被激发执行的,它只能定义在表上。 替代触发器:是被激发用以代替执行DML语句,它可以定义在表或视图上。 系统触发器:它是在执行create、alter或drop语句;执行数据库的启动或关闭、用户的登录或退出语句时被激发执行的/7/4 触发器/触发器的主要用途: 审计:可记录登录数据库的用户。将更新数据的用户和时间日期等信息记录在审计表中。 实现复杂的业务规则:如将被删除的用户保存在用户历史信息中;更新股票表只能在上市交易时间内。 可进行系统事件的处理:在表中内容发生变更时,自动通知其他程序采取相应的处理。 增强表的完整性

28、约束:如更新职工的工资时更新后的工资不能低于更新前的工资/7/4 触发器/触发器的组成: 触发事件 触发条件 触发器动作 触发器的一般模型: CREATE TRIGGER BEFORE|AFTER|INSTEAD OF ON REFERENCING OLD AS NEW AS OLD TABLE AS NEW TABLE AS FOR EACH ROW|STATEMENT WHEN/7/4 触发器/INSERT|DELETE|UPDATEOF FOR EACH ROW|STATEMENT/ 指定触发器的粒度。 FOR EACH ROW/ 为行级触发器,当该触发器监视的表中的元组发生改变时,就激

29、活触发器,每变更一行就触发一次。 FOR EACH STATEMENT(默认)/ 为语句级触发器。在被监控表上执行INSERT、DELETE或UPDATE语句,就会激活触发器,而不管该语句的执行会改变多少元组(即使没有改变发生也会激活触发器)。该触发器就在语句执行之前或之后只激发一次。 REFERENCING/ 指向更新前或更新后的内容。 BEFORE|AFTER|INSTEAD OF/ 指定触发器执行的时机/7/4 触发器/在行级触发器中,REFERENCING的格式: REFERENCING OLD AS NEW AS 触发事件 旧行别名 新行别名 insert 无 指定 update 指

30、定 指定 delete 指定 无/7/4 触发器/BEFORE 触发器 (前触发器) 在触发事件之前执行。不允许它们修改数据库,但可以检测WHEN子句中定义的前提条件,接受或终止触发事件。BEFORE触发器的一个典型用途是保持应用指定的数据完整性。 例:有关系 Transcript(sno/cno/semester/grade) CrsLimits(cno/semester/limit) 创建一个触发器,它监控***到Transcript中的元组,以***课程注册的人数。 CREATE TRIGGER CountCheck BEFORE INSERT ON Transcript REFERENCI

31、NG NEW AS N FOR EACH ROW WHEN (SELECT COUNT(T/sno) FROM Transcript T WHERE T/cno=N/cno AND T/semester=N/semester) =(SELECT limit FROM CrsLimits L WHERE L/cno=N/cno AND L/semester=N/semester) ROLLBACK/7/4 触发器/AFTER 触发器 (后触发器) 在触发事件已经改变数据库之后执行。允许它们可以改变数据库,因此它们可以激活其他触发器。AFTER触发器作用于应用逻辑的扩展。 例:有关系 EMP(en

32、o/ename/esex/salary/dno) 创建一个触发器,它监控雇员工资的涨幅不能超过5%。 CREATE TRIGGER LimitSalaryRaise AFTER UPDATE OF salary ON EMP REFERENCING OLD AS O NEW AS N FOR EACH ROW WHEN (N/salary-O/salary0/05*O/salary) UPDATE EMP SET salary=1/05*O/salary WHERE eno=O/eno/7/4 触发器/例7/18 规定修改SC表的grade值时,修改后的值不能低于修改前的值。 CREATE T

33、RIGGER Trig_grade AFTER UPDATE OF grade ON SC REFERENCING OLD AS oldg NEW AS newg FOR EACH ROW WHEN (oldg/gradenewg/grade) UPDATE SC SET grade=oldg/grade WHERE cno=o/触发事件/触发条件/触发器动作/7/4 触发器/例:有关系 EMP(eno/ename/esex/salary/dno) 创建一个触发器,每次工资增长之后将所有雇员新的平均工资记录到LOG表中。 CREATE TRIGGER RecordNewAverage AFTE

34、R UPDATE OF salary ON EMP FOR EACH STATEMENT INSERT INTO LOG VALUES (CURRENT_DATE/ (SELECT AVG(salary) FROM EMP/7/4 触发器/例:有关系:Transcript(sno/cno/semester/grade) Teaching(tno/cno/semester) 有视图:IdleTeaching(cno/semester)/该视图仅包含那些Teaching表中与Transcript表中没有相关元组的课程(既没有学生选修的课程)。 创建一个触发器,当学生放弃或修改选修的课程时,从Tea

35、ching表中删除所有在IdleTeaching中发现的元组。 CREATE TRIGGER MainTainCoursesNonEmpty AFTER DELETE/UPDATE OF cno/semester ON Transcript FOR EACH STATEMENT DELETE FROM Teaching WHERE EXISTS (SELECT * FROM IdleTeaching T WHERE semester=T/semester AND cno=T/cno/7/4 触发器/INSTEAD OF 触发器 (替换触发器) INSTEAD OF触发器最普遍的应用是对视图的维

36、护。视图上的更新事件可以通过触发器监控,但替换更新的是视图的基础表。 例:有关系 EMP(eno/ename/esex/salary/dno) DEPT(dno/dname) 有下面的视图: CREATE VIEW WorksIn(eno/dname) AS SELECT (EMP/eno/DEPT/dname) FROM EMP/DEPT WHERE EMP/dno=DEPT/dno/7/4 触发器/假设在视图上执行下面的操作: DELETE FROM WorksIn WHERE eno=11111111 该操作被转换为该视图基础表EMP和DEPT上相应的操作。但是,可能会有多种转换:可以删

37、除eno为的雇员所在的部门;可以删除雇员;可以将雇员元组中的dno字段置为NULL。 无法自动决定这三种可能性中哪种是正确的。可以设计INSTEAD OF触发器来指定合适的动作。 如: CREATE TRIGGER WorksInTrigi INSTEAD OF DELETE ON WorksIn REFERENCING OLD AS O FOR EACH ROW UPDATE EMP SET dno=NULL WHERE eno=O/eno/SQL Server中触发器的创建/CREATE TRIGGER trigger_name ON table | view WITH ENCRYPTION - 加密文本 FOR | AFTER | INSTEAD OF -触发类型 INSERT / UPDATE -触发事件 AS IF UPDATE ( column ) - 测试在指定列上进行的INSERT或UPDATE操作 AND | OR UPDATE ( column ) n | IF (COLUMNS

温馨提示:
1. WEO啦仅展示《数据库的安全性与完整性课件》的部分公开内容,版权归原著者或相关公司所有。
2. 文档内容来源于互联网免费公开的渠道,若文档所含内容侵犯了您的版权或隐私,请通知我们立即删除。
3. 当前页面地址:https://www.weo.la/doc/ff2c8db043ff945f.html 复制内容请保留相关链接。