数据库理论(三)——完整性约束及触发器
数据库理论(三)——完整性约束,触发器和数据库安全
关系模型的实体完整性
码
实体完整性的定义:primary key(主码)
约束:
1. 列级约束,在定义好属性后进行约束,只对单个属性,**约束方式**:主键,外键,唯一,检查,默认,非空
2. 表级约束,对多个属性进行约束,通常在定义好属性之后编写,**联合主码**通常使用的是表级约束,**约束方式**:主键,外键,唯一,检查
对应sql语句
1 | create table 表名( |
可以使用alter table
的方式对带有名字的约束进行修改
举个例子
1 | -- 假设student表中有一个约束叫做c1 |
定义域(感觉用得少)
1 | -- 建立一个性别域,并声明性别域的取值范围 |
触发器
定义方式:
1 | create trigger 触发器名称 |
数据库安全之强制存取控制
强制存取控制(Mandatory Access Control,MAC)
数据库对象标记为密级
对用户授予某个级别的许可证
通过用户许可证与数据库对象的密级的对应规则来决定访问权
用户的敏感度标记称为许可证级别
数据库对象的敏感度标记称为密级
敏感度标记:绝密(Top Secret)/ 机密(Secret)/ 可信(Confidential)/ 公开(Public)
强制存储规则
- 当主体的许可证级别<=客体的密级时 主体能写客体
- 当主体的许可证级别>=客体的密级时 主体能读客体
举个例子,在公司上班
第一个规则,对于员工的工作日志,员工与其同级所以可以进行读写,当领导要求员工在自己的领导笔记中记录自己的工作,这是可行的,但是员工是不能读领导的笔记的,因为里面有公司机密
第二个规则,对于领导的工作日志,领导与其领导笔记同级,可以进行读写,当领导想要阅读员工的工作笔记时,自然也是可以的,但是领导不能将自己的工作内容写在员工的笔记上,因为领导的工作内容是公司机密
数据库中的存取控制对象
权限控制的sql语句
1 | -- 带有中括号的内容是可选项,权限的地方可以写 all priviliges 表示提供所有权限 |
视图作为数据库对象的一个客体,可以从其他表中抽取部分数据,然后展示出来,可以在该视图上对用户h授权避免用户查看过多的信息内容。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ZeroRains Blog!