数据库的安全性
指保护数据库以防止不合法的使用所造成的数据泄露、更改或破坏。
实现数据库系统安全性的主要技术和方法:
- 用户标识与识别
- 自主存取控制DAC:通过授权,控制对敏感数据的存取
- 强制存取控制MAC:对数据进行密级标注,符合密级要求的用户才可操纵数据。
- 视图 :通过对不同用户定义不同视图,可以把要保密的数据对无权访问用户隐藏
- 审计:把用户对数据库的操作存入审计日志,便于重现。
- 数据加密
数据库存取控制机制:
确保访问数据库的权限只授给有资格的用户,且未授权用户无法接近数据。
包括两部分:
- 定义用户权限
- 合法权限检查
自主存取控制DAC
通过sql grant,revoke语句实现
创建登陆名
create login mylogin with password='123'
授权
1、Grant
授权grant 加上with grant option 则授权可以传播给下一个用户(但不能循环授权回来!)。否则不能传播。
注意:授权修改操作时要指定授权的列,如update(sno)
- 把查询Student表的权限授给用户UI/给所有用户
grant select on table Student to UI/public
- 把查询Student表和修改学生学号的权限授予用户UI
grant update(Sno),select on table Student to UI
- 把对student表和sc表的所有权限授权U1,U2
grant all privileges on table student,sc to U1,U2
2、撤销Revoke
- 把用户U5修改student表学号的权限收回
revoke update(sno) on student from U5 (cascade)
如果U5将该权限传播了,则得用联级撤销。
3、创建模式权限
对创建模式权限的授权在管理员创建用户时实现
角色
用数据库角色(一组与数据库操作有关的权限的集合)简便授权过程:
①创建角色
create role r
②为角色授权
grant insert,select,update on table student to r
③将角色授予用户小明,小红
grant r to 小明,小红
④一次性收回小明的这三个权限
revoke r from 小明
强制存取控制MAC
对数据本身进行密级标识,无论数据怎么复制,数据与标识都不可分。
全部实体分为两类
- 主体。如实际用户,各进程
- 客体。如文件,表等
两大规则
- 仅当主体许可证级别≥客体密级时,主体才能 读 相应客体
- 仅当主体许可证级别≤客体密级时,主体才能 写 相应客体
视图
从一或多个表或视图导出的表是一个虚表。
- 建立信息系学生的视图,并要求在进行其它操作时该视图里仍只有信息系
create view IS_STUDENT as select Sno,Snsme,Sdept from Student whete Sdept='IS' with check option;
执行这个语句时只是将视图的定义存入数据字典,并不会执行select语句,只有在查询视图时才会从基本表中查出列。带 则会强制要求在对视图进行修改操作时是满足定义时select中的条件。(如插入时会自动加上)
视图消解:对视图操作时,会先检查视图、表是否存在;然后将对视图的操作转换成相应的对基本表的操作。所以有些视图的有些属性不能更新,如平均分,基本表中没有。
- 将学生的学号及平均成绩定义为一个视图 带虚拟机列的视图
create view Stu_Grade(Sno,Gavg) as select sno,avg(Grade) from SC group by sno;
删除视图
drop view IS_S1 cascade
加上cascade表示级联删除,即把由该视图导出的视图全都删除,否则如果有导出的视图则直接删除不了。注意:删除基本表后,视图在字典中并未被删除,得显示drop删除。
审计
即将用户对数据库的所有操作记录下来自动存在审计日志。
分为:
- 用户级审计:所有用户可设置
- 系统级审计:仅管理员可设置
- 对表sc的修改表结构和修改表数据进行审计
audit alter,update on sc
取消对sc表一切审计
noaudit alter,update on sc
数据加密
- 存储加密
- 传输加密