SQL语言与数据库完整性和安全性

课程链接

哈工大 数据库系统(上):模型与语言

数据库完整性概念及分类

数据库完整性

  • 数据库完整性(DB Integrity)是指DBMS应保证的DB的一种特性——在任何情况下的正确性、有效性和一致性
  • 关系模型的完整性要求:实体完整性参照完整性用户自定义完整性
  • 数据库完整性管理的作用
    • 防止和避免数据库中不合理数据的出现
    • DBMS应尽可能地自动防止DB中语义不合理现象
  • DBMS怎样自动保证完整性
    • DBMS允许用户定义一些完整性约束规则(用SQL-DDL来定义)
    • 当有DB更新操作时,DBMS自动按照完整性约束条件进行检查,以确保更新操作符合语义完整性
  • 完整性约束条件
    • I n t e g r i t y C o n s t r a i n t : : = ( O , P , A , R ) Integrity Constraint::= ( O,P,A,R) IntegrityConstraint::=(OPAR)
    • O:数据集合,约束的对象,如列、元组、元组集合
    • P:谓词条件,即什么样的约束
    • A:触发条件,即什么时候检查
    • R:响应动作,即不满足时怎么办

数据库完整性分类

  • 按约束对象
    • 域完整性约束条件:对列的约束
    • 关系完整性约束条件:对元组的约束
  • 按约束来源分类
    • 结构约束(来自模型的约束)
      • 函数依赖约束
      • 主键约束(实体完整性)
      • 外键约束(参照完整性)
      • 是否允许空值
    • 内容约束 (来自用户的约束)
      • 用户自定义完整性约束
      • 元组或属性的取值范围
  • 按约束状态分类
    • 静态约束:要求DB在任一时候均应满足的约束
    • 动态约束:要求DB从一状态变为另一状态时应满足的约束

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

Create Table

  • Create Table有三种功能:定义关系模式、定义完整性约束和定义物理存储特性
  • Create Table语法
CREATE TABLE tablename
( ( colname datatype [ DEFAULT { default_constant | NULL} ]
[ col_constr {col_constr. . .} ]
| , table_constr
{, { colname datatype [DEFAULT { default_constant | NULL} ]
[col_constr {col_constr. . .} ]
| , table_constr }
. . . } );
  • 列约束

在这里插入图片描述

示例:

Create Table Student 
( 	S# char(8) not null unique, 
	Sname char(10), 
	Ssex char(2) constraint ctssex check (Ssex=‘男’ or 
	Ssex=‘女’), 
	Sage integer check (Sage>=1 and Sage<150), 
	D# char(2) references Dept(D#) on delete cascade, 
	Sclass char(6) );
  • 表约束

在这里插入图片描述

示例:

Create Table Course 
( C# char(3) , 
Cname char(12), 
Chours integer, 
Credit float(1) constraint ctcredit check (Credit >=0.0 and Credit<=5.0), 
T# char(3) references Teacher(T#) on delete cascade, 
primary key(C#),
constraint ctcc check(Chours/Credit = 20) );
  • 追加或撤销约束

在这里插入图片描述

断言ASSERTION

  • 语法:

CREATE ASSERTION <assertion-name> CHECK <predicate>

  • 当一个断言创建后,系统将检测其有效性,并在每一次更新中测试更新是否违反该断言
  • 断言测试增加了数据库维护的负担,要小心使用复杂的断言
  • 示例:每笔贷款,要求至少一位借款者账户中存有最低数目的余额,例如1000元

在这里插入图片描述

create assertion balance_constraint check
(not exists (
select * from loan 
where not exists ( 
select * from borrower, depositor, account
where loan.loan_number = borrower.loan_number
and borrower.customer_name = depositor.customer_name
and depositor.account_number = account.account_number
and account.balance >= 1000)))

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

触发器Trigger

  • Trigger是一种过程完整性约束(相比之下,Create Table中定义的都是非过程性约束),是一段程序,该程序可以在特定的时刻被自动触发执行,比如在一次更新操作之前执行,或在更新操作之后执行

  • 语法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 示例:设计一个触发器当进行Teacher表更新元组时, 使其工资只能升不能降
create trigger teacher_chgsal before update of salary on teacher
referencing new x, old y
for each row when (x.salary < y.salary)
begin
raise_application_error(-20003, 'invalid salary on update'); 
//此条语句为Oracle的错误处理函数
end;

数据库安全性

数据库安全性的概念

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

  • DBMS的安全机制
    • 自主安全性机制:存取控制(AccessControl):通过权限在用户之间的传递,使用户自主管理数据库安全性
    • 强制安全性机制:通过对数据和用户强制分类,使得不同类别用户能够访问不同类别的数据
    • 推断控制机制
      • 防止通过历史信息,推断出不该被其知道的信息
      • 防止通过公开信息(通常是一些聚集信息)推断出私密信息(个体信息)
    • 数据加密存储机制

数据库自主安全性机制

  • 自主安全性机制

    • 通常情况下,自主安全性是通过授权机制来实现的
    • 用户在使用数据库前必须由DBA处获得一个账户,并由DBA授予该账户定的权限,该账户的用户依据其所拥有的权限对数据库进行操作; 同时,该帐户用户也可将其所拥有的权利转授给其他的用户(账户),由此实现权限在用户之间的传播和控制
  • 数据库自主安全性访问规则

    • DBMS将权利和用户(账户)结合在一起,形成一个访问规则表,依据该规则表可以实现对数据库的安全性控制
    • 访问规则: A c c e s s R u l e : : = ( S , O , t , P ) AccessRule ::= ( S, O, t, P) AccessRule::=(S,O,t,P)
      • S: 请求主体(用户)
      • O: 访问对象,即属性/字段、记录/元组、关系、数据库
      • t: 访问权利,即创建、增、删、改、查
      • P: 谓词,即拥有权利需满足的条件
  • 自主安全性的实现方式

    • 存储矩阵

    在这里插入图片描述

    • 视图

数据库强制安全性机制

  • 强制安全性通过对数据对象进行安全性分级,同时对用户也进行上述的安全性分级,从而强制实现不同级别用户访问不同级别数据的一种机制

  • 访问规则
    • 用户S, 不能读取数据对象O, 除非Level(S)>=Level(O)
    • 用户S, 不能写数据对象, 除非Level(S)<=Level(O)(因为高级别的用户写了之后,低级别的用户就没有了访问权限)

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

  • 数据库安全性控制是属于DCL范畴

  • SQL语句对应权限(级别高的权利自动包含级别低的权利)

    • 级别1:Select : 读
    • 级别2:更新
      • Insert
      • Update
      • Delete
    • 级别3:创建
      • Create
      • Alter
      • Drop
  • SQL-DCL的命令及其应用

    • 授权命令

    在这里插入图片描述
    示例 > 在这里插入图片描述

    • 收回授权命令

    在这里插入图片描述

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值