安全性
问题的提出:
数据库的一大特点是数据可以共享,但是数据共享必然带来数据库的安全性问题,数据库系统中的数据共享不能是无条件的共享
例:军事秘密、 国家机密、 新产品实验数据、市场需求分析、 市场营销策略、 销售计划、客户档案、 医疗档案、 银行储蓄数据
数据库中数据的共享是在DBMS统一的严格的控制之下的共享, 即只允许有合法使用权限的用户访问允许他存取的数据
数据库系统的安全保护措施是否有效是数据库系统主要的性能指标之一
什么是数据库的安全性
数据库的安全性是指保护数据库, 防止因用户非法使用数据库造成数据泄露、 更改或破坏。
什么是数据保密
数据保密是指用户合法地访问到机密数据后能否对这些数据保密。通过制订法律道德准则和政策法规来保证。
用户非法使用数据库的情况
用户编写一段合法的程序绕过DBMS及其授权机制,通过操作系统直接存取、修改或备份数据库中的数据
直接或编写应用程序执行非授权操作
通过多次合法查询数据库,从中推导出一些保密数据
计算机系统中常用的安全模型
安全性控制的方法
用户标识和鉴定
存取控制
视图
审计
密码储存
用户标识和鉴定
系统提供的最外层的安全保护措施
用户标识与鉴定的基本方法:
系统提供一定的方式让用户标识自己的名字或身份;
系统内部记录着所有合法用户的标识;
每次用户要求进入系统时,由系统核对用户提供的身份标识;
通过鉴定后才提供机器使用权;
用户标识和鉴定可以重复多次。
存取控制
定义存取权限
在数据库系统中,为了保证用户只能访问他有权存取的数据,必须预先对每个用户定义存取权限。
存取权限由两个要素组成
数据对象
操作类型
定义一个用户可以在哪些数据对象上进行哪些类型的操作。
在数据库系统中,定义存取权限称为授权(Authorization),授权定义经过编译后存放在数据字典中
例:
检查存取权限
对于通过鉴定获得访问权的用户(即合法用户),系统根据他的存取权限定义对他的各种操作请求进行控制,确保他只执行合法操作。
对于获得连接权后又进一步发出存取数据库操作的用户
DBMS查找数据字典,根据其存取权限对操作的合法性进行检查
若用户的操作请求超出了定义的权限,系统将拒绝执行此操作
授权粒度
授权粒度是指可以定义的数据对象的范围
它是衡量授权机制是否灵活的一个重要指标。
授权定义中数据对象的粒度越细,即可以定义的数据对象的范围越小,授权子系统就越灵活。
数据对象粒度
关系数据库中授权的数据对象粒度(能否提供与数据值有关的授权反映了授权子系统精巧程度)
数据库
表
属性列
行
SQL使用授权的语句GRANT
和REVOKE
语句
用户或DBA把授权决定告知系统, 这是由SQL的GRANT和REVOKE语句来完成的,DBMS把授权的结果存入数据字典,当用户提出操作请求时, DBMS根据授权情况进行检查, 以决定是否执行操作请求。
视图(属于外模式)
视图机制把要保密的数据对无权存取这些数据的用户隐藏起来,从而自动地对数据提供一定程度的安全保护。视图机制更主要的功能在于提供数据独立性,其安全保护功能不太精细,往往远不能达到应用系统的要求。
具体实际应用:在实际应用中通常是视图机制与授权机制配合使用,首先用视图机制屏蔽掉一部分保密数据,然后在视图上面再进一步定义存取权限。这时视图机制实际上间接实现了支持存取谓词的用户权限定义。
例:(王平只能检索计算机系学生的信息)
-- 先创建视图
CREATE VIEW CS_Student
AS
SELECT Sno,Sname,Ssex,Sdept,Sage
FROM Student WHERE Sdept='CS';
-- 在授权
GRANT SELECT ON TABLE CS_Student TO 王平;
审计
审计功能启用一个专用的审计日志(Audit Log),系统自动将用户对数据库的所有操作记录在上面。
DBA可以利用审计日志中的追踪信息,重现导致数据库现有状况的一系列事件,以找出非法存取数据的人。
C2以上安全级别的DBMS必须具有审计功能。(C2是最低安全性标准)
审计很费时间和空间,所以DBMS往往都将其作为可选特征
DBA可以根据应用对安全性的要求,灵活地打开或关闭审计功能,用户识别和鉴定、存取控制、视图等安全性措施均为强制性机制,将用户操作限制在规定的安全范围内
审计技术是预防手段,监测可能的不合法行为
由于任何系统的安全性措施都不可能是完美无缺的,蓄意盗窃、破坏数据的人总是想方设法打破控制,所以,当数据相当敏感,或者对数据的处理极为重要时,就必须使用审计技术
数据加密(密码储存)
数据加密:防止数据库中数据在存储和传输中失密的有效手段
加密的基本思想
根据一定的算法将原始数据(明文, Plain text)变换为不可直接识别的格式(密文, Cipher text),不知道解密算法的人无法获知数据的内容
SQL的DCL实现存取权限管理
SQL的授权功能
功能:将对指定操作对象的指定操作权限授予指定的用户
GRANT <权限>[,<权限>]...
[ON <对象类型> <对象名>]
TO <用户>[,<用户>]...
[WITH GRANT OPTION];
操作权限
用户权限
数据库的建立表(CREATETAB) 的权限属于DBA, 可由DBA授予普通用户, 普通用户拥有此权限后可以建立基本表。
基本表或视图的属主拥有对该表或视图的一切操作权限。
接收权限的用户
一个或多个具体用户
PUBLIC(全体用户)
WITH GRANT OPTION子句
如果指定了WITH GRANT OPTION子句,则获得某种权限的用户还可以把这种权限再授予别的用户。
如果没有指定WITH GRANT OPTION子句,则获得某种权限的用户只能使用该权限,但不能传播该权限
SQL收回权限的功能
功能:从指定用户那里收回对指定对象的指定权限
REVOKE <权限>[,<权限>]...
[ON <对象类型> <对象名>]
FROM <用户>[,<用户>]...;
例:
-- 收回所有用户对表SC的查询权限
REVOKE SELECT ON TABLE SC FROM PUBLIC;
-- 把用户U5对SC表的INSERT权限收回
-- 此时系统将收回直接或间接从U5处获得的对SC表的INSERT权限
REVOKE INSERT ON TABLE SC FROM U5;
小结
SQL提供了非常灵活的授权机制。
用户对自己建立的基本表和视图拥有全部的操作权限, 并且可以用GRANT语句把其中某些权限授予其他用户被授权的用户如果有“继续授权” 的许可, 还可以把获得的权限再授予其他用户。
DBA拥有对数据库中所有对象的所有权限, 并可以根据应用的需要将不同的权限授予不同的用户,所有授予出去的权力在必要时又都可以用REVOKE语句收回。