数据库安全性与完整性 - 软考备战(三十三)
数据库系统五参考资料数据库安全性与完整性数据库完整性.pdf数据库安全性与完整性核心考点纵向拆解知识体系与实战应用梳理-51CTO软考-软考在线教育培训5.5 数据库安全性与完整性1. 完整性核心目标防止不合语义的“脏数据”进入数据库.完整性是 DBMS 主动把关保证数据对现实世界的语义是正确的。实体完整性针对主码 Primary Key规则主码不能取空值NULL且不能有重复值。违约处理如果插入或修改导致主码为空或重复DBMS 直接拒绝执行。参照完整性针对外码 Foreign Key规则外码的值要么全是空值表示尚未分配或无关联要么必须是另一个关系主码的有效值。违约场景与处理策略当对被引用表父表进行操作可能破坏参照完整性时DBMS 提供了以下处理方式供设计者选择拒绝执行NO ACTION / RESTRICT最严格直接报错不许删/改。级联操作CASCADE父表删了/改了子表里对应的外码行自动跟着删/改。如删除部门该部门所有员工自动删除。设为空值SET NULL父表删了/改了子表里对应的外码值自动变成 NULL。前提该外码列允许为空。注意如果是子表引用表自己乱插入一个不存在的外码值DBMS 没二话直接拒绝执行没有级联一说。用户定义完整性针对普通列 Check / Not Null / Unique规则如 CHECK (年龄 BETWEEN 15 AND 30)NOT NULL。违约处理不符合条件拒绝执行。触发器本质一种特殊的存储过程不能被手动调用只能由事件自动触发。触发事件与时机事件INSERT、UPDATE、DELETE。时机BEFORE在操作执行前触发常用于数据预处理或复杂校验、AFTER在操作执行后触发常用于级联修改或记录日志。为什么需要触发器前面的 Check 约束只能限制“本行、当前列”的静态数据。如果要实现“修改员工工资时不能超过其历史最高工资”需要查历史表CHECK 做不到必须用触发器。2. 安全性核心目标防止非法用户访问或越权操作数据库。安全性是层层设防的体系从外到内越来越底层。第一层用户标识与鉴别进门查验身份最外层防线。通过用户名/密码、指纹、动态口令卡确认“你是谁”。第二层存取控制进门后看菜单决定你能干啥自主存取控制DAC最常用。用户对 自己创建的表/对象 拥有“全权”可以自己决定把权限发给谁。这就是关系数据库标准语言SQL- 软考备战三十一-CSDN博客GRANT 和 REVOKE。强制存取控制MAC用于极高安全级别的系统如军方、银行核心库。机制给每个用户发一个“许可证级别”如绝密、机密、秘密给每个数据标一个“密级”。规则只有两条用户只能“读”密级小于等于自己许可证的数据。不能看高于自己级别的用户只能“写”密级大于等于自己许可证的数据。防止高密级用户把高密数据写到低密级文档里泄密第三层视图机制物理隔离防偷窥通过建立视图把底层的基表隐藏起来。应用把没有权限的列屏蔽掉如给财务看不含基本工资的视图或者把跨部门的数据过滤掉。视图让用户“看不到”他不该看的东西。第四层审计—— 专抓内鬼当前面三道防线被突破比如合法用户恶意删库审计是最后的追责手段。机制DBMS 专门开一个“审计日志表”记录谁、在什么时间、在哪个终端、对什么对象、执行了什么SQL、成功还是失败。代价极其耗费磁盘空间和时间通常只对敏感操作如修改金额、删除数据开启审计。第五层数据加密物理层兜底即使黑客直接把硬盘偷走或者绕过了 DBMS 直接读取物理文件看到的也是乱码。分为存储加密磁盘上的文件加密、传输加密网线里跑的数据加密如 SSL/TLS。