数据库安全性控制的常用方法
用户标识和鉴别
系统提供的最外层安全保护措施方法:
- 系统提供一定的方式让用户标识自己的名字或身份
- 系统内部记录着所有合法用户的标识;
- 每次用户要求进入系统时,由系统核对用户提供的身份标识;
- 通过鉴定后才提供系统使用权;
- 用户标识和鉴定可以重复多次。
- 系统通常采用用户标识与口令相结合的方法判别用户身份的真伪
存取控制
- 定义存取权限
- 自主存取控制方法
定义
- 同一用户对于不同的数据对象有不同的存取权限;
- 不同的用户对同- -对象也有不同的权限;
- 用户还可将拥有的存取权限转授给其他用户
用户的存取权限有两个要素
- 数据库对象
- 操作类型(权限)
--删除服务器用户(登录)u1-u7,登录名
/*
drop login u1;
drop login u2;
drop login u3;
drop login u4;
drop login u5;
drop login u6;
drop login u7;
drop login u8;
*/
--创建服务器用户(登录)u1-u7,登录名
create login u1 with password='u1123456';
create login u2 with password='u2123456';
create login u3 with password='u3123456';
create login u4 with password='u4123456';
create login u5 with password='u5123456';
create login u6 with password='u6123456';
create login u7 with password='u7123456';
create login u8 with password='u8123456';
--sp_helplogins提供有关每个数据库中的登录及相关用户的信息
--sp_helplogins 'u2'
--增加数据库用户,具体到哪个数据库的用户
/*
drop user u1;
drop user u2;
drop user u3;
drop user u4;
drop user u5;
drop user u6;
drop user u7;
drop user u8;
*/
create user u1;
create user u2;
create user u3;
create user u4;
create user u5;
create user u6;
create user u7;
create user u8;
--sp_helpuser当前数据库中数据库用户或数据库角色的名称
sp_helpuser 'u1'
--同名映射,数据库登录名会自动找到和其一样的数据库用户名
授权和回收
-
在数据库系统中定义存取权限称为授权
- 定义哪些用户可以在哪些数据库对象上进行哪些类型的操作
-
标准SQL使用GRANT语句和REVOKE语句来实现对用户的授权和撤销授权操作.
-
关系系统中,存取控制的数据库对象及权限
- 模式、基本表、视图、和索引的定义
- create及alter table
- 基本表和视图的数据
- select、insert、 update、 delete、 references,all privileges
- 属性列的数据
- select、insert、 update、 references, all privileges
- 模式、基本表、视图、和索引的定义
--GRANT语句的一-般格式:
--GRANT <权限> [, <权限>.]..
--[ON <对象名>]
--TO <用户>[,<用户>]...
--[WITH GRANT OPTION];
--如果不写with grant option就不能再次将权限授给其他用户
--语义:将对指定对象的指定操作权限授予指定的用户。
--接受权限的用户:
--。一个或多个具体用户
--。PUBLIC (全体用户)
--WITH GRANT OPTION子句
--获得某种权限的用户还可以把这种权限再授予别的用户,但不允许循环授权。
--若没有指定则:获得某种权限的用户只能使用该权限,不能传播该权限
--授权
--以u2登录student数据库演示其权限
--[例1]把对Student和Course表的查询权限和修改学生学号的权限授予用户U2和U3
grant select,update(sno)--对列的操作
on student
to u2,u3;
grant select--一次只能对一个操作对象进行授权
on course
to u2,u3;
select *
from student
--再次演示u2的权限
--[例2]把对表SC的查询权限授予所有用户
grant select
on sc
to public
--再次演示u2的权限
--[例3]把对表SC的INSERT权限授予U5用户,并允许他再将此权限授予其他用户。
grant insert
on sc
to u5
with grant option
--用户u5登录
GRANT INSERT
ON SC
TO U6
WITH GRANT OPTION;
--用户u6登录
GRANT INSERT
ON SC
TO U7
--回收
--[例4]把用户U2修改学生学号的权限收回
REVOKE UPDATE(Sno)
ON Student
FROM U2;
--[例5]把用户U5对SC表的INSERT权限收回
REVOKE INSERT
ON SC
FROM U5 cascade;--级联回收
--例如,u5把权限传播出去了,仅仅回收u5是不允许的
角色
- 是被命名的一组与数据库操作相关的权限,是权限的集合。可以将用户集中到一个单元中,然后对该单元应用权限。
- 对一个角色授予、拒绝或废除的权限也适用于该角色的任何成员。
- 可以建立一个角色来代表单位中一类工作;人员所执行的工作,然后给这个角色授予适当的权限
- 简化授权过程
-
服务器角色
- 执行服务器级管理操作的用户权限的集合
- 是系统内置的
- 不能创建服务器角色
- 每个角色有- -定的权限
- 登录帐户可以添加到服务器角色
-
数据库角色:被命名的一组与数据库操作相关的权限。
- 角色是权限的集合
- 可以为一组具有相同权限的用户创建一-个角色。如人事处的老师具有一类权限。
- 简化了授权过程
--创建角色
--drop role r1
CREATE ROLE R1--创建的是数据库角色,里面没有任何权限
sp_helprole --查看当前数据库中的所有角色
--使角色R1拥有Student表的select、update、insert权限
GRANT select,update,insert
ON Student
TO R1
--将这个角色授予用户u1。使他们具有角色R1所包含的全部权限
/*GRANT R1 TO u1,u2,u3 */
sp_addrolemember 'R1','u1'
--删除角色成员
sp_droprolemember 'R1','u1'
--撤销角色R1的权限
REVOKE select
ON Student
FROM R1
授权和角色都是自主存取方式(DAC)
优点:能够通过授权机制有效地控制其他用户对敏感数据的存取
缺点:可能存在数据的无意泄露
原因:这种机制仅仅通过对数据的存取权限来进行安全控制,而数据本身并无安全性标记
解决:对系统控制下的所有主客体实施强制存取控制策略
强制存取控制(MAC)
一、定义
1、每一个数据对象被标以一定的密级;
2、每一个用户也被授予某一个级别的许可证;
3、对于任意-一个对象, 只有具有合法许可证的用户才可以存取。
二、在MAC中,DBMS所管理的全部实体被分为主体和客体两大类
1、主体是系统中的活动实体
DBMS所管理的实际用户/代表用户的各进程
2、客体是受主体操纵的(文件、基表、索引、视图)
三、对于主体和客体,DBMS为它们每个实例(值)指派-个敏感度标记(Label),标记有若干级别:绝密 机密 可信 公开
四、主体的敏感度标记称为许可证级别
五、客体的敏感度标记称为密级
六、MAC机制就是通过对比主体和客体的敏感度标记,最终确定主体是否能够存取客体
强制存取控制规则:
1、仅当主体的许可证级别大于或等于客体的密级时,该主体才能读取相应的客体;
2、仅当主体的许可证级别等于(小于等于)客体的密级时,该主体才能写相应的客体。
特点:禁止了拥有高许可证的主体更新低密级的数据对象
MAC是对数据本身进行密级标记
1、无论数据如何复制,标记与数据是一个不可分的整体
2、只有符合密级标记要求的用户才可以操纵数据,从而提供了更高级别的安全性
- 合法权限检查
视图机制
把要保密的数据对无权存取这些数据的用户隐藏起来
数据加密
根据一定的算法将原始数据变换为不可直接识别的格式
审计(秋后算账)
审计功能是一种监视措施,跟踪记录有关数据的访问活动。