第四章 数据库安全性
数据库的数据保护主要包括数据的安全性和完整性。
4.1 数据库安全性概述
数据库的安全性是指保护数据库以防不合法使用所造成的数据泄露,更改或破坏。
安全性:去银行取钱需要输入密码
完整性:取的钱需要小于等于卡里面的钱
4.1.1 数据库的不安全因素
- 非授权用户对数据库的恶意存取和破坏
- 数据库中重要或敏感的数据被泄露
- 安全环境的脆弱性
4.2 数据库安全性控制
存取控制(AC–Acess Control)
- 自主存取控制方法(DAC):
用户对于不同的数据库对象有不同的存取权限,不同的用户对同一对象也有不同的权限,而且用户还可以将其拥有的存取权限转授给其他用户。非常灵活。主要通过SQL的GRANT语句和REVOKE语句来实现。 - 强制存取控制方法(MAC)
每一个数据库对象被标以一定的密级,每一个用户也被授予某一个级别的许可证。对于任意一个对象,只有具有合法许可证的用户才可以存取。较为严格。
基于角色访问控制(RBAC—Role-Based Acess Control)
数据库的安全性,主要包括身份鉴定、多层存取控制、审计、视图和数据加密等安全技术。
存取控制流程:
- 首先,数据库管理系统对提出SQL访问请求的数据库用户进行身份验证,防止不可信用户使用
- 然后,在SQL处理层进行自主存取控制和强制存取控制,进一步可以进行推理控制
- 还可以对用户访问行为和系统关键操作进行审计,对异常用户行为进行简单入侵检测
4.2.1 用户身份鉴别
用户身份鉴别是数据库管理系统提供的最外层安全保护措施。
每个用户在系统中都有一个用户标识。
每个用户标识都由 用户名(user name) 和**用户标识号(UID) **两部分组成。
静态口令鉴别
- 其实就是输入密码。所以,这种方式虽然简单,但容易被攻击,安全性较低。
动态口令鉴别
- 通过生物特征进行认证。例如指纹,虹膜和掌纹等。安全性较高
智能卡鉴别
- 智能卡是一种不可复制的硬件,内置集成电路的芯片,具有硬件加密功能。(就比如你去银行取钱,需要出示的不仅是银行卡号,还有身份证一样)。
4.2.3 自主存取控制方法
用户权限是由两个要素组成:数据库对象和操作类型。(用户可以在数据库的哪些对象上进行哪些操作)在数据库系统中,定义存取权限称为授权。
在关系数据库系统中,存取控制对象不仅有数据本身(基本表中的数据,属性列上的数据),还有数据库模式(包括数据库、基本表、视图和索引的创建等)。
4.2.4 授权:授予与收回
SQL中使用==GRANT(授予)和REVOKE(收回)==语句向用户授予或收回数据的操作权限。
GRANT语法格式:
GRANT<权限>[,<权限>]...
ON <对象类型><对象名>[,<对象类型><对象名>]...
TO <用户>[,<用户>]...
[WITH GRANT OPTION]
如果添加了WITH GRANT OPTION子句,则获得某种权限的用户还可以把这种权限再授予给其他用户,但是不允许循环授权,即被授予者不能再把权限授予给授权者或祖先。
#把查询Student表的权限授予给用户U1
GRANT SELECT
ON TABLE Student
TO U1;
#把对Student和Course表的全部权限授予给用户U2和U3
GRANT ALL PRIVILEGES
ON TABLE Student,Course
TO U2,U3;
#把对SC表的查询权限给所有用户
GRANT SELECT
ON TABLE SC
TO PUBLIC;
#把查询Student表和修改学生学号的权限给U1
#注意:对属性列授权时必须明确指出相应的属性列名
GRANT SELECT,UPDATE(Sno)
ON TABLE Studnet
TO U1;
REVOKE语法格式:
REVOKE <权限>[,<权限>]...
ON <对象类型><对象名>[,<对象类型><对象名>]...
FROM <用户>[,<用户>]...[CASCADE|RESTRICT];
#把用户U4修改学生学号的权限收回
REVOKE UPDATE(Sno)
ON TABEL Student
FROM U4;
#假设U5还将INSERT权限授予给了U6用户,现在把用户U5对SC表的INSERT权限收回
REVOKE INSERT
ON TABLE SC
FROM U5 CASCADE;
#注意:这里使用的是CASCADE,有的数据库管理系统默认为RESTRICT,将自动执行级联删除。
创建数据库模式的权限
CREAT USER <username>[WITH][DBA|RESOURCE|CONNECT];
- 只有系统的超级用户才能授权创建一个新的数据库用户
- 新创建的数据库用户有三种权限:CONNECT,RESOURCE,DBA
- 如果创建时没有指定权限,默认为CONNECT权限。拥有CONNECT 权限的用户只能登录数据库。
- 拥有RESOURCE权限的用户能创建基本表和视图,成为所创建对象的属主,但不能创建模式,不能创建新用户。可以使用GRANT将权限授予给其他用户。
- 拥有DBA权限的用户是超级用户—无所不能。
4.2.5 数据库角色
数据库角色是被命名的一组与数据库操作有关的权限,角色是权限的集合。 使用角色来管理数据库权限可以简化授权的过程。
在SQL中首先用CREAT ROLE 语句创建角色,然后用GRANT语句角色授权,用REVOKE语句回收授予角色的权限。
1.角色的创建
CREAT ROLE <角色名>
2.给角色授权
GRANT <权限>[,<权限>]...
ON <对象类型> 对象名
TO <角色>[,<角色>]...
3.将一个角色授予给其他的角色或用户
GRANT <角色1>[,<角色2>]...
TO <角色3>[,<用户1>].</