一,数据库的完整性约束
https://blog.csdn.net/qq_43305922/article/details/90246598(csdn上一篇关于各种完整性的介绍)
数据库的完整性是指数据的正确性和相容性。数据的正确性是指数据是符合现实世界语义、反映当前实际状况的;数据的相容性是指数据库同一对象在不同关系表中的数据是符合逻辑的。
数据的完整性和安全性是两个既有联系又不尽相同的概念。数据的完整性是为了防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据。数据的安全性是保护数据库防止恶意破坏和非法存取。因此,完整性检查和控制的防范对象是不合语义的、不正确的数据,防止它们进入数据库。安全性控制的防范对象是非法用户和非法操作,防止它们对数据库数据的非法存取。
A和R具有默认值。
(1)域完整性(静态完整性)
(2)表完整性/关系完整性(静态完整性)
补充:后期修改约束
(3)断言(每次更新都要检查断言,增加负担,不建议使用)
比如下面例子:
(4)触发器(动态完整性)
例子:
二,数据库的安全性问题
(1)自主安全性
上图的安全性访问规则如下:
下面以一个完整例子帮助加深印象:
上面例子的具体实现方式又可以分为两种方式,一种是存储矩阵,一种是视图
那么具体超级用户(DBA)给等级低的用户授权指令是什么样的形式呢?
(要注意没有限制的话可能时间长了之后不受控)
(2)强制安全性
也就是高级别的用户可以访问低级别的数据对象,但是不能写低级别的数据对象,因为一写,相对应的数据对象的级别就会改变,导致原来能够访问该对象的用户可能无法再次访问,数据库变得不稳定。
那么怎么实现强制性安全性呢?