文章目录
数据库安全性
计算机安全性
数据库安全性控制
用户标识与鉴别
- 系统提供的最外层安全保护措施
- 系统核对口令以鉴别用户身份
- 常用方法:静态口令鉴别、动态口令鉴别、生物特征鉴别、智能卡鉴别
- 用户名和口令易被窃取
每个用户预先约定好一个计算过程或函数
存取控制
自动存取控制
- 通过SQL的GRANT语句和REVOKE语句实现
- 用户权限有两个要素组成:数据库对象和操作类型——定义用户存取权限:定义用户可以在哪些数据库对象上执行哪些操作——定义存取权限称为授权(authorization)
- 存取控制的对象不仅有数据本身,还有数据库模式
授权与回收
数据库角色
- 角色的创建 CREATE ROLE <角色名>
- 给角色授权
- 将一个角色授予其他的角色或用户
- 角色权限的收回
强制存取控制方法
自主存取的缺点:
关于规则2的解释:本质上是为了保证数据只能从低级流向高级
- 强制存取控制是对数据本身进行密级标记,无论数据如何复制,标记与数据是一个不可分割的整体,只有符合密级标记要求的用户才可以操纵数据,从而提高了更高级别的安全性
- 用户不能直接感知或控制
MAC与DAC的关系
视图机制
审计(Audit)
- AUDIT语句:设置审计功能
- NOAUDIT语句:取消审计功能
数据加密
统计数据库安全性
- 推理控制、隐蔽信道、数据隐私
- 数据库安全机制的设计目标:试图破坏安全的人所花费的代加>>得到的利益
数据库完整性
- 提供定义完整性约束条件机制
- 提供完整性检查的方法
- 违约处理
完整性机制的实施会影响系统性能。
实体完整性
实体完整性定义
- PRIMARY KEY的表级定义和列级定义
实体完整性检查和违约处理
检查主码值的方法:全表扫描;建立索引
参照完整性
参照完整性定义
参照完整性检查和违约处理
- 拒绝(NO ACTION)执行——默认策略
- 级联(CASCADE)操作
- 设置为空值(SET-NULL)——对于参照完整性,除了定义外码,还应该定义外码列是否允许空值
用户定义的完整性
属性上的约束条件的定义
- 列值非空(NOT NULL)
- 列值唯一(UNIQUE)
- 检查列值是否满足一个布尔表达式(CHECK)
属性上的约束条件检查和违约处理
拒绝执行
元组上的约束条件的定义
元组上的约束条件检查和违约处理
拒绝执行
完整性约束命名子句
断言
- 创建断言CREATE ASSERTION <断言名> <CHECK 子句>
每个断言被赋予一个名字,<CHECK 子句>中的约束条件与WHERE子句的条件表达式类似 - 任何使断言不为真值的操作都会被拒绝
- 删除断言DROP ASSERTION <断言名>
触发器
定义触发器
- 只有表的拥有者,即创建表的用户才可以在表上创建触发器
- 触发器只能定义在表上,不能定义在视图上
- AFTER/BEFORE是触发的时机
- 行级触发器(FOR EACH ROW)和语句级触发器(FOR EACH STATEMENT);前者执行行次数,后者执行一次
- 触发动作体:NEW和OLD
激活触发器
同一个表上的多个BEFORE(AFTER)触发器,遵循“谁先创建谁先执行”的原则,或者按触发器名称的字母排序顺序执行。
最坏情况导致一个触发链
删除触发器
复习所用,侵删