数据库的安全性

指保护数据库以防止不合法的使用所造成的数据泄露、更改或破坏。

实现数据库系统安全性的主要技术和方法:

  • 用户标识与识别
  • 自主存取控制DAC:通过授权,控制对敏感数据的存取
  • 强制存取控制MAC:对数据进行密级标注,符合密级要求的用户才可操纵数据。
  • 视图 :通过对不同用户定义不同视图,可以把要保密的数据对无权访问用户隐藏
  • 审计:把用户对数据库的操作存入审计日志,便于重现。
  • 数据加密

数据库存取控制机制:

确保访问数据库的权限只授给有资格的用户,且未授权用户无法接近数据。

包括两部分:

  1. 定义用户权限
  2. 合法权限检查

自主存取控制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

对数据本身进行密级标识,无论数据怎么复制,数据与标识都不可分。

全部实体分为两类

  1. 主体。如实际用户,各进程
  2. 客体。如文件,表等

两大规则

  1. 仅当主体许可证级别≥客体密级时,主体才能 读 相应客体
  2. 仅当主体许可证级别≤客体密级时,主体才能 写 相应客体

 

视图

 从一或多个表或视图导出的表是一个虚表。

  • 建立信息系学生的视图,并要求在进行其它操作时该视图里仍只有信息系

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删除。

审计

即将用户对数据库的所有操作记录下来自动存在审计日志。

分为:

  1. 用户级审计:所有用户可设置
  2. 系统级审计:仅管理员可设置
  • 对表sc的修改表结构和修改表数据进行审计

audit alter,update on sc

取消对sc表一切审计

noaudit alter,update on sc

数据加密

  1. 存储加密
  2. 传输加密
07-23 14:09