问题的提出:
数据库系统中的数据共享不能是无条件的共享
非法使用数据库的情况:
B2以上的系统:
数据库安全性控制的常用方法:
是系统提供的最外层安全保护措施
常用的用户身份鉴别方法有以下几种:
静态口令一般由用户自己设定,鉴别时只要按要求输入正确的口令,系统将允许用户使用数据库管理系统。
常用的方式如短信密码和动态令牌方式,每次鉴别时要求用户使用通过短信或令牌等途径获取的新口令登录数据库管理系统。
指纹、虹膜和掌纹等
。智能卡由用户随身携带,登录数据库管理系统时用户将智能卡插入专用的读卡器进行身份验证。
个人身份识别码(PIN)和智能卡
相结合的方式。这样,即使PIN或智能卡中有一种被窃取,用户身份仍不会被冒充。主要通过数据库系统的存取控制机制实现。
定义用户权限
,并将用户权限登记到数据字典中;
用户对某一数据对象的操作权力称为权限。
合法权限检查
,每当用户发出存取数据库的操作请求后(请求一般应包括操作类型、操作对象和操作用户等信息),数据库管理系统查找数据字典,根据安全规则进行合法权限检查
,若用户的操作请求超出了定义的权限,系统将拒绝执行此操作。
定义用户权限
和合法权限检查机制
一起组成了数据库管理系统的存取控制子系统
。
C2级
的数据库管理系统支持自主存取控制
( Discretionary Access Control, DAC),B1级
的数据库管理系统支持强制存取控制
( Mandatory Access Control, MAC)。这两类方法的简单定义是:
自主存取控制
方法中,用户对于不同的数据库对象有不同的存取权限,不同的用户对同一对象也有不同的权限,而且用户还可将其拥有的存取权限转授给其他用户。因此自主存取控制非常灵活。强制存取控制
方法中,每一个 数据库对象被标以一定的密级,每一个用户也被授予某一个级别的许可证。对于任意一个对象, 只有具有合法许可证的用户才可以存取。强制存取控制因此相对比较严格。GRANT
语句和 REVOKE
语句实现数据对象
操作类型
定义存取权限称为授权
GRANT语句的一般格式:
GRANT <权限>[,<权限>]...
[ON <对象类型> <对象名>]
TO <用户>[,<用户>]...
[WITH GRANT OPTION];
语义:将对指定操作对象的指定操作权限授予指定的用户
发出GRANT:
按受权限的用户:
WITH GRANT OPTION子句:
不允许循环授权:
[例1] 把查询Student表权限授给用户U1
GRANT SELECT
ON TABLE Student
TO U1;
举个例子而已,不同数据库请参考相关文档,先打基础。有个印象,知道有这么个东西,其实很多数据库管理系统已经将这些封装好了,简洁漂亮的UI,灵活的操作,基本不会用到语句来写。话不多说,直接上图:
[例2] 把对Student表和Course表的全部权限授予用户U2和U3
GRANT ALL PRIVILIGES
ON TABLE Student, Course
TO U2, U3;
[例3] 把对表SC的查询权限授予所有用户
GRANT SELECT
ON TABLE SC
TO PUBLIC;
[例4] 把查询Student表和修改学生学号的权限授给用户U4
对属性列的授权时必须明确指出相应属性列名
GRANT UPDATE(Sno), SELECT
ON TABLE Student
TO U4;
[例5] 把对表SC的INSERT权限授予U5用户,并允许他再将此权限授予其他用户
GRANT INSERT
ON TABLE SC
TO U5
WITH GRANT OPTION;
执行例5后,U5不仅拥有了对表SC的INSERT权限,
还可以传播此权限:
[例6]
GRANT INSERT ON TABLE SC TO U6
WITH GRANT OPTION;
同样,U6还可以将此权限授予U7:
[例7]
GRANT INSERT ON TABLE SC TO U7;
但U7不能再传播此权限,因为没有写这条语句WITH GRANT OPTION
。
授予的权限可以由DBA或其他授权者用REVOKE语句收回
REVOKE语句的一般格式为:
REVOKE <权限>[,<权限>]...
[ON <对象类型> <对象名>]
FROM <用户>[,<用户>]...;
[例8] 把用户U4修改学生学号的权限收回
REVOKE UPDATE(Sno)
ON TABLE Student
FROM U4;
[例9] 收回所有用户对表SC的查询权限
REVOKE SELECT
ON TABLE SC
FROM PUBLIC;
[例10] 把用户U5对SC表的INSERT权限收回
REVOKE INSERT
ON TABLE SC
FROM U5 CASCADE ;
将用户U5的INSERT权限收回的时候必须级联(CASCADE)收回 系统只收回直接或间接从U5处获得的权限
DBA在创建用户时实现
CREATE USER语句格式
CREATE USER <username>
[WITH][DBA | RESOURCE | CONNECT]
数据库角色:被命名的一组与数据库操作相关的权限
结合我刚刚上面截得黑色背景图片了解
CREATE ROLE <角色名>
GRANT <权限>[,<权限>]…
ON <对象类型>对象名
TO <角色>[,<角色>]…
GRANT <角色1>[,<角色2>]…
TO <角色3>[,<用户1>]…
[WITH ADMIN OPTION]
REVOKE <权限>[,<权限>]…
ON <对象类型> <对象名>
FROM <角色>[,<角色>]…
[例11] 通过角色来实现将一组权限授予一个用户。
步骤如下:
CREATE ROLE R1;
GRANT SELECT,UPDATE,INSERT
ON TABLE Student
TO R1;
GRANT R1
TO 王平,张明,赵玲;
REVOKE R1
FROM 王平;
[例12] 角色的权限修改
GRANT DELETE
ON TABLE Student
TO R1
[例13] 角色权限的收回
REVOKE SELECT
ON TABLE Student
FROM R1;
自主存取控制缺点:
强制存取控制(MAC):
在强制存取控制中,数据库管理系统所管理的全部实体被分为主体和客体两大类。
主体
是系统中的活动实体
DBMS所管理的实际用户
代表用户的各进程
客体
是系统中的被动实体,是受主体操纵的
文件
基表
索引
视图
对于主体和客体,数据库管理系统为它们每个实例(值)指派一个敏感度标记(label)。
敏感度标记(Label)分为若干个级别:
主体的敏感度标记称为许可证级别
(Clearance Level)客体的敏感度标记称为密级
(Classification Level)强制存取控制规则:
大于或等于客体
的密级时,该主体才能读取
相应的客体等于
客体的密级时,该主体才能写
相应的客体主体的许可证级别 <=客体的密级→ 主体能写客体
规则的共同点:
禁止
了拥有高许可证级别的主体更新
低密级的数据对象把要保密的数据对无权存取这些数据的用户隐藏起来,对数据提供一定程度的安全保护
[例14]建立计算机系学生的视图,把对该视图的SELECT权限授于王平,把该视图上的所有操作权限授于张明
先建立计算机系学生的视图CS_Student
CREATE VIEW CS_Student AS
SELECT *
FROM Student
WHERE Sdept='CS';
在视图上进一步定义存取权限:
GRANT SELECT
ON CS_Student
TO 王平 ;
GRANT ALL PRIVILIGES
ON CS_Student
TO 张明;
什么是审计:
审计日志(Audit Log)
;审计分为:
用户级审计
系统级审计
AUDIT语句:设置审计功能
NOAUDIT语句:取消审计功能
[例15]对修改SC表结构或修改SC表数据的操作进行审计
AUDIT ALTER,UPDATE
ON SC;
[例16]取消对SC表的一切审计
NOAUDIT ALTER,UPDATE
ON SC;
数据加密
防止数据库中数据在存储
和传输
中失密的有效手段
数据加密分为存储加密
和传输加密
透明和非透明
两种存储加密方式。透明
存储加密是内核级加密保护
方式,对用户完全透明
非透明
存储加密则是通过多个加密函数
实现的。透明存储加密
是数据在写到磁盘时对数据进行加密,授权用户读取数据时再对其进行解密。由于数据加密对用户透明,数据库的应用程序不需要做任何修改,只需在创建表语句中说明需加密的字段即可。当对加密数据进行增、删、改、查询操作时,数据库管理系统将自动对数据进行加、解密工作。基于数据库内核的数据存储加密、解密方法性能较好,安全完备性较高。链路加密和端到端加密
。统计数据库
统计数据库中特殊的安全性问题:
统计数据库安全性规则:
规则1:任何查询至少要涉及N(N足够大)个以上的记录
规则2:任意两个查询的相交数据项不能超过M个
规则3:任一用户的查询次数不能超过1+(N-2)/M
数据库安全机制的设计目标:
试图破坏安全的人所花费的代价 >> 得到的利益