数据库相关的安全性措施主要有
- 用户身份鉴别
- 多层存取控制
- 审计
- 视图
- 数据加密
且它们是层层设置的,就像防火墙一样
下图是数据库安全保护的一个存取控制流程
- 首先,数据库管理系统对提出SQL访问请求的数据库用户进行身份鉴别,防止不可信用户使用系统
- 然后,在SQL处理层进行自主存取控制和强制存取控制,进一步还可以进行推理控制
- 为监控恶意访问,可根据具体安全需求配置审计规则,对用户访问行为和系统关键操作进行审计
- 通过设置简单入侵检测规则,对异常用户行为进行检测和处理
- 在数据存储层,数据库管理系统不仅存放用户数据,还存储与安全有关的标记和信息(称为安全数据),提供存储加密功能等
一:用户身份鉴别
用户身份鉴别:每个用户在系统中都有一个用户标识。每个用户标识由用户名(user name)和用户标识号(UID)组成。系统内部记录着所有合法用户的标识,每次用户进入系统时,系统会核对用户的身份,只有通过鉴定后才提供相关数据库管理系统的权限
(1)静态口令鉴别
静态口令鉴别:一般由用户自己设定,设定后就静态不变。鉴别时只有输入正确的口令即可。一般用户习惯以自己的生日、电话等作为口令,极易被
- 该方式简单,但是安全性极低
(2)动态口令鉴别
动态口令鉴别:该方式的口令是动态变化的,每次鉴别时均需使用动态产生的新口令登录系统,例如常见的短信验证码
- 该方式相较于静态口令,安全性较高
(3)生物特征鉴别
生物特征鉴别:生物特征是指生物体唯一具有的,可测量、识别和验证的稳定生物特征,例如指纹、虹膜等等
- 该种方式相较于传统的口令,安全性有了质的提升
(4)智能卡鉴别
智能卡鉴别:智能卡是一种不可复制的硬件,内置集成电路的芯片,具有硬件加密的功能。智能卡由用户随身携带,登录数据库管理系统时用户将智能卡插入专用的读卡器进行身份验证
- 该方式可能会被一些监听技术截取到信息,所以存在安全隐患
- 实际应用中采用PIN(个人身份识别码)和智能卡结合的方式提高安全性
二:存取控制
存取控制:存取控制的目的就是确保只授权给有资格的用户访问数据库的权限,其余人等无法接近数据。主要包括以下两个部分
- 定义用户权限:用户对某一数据对象的操作权力称为权限。某个用户应该具有何种权限是个管理问题和政策问题,而不是技术问题。数据库管理系统的功能是保证这些决定的执行。为此,数据库管理系统必须提供适当的语言来定义用户权限,这些定义经过编译后存储在数据字典中,被称做安全规则或授权规则
- 合法权限检查:每当用户发出存取数据库的操作请求后(请求一般应包括操作类型、操作对象和操作用户等信息),数据库管理系统查找数据字典,根据安全规则进行合法权限检查,若用户的操作请求超出了定义的权限,系统将拒绝执行此操作
而存取控制方法又分为以下两类
- 自主存取控制(DAC):用户对于不同的数据库对象有不同的存取权限,不同的用户对同一对象也有不同的权限,而且用户还可将其拥有的存取权限转授给其他用户,因此自主存取控制非常灵活
- 强制存取控制(MAC):每一个数据库对象被标以一定的密级,每一个用户也被授予某一个级别的许可证。对于任意一个对象,只有具有合法许可证的用户才可以存取,因此强制存取控制因此相对比较严格
(1)自主存取控制DAC
A:基本概念
自主存取控制DAC:SQL中自主存取控制主要是通过GRANT
语句和REVOKE
语句来实现的。是指用户可以“自主”地决定将数据的存取权限授予何人、决定是否也将“授权”的权限授予别人
授权:用户权限由数据库对象和操作类型这两个要素组成。定义一个用户的存取权限就是定义这个用户可以在哪些数据对象上进行哪些类型的操作。所谓授权就是指定义存取权限
- 在非关系系统中,用户只能对数据进行操作,存取控制的数据库对象也仅限于数据本身
- 在关系数据库系统中,存取控制的对象不仅有数据本身(基本表中的数据、属性列上的数据),还有数据库模式(包括数据库、基本表、视图和索引的创建等)
下表就是关系数据库中的主要存取权限
B:GRANT与REVOKE
SQL中使用GRANT
和REVOKE
语句向用户授予或收回对数据的操作权限
①:GRANT
语法:格式如下,其含义为授予指定用户对指定操作对象的指定操作权限。注意
- 如果指定了
WITH GRANT OPTION
子句,则获得某种权限的用户还可以把这种权限再授权给其他用户。但不允许循环授权 - 如果未指定
WITH GRANT OPTION
子句,则获得某种权限的用户只能使用但无法传播
- 如果要授权所有权限,可以写
ALL PRIVILEGES
- 如果所有用户接受权限,可以写
PUBLIC
以下对象可以发出GRANT
- DBA
- 数据库对象的创建者
- 已经拥有该权限的用户
演示:
【例1】把查询Student表的权限授权给用户U1
GRANT SELECT
ON TABLE Student
TO U1;
【例2】把对Student表和Course表的全部操作权限授予用户U2和U3
GRANT ALL PRIVILEGES
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;
【例6】U5可以把对表SC的INSERT权限授予其他用户,例如U6
GRANT INSERT
ON TABLE SC
TO U6
WITH GRANT OPTION;
②:REVOKE
语法:格式如下,注意
- 如果加入
CASCADE
,表示收回某用户权限的同时也会把该用户所有授权过用户的权限一并收回
演示:
【例7】把用户U4修改学生学号的权限收回
REVOKE UPDATE(Sno)
ON TABLE Student
FROM U4;
【例8】收回所有用户对表SC的查询权限
REVOKE SELECT
ON TABLE SC
FROM PUBLIC;
【例9】把用户U5对SC表的INSERT权限收回,同时收回所有U5授权过的用户的该权限
REVOKE INSERT
ON TABLE SC
FROM U5 CASCADE;
③:创建数据库模式的权限
前面所讲到都是对数据的操作权限,而对创建数据库模式类的数据库对象的授权则由数据库管理员在创建用户时实现
语法:使用CREATE USER
语句创建用户,其格式如下。注意
- 只有系统的超级用户才有权创建一个新的数据库用户
- 新创建的数据库用户有三种权限:
CONNECT
、RESCOURCE
、DBA
这三种权限所能做的操作如下表
C:数据库角色
数据库角色:是被命名的一组与数据库操作相关的权限,也即角色是权限的集合。在创建用户时如果为其赋予某种角色,那么用户就自动拥有了该数据库角色所拥有的权限,从而省去了繁琐的授权语句
①:创建角色
语法
②:给角色授权
语法
③:将一个角色授予其他角色或用户
语法
④:角色权限的收回
语法
综合演示:
【例1】通过角色来实现将一组权限授予一个用户
//首先需要创建一个角色R1
CREATE ROLE R1;
//接着使用GRANT语句,使角色R1拥有对Student表的权限
GRANT SELECT ,UPDATE,INSERT
ON TABLE Student
TO R1;
//然后将这个角色授予用户U1、U2、U3,使他们具有角色R1所拥有的全部权限
GRANT R1
TO U1,U2,U3
//最后,也可以通过R1来收回用户的权限
REVOKE R1
FROM U1;
(2)强制存取控制MAC
A:自主存取控制的隐患
自主存取控制(DAC)能够通过授权机制有效地控制对敏感数据的存取。但是由于用户对数据的存取权限是 “自主” 的,用户可以自由地决定将数据的存取权限授予何人,以及决定是否也将“授权”的权限授予别人。在这种授权机制下,仍可能存在数据的“无意泄露”。比如,甲将自己权限范围内的某些数据存取权限授权给乙,甲的意图是仅允许乙本人操纵这些数据。但甲的这种安全性要求并不能得到保证,因为乙一旦获得了对数据的权限,就可以将数据备份,获得自身权限内的副本,并在不征得甲同意的前提下传播副本。造成这一问题的根本原因就在于,这种机制仅仅通过对数据的存取权限来进行安全控制,而数据本身并无安全性标记
要解决这个问题,就需要对系统控制下的所有主客体实施强制存取控制策略
B:基本概念
强制存取控制:为保证更高程度的安全,对于任意对象,只有拥有合法许可证的用户才可以存取,它不是用户能直接感知和进行控制的。强制存取控制是对数据本身进行密级标记,无论数据如何复制,标记与数据是一个不可分的整体,只有符合密级标记要求的用户才可以操纵数据
C:主体和客体及敏感度标记
在强制存取控制中,数据库管理系统所管理的全部实体被分为主体和客体两大类
主体:是系统中活动实体,即包括数据库管理系统所管理的实际用户,也包括代表各用户的各进程
客体:是系统中的被动实体,是受主体操纵的,例如
- 文件
- 基本表
- 索引
- 视图
对于主体和客体,数据库管理系统为它们每个实例(值)指派一个敏感度标记(label),分为若干个级别
- 绝密(TS)
- 机密(S)
- 可信(C)
- 公开(P)
其中
D:强制存取规则
主体的敏感度标记称之为许可证级别;客体的敏感度标记称之为密级。强制存取控制机制就是通过对比许可证级别和密级,依次确定主体是否能够存取客体
当某一用户(或某一主体)以标记label
注册入系统时,系统要求他对任何客体的存取必须遵循如下规则:
- 仅当主体的许可证级别大于或等于客体的密级时,该主体才能读取相应的客体
- 仅当主体的许可证级别小于或等于客体的密级时,该主体才能写相应的客体
(3)DAC与MAC共同构成DBMS的安全机制
系统首先进行自主存取控制检查,对通过自主存取控制检查的允许存取的数据库对象再由系统自动进行强制存取控制检查,只有通过强制存取控制检查的数据库对象方可存取
三:视图
视图机制:通过视图机制把要保密的数据对无权存取的用户隐藏起来,从而自动对数据提供一定程度的安全保护
演示: 在某大学中,假定王平老师只能检索计算机系学生的信息,系主任张明具有检索和增删改计算机系学生信息的所有权限
CREATE VIEW CS_Student
AS
SELECT *
FROM Student
WHERE Sdept='CS';
GRANT SELECT
ON CS_Student
TO 王平;
GRANT ALL PRIVILEGES
ON CS_Student
TO 张明;
四:审计
(1)基本概念
审计:审计功能把用户对数据库的所有操作自动记录下来放入审计日志(audit log)中。审计员可以利用审计日志监控数据库中的各种行为,重现导致数据库现有状况的一系列事件,找出非法存取数据的人、时间和内容等。还可以通过对审计日志分析,对潜在的威胁提前采取措施加以防范
- 审计很费时间和空间,所以DBMS往往将审计功能设置为可选
- 可审计的事件有服务器事件、系统权限、语句事件及模式对象事件,还包括用户鉴别、DAC和MAC
- 审计分为用户级审计和系统级审计
- 审计既能记录成功也即记录失败
(2)AUDIT语句和NOAUDIT语句
AUDIT
语句和NOAUDIT
语句分别用来设计审计功能和取消审计功能
演示:
AUDIT ALTER,UPDATE //对SC表结构或修改SC表数据的操作进行审计
ON SC
NOAUDIT ALTER,UPDATE
ON SC
五:数据加密
(1)基本概念
数据加密:将明文转换密文,从而无法获知数据的内容,是防止数据库中的数据在存储和传输中失密的有效手段
(2)分类
A:存储加密
非透明存储加密: 通过多个加密函数实现的
透明存储加密: 是内核级加密保护方式,对用户完全透明
- 是数据在写到磁盘时对数据进行加密,授权用户读取数据时再对其进行解密。由于数据加密对用户透明,数据库的应用程序不需要做任何修改,只需在创建表语句中说明需加密的字段即可。当对加密数据进行增、删、改、查询操作时,数据库管理系统将自动对数据进行加、解密工作。基于数据库内核的数据存储加密、解密方法性能较好,安全完备性较高
B:传输加密
①:链路加密
对传输数据在链路层进行加密,它的传输信息由报头和报文两部分组成,前者是路由选择信息,而后者是传送的数据信息。这种方式对报文和报头均加密
②:端到端加密
对传输数据在发送端加密,接收端解密。它只加密报文,不加密报头。与链路加密相比,它只在发送端和接收端需要密码设备,而中间节点不需要密码设备,因此它所需密码设备数量相对较少。但这种方式不加密报头,从而容易被非法监听者发现并从中获取敏感信息
标签:加密,存取控制,六节,数据库,用户,权限,数据,安全性 From: https://blog.51cto.com/u_14913756/6065109