携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第15天,点击查看活动详情
数据库系统-数据库的安全性
为什么要研究数据库的安全性?
数据库的一大特点是数据可以共享
数据共享必然带来数据库的安全性问题
数据库系统中的数据共享不能是无条件的共享
数据库安全性控制
计算机系统中,安全措施是一级一级层层设置
- 用户要求进入计算机系统时,系统首先根据输入的用户标识进行用户身份鉴定,只有合法的用户才准许进入计算机系统
- 对已进入系统的用户,数据库管理系统还要进行存取控制,只允许用户执行合法操作
- 操作系统也会有自己的保护措施
- 数据最后还可以以密码形式存储到数据库中
用户标识与鉴定(Identification & Authentication)
是系统提供的最外层安全保护措施
常见的用户身份鉴别方法有以下几种:
-
静态口令鉴别
这种方式是当前常用的鉴别方法。静态口令一般由用户自己设定,鉴别时只要按要求输入正确的口令,系统将允许用户使用数据库管理系统。这些口令是静态不变的,在实际应用中,用户常常用自己的生日、电话、简单易记的数字等内容作为口令,很容易被破解。而一旦被破解,非法用户就可以冒充该用户使用数据库。这种方式虽然简单,但容易被攻击,安全性较低。
-
动态口令鉴别
它是目前较为安全的鉴别方式。这种方式的口令是动态变化的,每次鉴别时均需使用动态产生的新口令登录数据库管理系统,即采用一次一密的方法。常用的方式如短信密码和动态令牌方式,每次鉴别时要求用户使用通过短信或令牌等途径获取的新口令登录数据库管理系统。与静态口令鉴别相比,这种认证方式增加了口令被窃取或破解的难度,安全性相对高一些。
-
生物特征鉴别
它是一种通过生物特征进行认证的技术,其中,生物特征是指生物体唯一具有的,可测量、识别和验证的稳定生物特征,如指纹、虹膜和掌纹等。这种方式通过采用图像处理和模式识别等技术实现了基于生物特征的认证,与传统的口令鉴别相比,无疑产生了质的飞跃,安全性较高。
-
智能卡鉴别
智能卡是一种不可复制的硬件,内置集成电路的芯片,具有硬件加密功能。智能卡由用户随身携带,登录数据库管理系统时用户将智能卡插入专用的读卡器进行身份验证。由于每次从智能卡读取的数据是静态的,通过内存扫描或网络监听等技术还是可能截取到用户的身份验证信息,存在安全隐患。因此,实际应用中一般采用个人身份识别码(PIN)和智能卡相结合的方式。这样,即使PIN或智能卡中有一种被窃取,用户身份仍不会被冒充。
存取控制
数据库安全最重要的一点就是确保只授权给有资格的用户访问数据库的权限,同时令所有未被授权的人员无法接近数据,这主要通过数据库系统的存取控制机制实现。
存取控制机制组成:
- 定义用户权限,并将用户权限登记到数据字典中,用户对某一数据对象的操作权力称为权限
- 合法权限检查,每当用户发出存取数据库的操作的操作请求后,数据库管理系统查找数据字典,根据安全规则进行合法权限检查,若用户的操作请求超出了定义的权限,系统将拒绝执行此操作
定义用户权限和合法权限检查机制一起组成了数据库管理系统的存取控制子系统
常用存取控制方法
1.自主存取控制(Discretionary Access Control,简称DAC) 灵活
2.强制存取控制(Mandatory Access Control,简称MAC)严格
两类方法的简单定义是:
(1)在自主存取控制方法中,用户对于不同的数据库对象有不同的存取权限,不同的用户对同一对象也有不同的权限,而且用户还可将其拥有的存取权限转授给其他用户。因此自主存取控制非常灵活
(2)在强制存取控制方法中,每一个数据库对象被标以一定的密级,每一个用户也被授予某一个级别的许可证。对于任意一个对象,只有具有合法哦许可证的用户才可以存取。强制存取控制因此相对比较严格。
自动存取控制方法--DAC(Discretionary Access Control)
通过SQL的GRANT语句和REVOKE语句设想
用户权限组成
- 数据对象
- 操作类型
定义用户存取权限:定义用户可以在哪些数据库对象上进行哪些类型的操作
定义存取权限称为授权
授权与回收--针对用户
授权--GRANT
GRANT语句一般格式:
GRANT<权限>[,<权限>]...
[ON<对象类型><对象名>]
TO <用户>[,<用户>]...
[WITH GRANT OPTION]
语义:将对指定操作对象的指定操作权限授予指定的用户
发出GRANT:
- DBA(数据库管理员),Database Administrator
- 数据库对象创建者(即属主 owner)
- 拥有该权限的用户
接受权限的用户:
- 一个或多个具体用户
- PUBLIC(全体用户)
WITH GRANT OPTION子句:
- 指定:可以再授予
- 没有指定:不能传播
不允许循环授予
把查询Student表权限授权给用户U1
GRANT SELECT
ON TABLE Student
TO U1;
把对Student表和Coures表的全部权限授予用户U2和U3
GRANT ALL PRIVILIGES
ON TABLE Student,Course
TO U2,U3
把对表SC的查询权限授予使用用户
GRANT SELECT
ON TABLE SC
TO PUBLIC;
把查询Student表和修改学生学号的权限给用户U4
对属性列的授权时必须明确指出相应属性列名
GRANT UPDATE(Sno),SELECT
ON TABLE Student
TO U4;
把对表SC的INSERT权限授予U5用户,并允许他再将此权限授予其他用户
GRANT INSERT
ON TABLE SC
TO U5
WITH GRANT OPTION;
传播权限
GRANT INSERT ON TABLE SC TO U6
WITH GRANT OPTION;
授权给U7 但U7不能传播权限
GRANT INSERT ON TABLE SC TO U7
结果:
回收--REVOKE
授予的权限可以由DBA或其他授权者用REVOKE语句收回
REVOKE语句的一般格式为:
REVOKE <权限>[,<权限>]...
[ON <对象类型><对象名>]
FROM <用户>[,<用户>]...;
把用户U4修改学生学号的权限收回
REVOKE UPDATE(Sno)
NO TABLE Student
FROM U4;
收回所有用户对表SC的查询权限
REVOKE SELECT
ON TABLE SC
FROM PUBLIC;
把用户U5对SC表的INSERT权限收回
REVOKE INSERT
ON TABLE SC
FROM U5 CASCADE;
将用户U5的INSERT权限收回的时候必须级联(CASCADE)收回
系统只收回直接或间接从U5处获得的权限
DBA:拥有所有对象的所有权限
不同的权限授予不同的用户
用户:拥有自己建立的对象的全部的操作权限
GRANT:授予其他用户
被授权的用户 “继续授权 ”许可:再授予
所有授予出去的权力在必要时又都可用REVOKE语句收回
数据库角色-针对角色
数据库角色:被命名的一组与数据库操作相关的权限
角色是权限的集合
可以为一组具有相同权限的用户创建一个角色
作用:简化授权的过程
1.创建角色
CREATE ROLE <角色名>
2.给角色授权
GRANT <权限>[,<权限>]...
ON <对象类型>对象名
TO <角色>[,<角色>]...
3.将一个角色授予其他的角色或用户
GRANT <角色1>[,<角色2>]...
TO <角色3>[,<用户1>]...
[WITH ADMIN OPTION]
4.角色权限的收回
REVOKE <权限>[,<权限>]...
ON <对象类型><对象名>
FROM <角色>[,<角色>]...
通过角色来实现将一组权限授予一个用户
1.创建角色R1
CREATE ROLE R1;
2.然后使用GRANT语句,使角色R1拥有Student表的SELECT、UPDATE、INSERT权限
GRANT SELECT,UPDATE,INSERT
ON TABLE Student
TO R1;
3.将这个角色授予王平,张明,赵玲。使他们具体角色的所包含的全部权限
GRANT R1
TO 王平,张明,赵玲;
4.可以一次性通过R1来回收王平的这3个权限
REVOKE R1
FROM 王平;
角色的权限修改
GRANT DELETE
ON TABLE Student
TO R1
角色权限的收回
REVOKE SELECT
ON TABLE Student
FROM R1;
强制存取控制方法-MAC:Mandatory Access Control
自主存取控制
缺点:可能存在数据的“无意泄露”
原因:这种机制仅仅通过对数据的存取权限来进行安全控制,而数据本身并无安全性标记
解决:对系统控制下的所有主客体实施强制存取控制策略
强制存取控制(MAC):
保证更高程序的安全性
DAC与MAC共同构成DBMS的安全机制
- 实现MAC时要首先实现DAC
原因:较高安全性级别提供的安全保护要包含较低级别的所有保护
- 先进行DAC检查,通过DAC检查的数据对象再由系统进行MAC检查,只有通过MAC检查的数据对象方可存取
视图机制
把要保密的数据对无权存取这些数据的用户隐藏起来,对数据提供一定程度的安全保护
主要功能是提供数据独立性,无法完全满足要求
间接实现了支持存取谓词的用户权限定义
建立计算机系学生的视图
CREATE VIEW CS_Student AS
SELECT *
FROM Student
WHERE Sdept='CS';
把对该视图的SELECT权限授予王平,把该视图上的所有操作权限授予张明
GRANT SELECT
ON CS_Student
TO 王平;
GRANT ALL PRIVILIGES
ON CS_Student
TO 张明;
审计(Audit)- 日志
审计日志(Audit Log):将用户对数据库的所有操作记录在上面
作用:DBA利用审计日志找出非法存取数据的人、时间和内容
分类:
-
用户级审计
针对自己创建的数据库表或视图进行审计
记录所有用户对这些表或视图的一切成功和不成功的访问要求以及各种类型的SQL操作
-
系统级审计
DBA设置
监测成功或失败的登录要求
监测GRANT和REVOKE操作以及其他数据库级权限下的操作
语句:
AUDIT语句:设置审计功能
NOAUDIT语句:取消审计功能
对修改SC表结构或修改SC表数据的操作进行审计
AUDIT ALTER,UPDATE
ON SC;
取消对SC表的一切审计
NOAUDIT ALTER,UPDATE
ON SC;
数据加密
作用:防止数据库中的数据在存储和传输中失密的有效手段
数据加密分类:
-
存储加密
- 透明存储加密
- 非透明存储加密
-
传输加密
- 链路加密
- 端到端加密