一些黑客(Hacker)和犯罪分子在用户存取数据库时猎取用户名和用户口令,然后假冒合法用户偷取、修改甚至破坏用户数据。数据库管理系统提供的安全措施主要包括用户身份鉴别、存取控制和视图等技术。
黑客和敌对分子千方百计盗窃数据库中的重要数据,一些机密信息被暴露。为防止数据泄露,数据库管理系统提供的主要技术有强制存取控制、数据加密存储和加密传输等,同时部分安全性要求高的部门提供审计日志分析。
数据库的安全性与计算机系统的安全性紧密联系。计算机硬件、操作系统、网络系统等的安全性脆弱。建立了一套可信(Trusted)计算机系统的概念和标准。
提出国际公认的表述信息技术安全性的结构,把信息产品的安全要求分为:安全功能要求、安全保证要求。
非法使用数据库的情况:
计算机系统中,安全措施是一级一级层层设置:
– 系统根据用户标识鉴定用户身份,合法用户才准许进入计算机系统
数据库安全性控制的常用方法:用户标识和鉴定、存取控制、视图、审计、数据加密
这是系统提供的最外层安全保护措施,用户标识:由用户名和用户标识号组成(用户标识号在系统整个生命周期内唯一)
用户身份鉴别的方法:
数据库安全最重要的一点是确保只授权给有资格的用户访问数据库的权限,同时令所有未被授权的人员无法接近数据,通过存取控制机制实现。
定义用户权限,并将用户权限登记到数据字典中
合法权限检查
通过 SQL 的GRANT 语句和REVOKE 语句实现
用户权限组成:数据对象 + 操作类型
定义用户存取权限:定义用户可以在哪些数据库对象进行哪些类的操作,定义存取权限称为授权。
GRANT语句的一般格式:
GRANT <权限>[,<权限>]...
ON <对象类型> <对象名>[,<对象类型> <对象名>]…
TO <用户>[,<用户>]...
[WITH GRANT OPTION];语义:将对指定操作对象的指定操作权限授予指定的用户
可以发出GRANT的用户:数据库管理员,数据库对象创建者(即属主Owner),拥有该权限的用户
受权限的用户:一个或多个具体用户,PUBLIC(即全体用户)
WITH GRANT OPTION 子句:指定后表示获得该限权的用户可以再授予权限个其他用户,注意不允许循环授权。
[例4.1] 把查询Student表权限授给用户U1
GRANT SELECT
ON TABLE Student
TO U1;[例4.2] 把对Student表和Course表的全部权限授予用户U2和U3
GRANT ALL PRIVILIGES
ON TABLE Student,Course
TO U2,U3;[例4.3] 把对表SC的查询权限授予所有用户
GRANT SELECT
ON TABLE SC
TO PUBLIC;[例4.4] 把查询Student表和修改学生学号的权限授给用户U4
GRANT UPDATE(Sno), SELECT
ON TABLE Student
TO U4;
-- 对属性列的授权时必须明确指出相应属性列名[例4.5] 把对表SC的INSERT权限授予U5用户,并允许他再将此权限授予其他用户
GRANT INSERT
ON TABLE SC
TO U5
WITH GRANT OPTION;
-- U5不仅拥有了对表SC的INSERT权限,还可以传播此权限授予的权限可以由数据库管理员或其他授权者用REVOKE语句收回
REVOKE语句的一般格式为:
REVOKE <权限>[,<权限>]...
ON <对象类型> <对象名>[,<对象类型><对象名>]…
FROM <用户>[,<用户>]...[CASCADE | RESTRICT];[例4.8] 把用户U4修改学生学号的权限收回
REVOKE UPDATE(Sno)
ON TABLE Student
FROM U4;[例4.9] 收回所有用户对表SC的查询权限
REVOKE SELECT
ON TABLE SC
FROM PUBLIC;[例4.10] 把用户U5对SC表的INSERT权限收回,此时U5传播授权给了U6,U6传播给了U7
REVOKE INSERT
ON TABLE SC
FROM U5 CASCADE ;
-- 将用户U5的INSERT权限收回的时候应该使用CASCADE,否则拒绝执行该语句
-- 如果U6或U7还从其他用户处获得对SC表的INSERT权限,则他们仍具有此权限,系统只收回直接或间接从U5处获得的权限 数据库管理员在创建用户时实现
CREATE USER语句格式:
CREATE USER <username>
[WITH][DBA|RESOURCE|CONNECT];数据库角色:被命名的一组与数据库操作相关的权限,角色是权限的集合,可以为一组具有相同权限的用户创建一个角色,简化授权的过程。
CREATE ROLE <角色名>GRANT <权限>[,<权限>]…
ON <对象类型>对象名
TO <角色>[,<角色>]…GRANT <角色1>[,<角色2>]…
TO <角色3>[,<用户1>]…
[WITH ADMIN OPTION]该语句把角色授予某用户,或授予另一个角色
授予者是角色的创建者或拥有在这个角色上的ADMIN OPTION
指定了WITH ADMIN OPTION则获得某种权限的角色或用户还可以把这种权限授予其他角色
一个角色的权限:直接授予这个角色的全部权限加上其他角色授予这个角色的全部权限
REVOKE <权限>[,<权限>]…
ON <对象类型> <对象名>
FROM <角色>[,<角色>]…用户可以回收角色的权限,从而修改角色拥有的权限
REVOKE执行者是:角色的创建者,拥有在这个(些)角色上的ADMIN OPTION
[例4.11] 通过角色来实现将一组权限授予一个用户。
步骤如下:
(1)首先创建一个角色 R1
CREATE ROLE R1;(2)然后使用GRANT语句,使角色R1拥有Student表的 SELECT、UPDATE、INSERT权限
GRANT SELECT, UPDATE, INSERT
ON TABLE Student
TO R1;(3)将这个角色授予王平,张明,赵玲。使他们具有角色R1所包含的全部权限
GRANT R1
TO 王平,张明,赵玲;(4) 可以一次性通过R1来回收王平的这3个权限
REVOKE R1
FROM 王平;自主存取控制可能存在数据的“无意泄露”
原因:这种机制仅仅通过对数据的存取权限来进行安全控制,而数据本身并无安全性标记
解决:对系统控制下的所有主体、客体实施强制存取控制策略
强制存取控制(MAC):保证更高程度的安全性,用户不能直接感知或进行控制,适用于对数据有严格而固定密级分类的部门,如军事部门和政府部门。
在强制存取控制中,数据库管理系统所管理的全部实体被分为主体和客体两大类:
敏感度标记(Label):
对于主体和客体,DBMS为它们每个实例(值)指派一个敏感度标记(Label)
敏感度标记分成若干级别:
主体的敏感度标记称为许可证级别(Clearance Level)
客体的敏感度标记称为密级(Classification Level)
强制存取控制规则
(1)仅当主体的许可证级别大于或等于客体的密级时,该主体才能读取相应的客体
(2)仅当主体的许可证级别小于或等于客体的密级时,该主体才能写相应的客体
强制存取控制(MAC)是对数据本身进行密级标记,无论数据如何复制,标记与数据是一个不可分的整体,只有符合密级标记要求的用户才可以操纵数据。
实现强制存取控制时要首先实现自主存取控制
原因:较高安全性级别提供的安全保护要包含较低级别的所有保护
自主存取控制与强制存取控制共同构成数据库管理系统的安全机制
把要保密的数据对无权存取这些数据的用户隐藏起来,对数据提供一定程度的安全保护,间接地实现支持存取谓词的用户权限定义。
[例4.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),将用户对数据库的所有操作记录在上面,审计员利用审计日志,监控数据库中的各种行为,找出非法存取数据的人、时间和内容。C2以上安全级别的DBMS必须具有审计功能。
审计很费时间和空间DBA可以根据应用对安全性的要求,灵活地打开或关闭审计功能,审计功能主要用于安全性要求较高的部门,所以审计功能不是必须存在的。
基本功能:提供多种审计查阅方式
多套审计规则:一般在初始化设定
提供审计分析和报表功能
审计日志管理功能:
提供查询审计设置及审计记录信息的专门视图
AUDIT语句:设置审计功能
NOAUDIT语句:取消审计功能
[例4.15] 对修改SC表结构或修改SC表数据的操作进行审计
AUDIT ALTER, UPDATE
ON SC;[例4.16] 取消对SC表的一切审计
NOAUDIT ALTER, UPDATE
ON SC;数据加密:防止数据库中数据在存储和传输中失密的有效手段
加密的基本思想:根据一定的算法将原始数据—明文(Plain text)变换为不可直接识别的格式—密文(Cipher text)
加密方法:存储加密和传输加密
推理控制:
隐蔽信道:
处理强制存取控制未解决的问题
数据隐私保护: