第四章 数据库安全性
4.1计算机安全性概论
数据库的安全性:是指保护数据库,防止因用户非法使用数据库造成数据泄漏、更改或破坏。
计算机系统安全性能:是指为计算机系统建立的各种保护措施,以保护计算机系统中的硬件、软件及数据,防止其因偶然或者恶意的原因使系统遭到破坏,数据遭到更改或者泄漏。
4.2数据库安全性控制
计算机系统中的安全模型
用户标识和鉴定->数据库安全保护->操作系统安全保护-》数据加密存储
常用的方法:
- 用户标识和鉴定
- 存取控制
- 视图
- 审计
- 加密存储
4.2.1用户标识与鉴别(系统最外层安全保护措施)
- 系统提供一定的方式让用户标识自己的名字和身份;
- 系统内部记录者所有合法用户的标识;
- 每次用户要求进入系统时,由系统核对用户提供的身份标识。
- 通过验证后才提供机器使用权。
- 用户表示和鉴定可以重复多次。
4.2.2存取控制
存储控制机制的组成:
-定义存取权限-》用户只能访问他有权存取的数据,必须预先对每个用户定义存取权限。
-检查存取权限-》鉴定合法用户的权限,并根据他的存取权限去对他的各种操作请求进行控制。
以上的用户定义和合法权检查共同构成了DBMS的安全子系统。
常见的控制方法(此处内容跟PPT编号有调整,所以编号顺序进行不正确)
- 自主存取控制(DAC)(C2相对灵活)
- 同一用户对于不同的数据对象有不同的存取权限
- 不同的用户对同一对象也有不同的权限
- 用户还可将其拥有的存取权限转授给其他用户
- 强制存取控制(MAC)(B1相对严格)
- 每一个数据对象被标以一定的密级
- 每一个用户也被授予某一哦哥级别的许可证
- 对于任意一个对象,很自由具有合法许可证的用户才可以存取
关于强制存取控制方法
1.系统为保证更高程度的安全性,所采取的强制存取检查手段。
2.主体与客体:
- 主体是系统中的活动实体:DBMS所管理的实际用户、代表用户的个进程。
- 客体是系统中的被动实体:是受主体操纵的:文件、基表、索引、视图。
3.敏感性标记
敏感度标记分成四个级别 1.公开 2.可信 3.机密 4.绝密
主体的敏感度标记为许可证级别
客体的敏感度标记称为密级
仅当主体的许可证级别大于或等于客体的密级时,该主体才能读取相应的体;
仅当主体的许可证级别小于或等于客体的密级时,该主体才能写相应的客体。注意:此处用户可以写入比自己级别高的数据,但是一旦写入用户自己就不能再去读该数据对象了。
注意:禁止了拥有高级别许可证的主体更新低级别的数据对象,从而防止了敏感数据的泄漏。
自主存取控制方法:
- 定义存取权限
- 存取权限由两个要素组成:数据对象和操作类型。
- 关系系统中存取权限的类型
4.2.4授权与收回
grant语句的一般格式
grant<权限>[,<权限>]···权限>权限>
on<对象类型><对象名>[,<对象类型><对象名>]···对象名>对象类型>对象名>对象类型>
to<用户>[,<用户>]···用户>用户>
[with GRANT OPTION](允许用户转授权(权限转播),但是不允许循环)
格式一:
GRANT CREATE TABLE
TO {用户名,···|PUBLIC}
[with grant option]
//授予用户建立表的权限
//由DBA授权,只有CREATE TABLE 一种权限
//with grant option允许用户转授权
//public表示所有用户
//举例
grant creat table to paul;
格式二:
grant {select|insert|update|delete|all privileges}
on 表名|视图名
to {用户名,···|public}
[with grant. option]
//授予用户对表/视图的操作权限
//举例一
grant select,insert
on S
to paul,mary
with grant option
//举例二
grant all privileges
on S
to paul,mary
with grant option
格式三:
grant {select|insert|update|delete|all privileges}(列名···)
on{表名|视图名}
to{用户名,···|public}
[with grant option]
//授予用户对列的操作权限
//举例
//把查询S表和修改学号的授权给用户U4
GRANT UPDATE(Sno),select to U4
//把查询S表和修改学号的授权给所有用户
GRANT UPDATE(Sno),select to public
4.2.4.2收回授权(revoke)
格式:
//与上面三种正好相对
//格式一:
revoke create table
on 数据库名
from {用户名,···|PUBLIC};
//格式二:
revoke {select|insert|update|delete|all privileges}
on {用户名,···|PUBLIC}
from {用户名,···|public};
//格式三:
revoke {权限列表}(列名,···)
on {表名|视图名}
from{用户名,···|public}
//举例一:
revoke update(Sno)
on S
from paul
//举例二:
revoke select
on S
from PUBLIC
//举例三
revoke insert
on SC
from mary
4.2.4.3创建数据库模式的权限
对创建数据库模式一类的数据库对象的授权由数据库管理员在创建用户时实现。
create user语句的一般格式
create user <username>
[with] [DBA|resource|connect];
只有系统的超级用户才有权创建一个新的数据库用户
DBA是超级用户;
resource不能创建模式、新用户,可以创建基本表和视图;
connect只能登陆数据库;
4.2.5数据库角色
数据库角色:是被命名的一组与数据库擦欧总相关的权限的集合。可以为一组具有权限的用户创建一个角色。使用角色来管理数据库存取权限可以简化授权过程。
- 角色的创建
create role <角色名>角色名>
- 给角色授权
grant <权限>[,<权限>···]权限>权限>
on<对象类型><对象名>对象名>对象类型>
to<角色>[,<角色>···]角色>角色>
- 将一个角色授予其他的角色或用户
grant <角色1>[,<角色2>···]角色2>角色1>
to <用户1>[,<用户2>]用户2>用户1>
[with admin option]
- 角色权限的收回
revoke <权限>[,<权限>···]权限>权限>
on <对象类型><对象名>对象名>对象类型>
from <角色>[,<角色>···]角色>角色>
//1.创建一个角色R1
create role R1;
//2.授予角色R1对表S的select、update、insert权限
grant select,update,insert
on S
to R1;
//3.将这个角色授予王平
GRANT R1
to 王平;
//4.一次性地通过R1收回王平的3个权限
revoke R1
from 王平;
//5.角色权限的修改
grant delete
on S
to R1;
revoke selcet
on S
from R1;
4.3视图机制
视图机制可以把要保密的数据对无权存取这些数据的用户隐藏起来。
视图机制与授权机制配合起来使用
- 首先使用视图机制屏蔽掉了一部分保密数据
- 视图上面再进一步定义存取权限
- 间接实现了存取谓词的额额用户权限定义
例子:王平只能检索计算机系同学的信息
//先建立计算机系学生的视图
create view CS_Student
as select from Student
where Sdept = 'CS';
//在视图上进一步定义存取权限
GRANT SELECT ON CS_Student TO 王平;