【数据库系统】第八讲 SQL语言与数据库完整性和安全性

8.1 数据库完整性的概念及分类

1、数据库完整性的概念

数据库完整性是指DBMS应保证DB的一种特性——在任何情况下的正确性、有效性和一致性
广义完整性:语义完整性、并发控制、安全控制、DB故障恢复等
狭义完整性:专指语义完整性,DBMS通常有专门的完整性管理机制与程序来处理语义完整性问题
关系模型中有完整性要求:

  • 实体完整性
  • 参照完整性
  • 用户自定义完整性

2、引发完整性问题的因素

不正当的数据库操作,如输入错误、操作失误、程序处理失误等
数据完整性管理的作用:防止和避免数据库中不合理数据的出现;DBMS应尽可能地防止DB中语义不合理现象;如DBMS不能自动防止,则需要应用程序员和用户在进行数据库操作时处处加以小心,每写一条SQL语句都要考虑是否符合语义完整性,这种工作负担是非常沉重的,因此应尽可能多地让DBMS来承担。

3、保证数据库完整性的方法

  • DBMS允许用户定义一些完整性约束规则(用SQL-DDL来定义)
  • 当有DB更新操作时,DBMS自动按照完整性约束进行检测,以确保更新操作符合语义完整性

    完整性约束条件(或成完整性约束规则)的一般形式
    Integrity Constraint ::=(O, P, A, R)
    O:数据集合
    P:谓词条件
    A:触发条件
    R:响应动作

4、数据库完整性的分类

(1)按约束对象分类

约束结构:来自于模型的约束,例如函数依赖约束、主键约束(实体完整性)、外键约束(参照完整性),只关心数值相等与否、是否允许控制等
内容约束:来自于用户的约束,如用户自定义完整性,关心元组或属性的取值范围。

(2)按约束状态分类

静态约束:要求DB在任意时候均应满足的约束
动态约束:要求DB从一状态变为另一状态时应满足的约束

8.2 利用SQL语言实现数据库的静态完整性

(1)SQL语言支持的约束类别

静态约束:

  • 列完整性——域完整性约束
  • 表完整性——关系完整性约束

动态约束:触发器

(2)SQL语言实现约束的方法——Create Table

Create Table:定义关系模式、定义完整约束和定义物理存储特性
定义完整性约束条件:列完整性、表完整性

Col_constr列约束是一种域约束类型,对但一列的值进行约束

引用另一表tablename的列colname的值,如有ON DELETE CASCADE 或ON DELETE SET NULL语句,则删除被引用表的某列值v 时,要将本表该列值为v 的记录删除或列值更新为 null;缺省为无操作。
Col_constr列约束:只能应用在单一列上,其后面的约束如UNIQUE, PRIMARY KEY及search_cond只能是单一列唯一、单一列为主键、和单一列相关







(3)SQL语言实现约束的方法-断言

一个断言就是一个谓词表达式,它表达了希望数据库总能满足的条件
表约束和列约束就是一些特殊的断言
SQL还提供了复杂条件的断言,其语法为
CREATE ASSERTION < assertion-name > CHECK< predicate >
当一个断言创建后,系统将检测其有效性,并在每一次更新中测试更新是否违反该断言。

8.3 利用SQL语言实现数据库的动态完整性

1、SQL语言支持的约束类别

静态约束:列完整性,表完整性
动态约束:触发器

2、实现数据库动态完整的方法—触发器Trigger

CreateTable中的表约束和列约束基本上都是静态的约束,也基本上都是对单一列或单一元组的约束(尽管有参照完整性),为实现动态约束以及多个元组之间的完整性约束,就需要触发器技术Trigger
Trigger是一种过程完整性约束(相比之下,Create Table中定义的都是非过程性约束),是一段程序,该程序可以在特定的时刻被自动触发执行,比如在一次更新操作之前执行,或在更新操作之后执行。

触发器Trigger意义:当某一事件发生时(Before|After),对该事件产生的结果(或是每一元组,或是整个操作的所有元组), 检查条件search_condition,如果满足条件,则执行后面的程序段。条件或程序段中引用的变量可用 corr_name_def来限定。




小结

8.4 数据库安全性的概念及分类

(1)数据库安全

数据库安全性是指DBMS应该保证的数据库的一种特性(机制或手段):免受非法、非授权用户的使用、泄漏、更改或破坏

(2)数据库安全性的分类

(3)数据库管理员的责任和义务

8.5 数据库自主安全性机制

(1)数据库自主安全性

(2)DBMS怎样实现数据库自主安全性


(3)一个自主安全性控制的例子


(4)自主安全性的实现方式


8.6 利用SQL语言实现数据库自主安全性

(1)SQL语言的用户与权利

(2)SQL-DCL的命令及其应用

(3)SQL-DCL的控制安全性示例


8.7 安全性控制的其他简介

(1)自主安全性的授权过程及其问题



(2)强制安全性



小结

发布了75 篇原创文章 · 获赞 28 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/Swocky/article/details/104767469