数据库安全性问题的提出:
· 数据库的一大特点是数据共享
· 数据共享必然带来数据库的安全性问题
· 数据库系统中的数据共享不能是无条件的共享
数据库的安全性: 保护数据库以防止不合法使用所造成的数据泄露、更改或破坏 。
系统安全保护措施是否有效是数据库系统主要的性能指标之一。
数据库安全性控制
1、用户标识与鉴别
(1)静态口令鉴别
静态口令一般由用户自己设定,这些口令是静态不变的
(2)动态口令鉴别
口令是动态变化的,每次鉴别时均需使用动态产生的新口令登录数据库管理系统,即采用一次一密的方法
(3)生物特征鉴别
通过生物特征进行认证的技术,生物特征如人脸、指纹等
(4)智能卡鉴别
智能卡是一种不可复制的硬件,内置集成电路的芯片,具有硬件加密功能
2、存取控制
存取控制机制组成
· 定义用户权限
DBMS提供适当的语言来定义用户权限,存放在数据字典中,称做安全规则或授权规则
· 合法权限检查
用户发出存取数据库操作请求,DBMS查找数据字典,进行合法权限检查
用户权限定义和合法权检查机制一起组成了DBMS的存取控制子系统
常用存取控制方法:
· 自主存取控制(DAC)
· 用户对不同的数据对象有不同的存取权限
· 不同的用户对同一对象也有不同的权限
· 用户还可将其拥有的存取权限转授给其他用户
· 强制存取控制(MAC)
· 每一个数据对象被标以一定的密级
· 每一个用户也被授予某一个级别的许可证
· 对于任意一个对象,具有合法许可证的用户才可以存取
3、自主存取控制方法
通过 SQL 的 GRANT 语句和 REVOKE 语句实现
定义用户存取权限:定义用户可以在哪些数据库对象上进行哪些操作
4、授权:授予与回收
(1)GRANT
GRANT <权限>[,<权限>]…
ON <对象类型> <对象名>[,<对象类型> <对象名>]…
TO <用户>[,<用户>]…
[WITH GRANT OPTION];
WITH GRANT OPTION子句:
指定:可以再授予
没有指定:不能传播
语义:将对指定操作对象的指定操作权限授予指定的用户
注:
(1)主码使用过就不能改
(2)不能循环授权
例4.1 把查询Student表权限授给用户U1
GRANT SELECT
ON TABLE Student
TO U1;
要先建立U1才行
参照 2019-2020春学期】数据库作业4:SQL练习1 - CREATE / DROP / ALTER 建立用户wang的步骤
出现该问题,要将登录名选择一个没用过的登录名,即新建用户成功。
运行结果:
应去掉TABLE
GRANT SELECT
ON Student
TO U1;
成功后在用户U1 右键->属性->安全对象 会有Student
例4.2 把对Student表和Course表的全部权限授予用户U2和U3
GRANT ALL PRIVILIGES
ON Student,Course
TO U2,U3;
报错:,附近有语法错误错误
将两个表分开授权
GRANT ALL PRIVILEGES
ON Student
TO U2,U3;
GRANT ALL PRIVILEGES
ON Course
TO U2,U3;
ALL 权限已不再推荐使用,并且只保留用于兼容性目的。它并不表示对实体定义了 ALL 权限。
例4.3 把对表SC的查询权限授予所有用户
GRANT SELECT
ON SC
TO PUBLIC;
例4.4 把查询Student表和修改学生学号的权限授给用户U4
GRANT UPDATE(Sno), SELECT
ON Student
TO U4;
对属性列的授权时必须明确指出相应属性列名
例4.5 把对表SC的INSERT权限授予U5用户,并允许他再将此权限授予其他用户
GRANT INSERT
ON SC
TO U5
WITH GRANT OPTION;
执行例4.5后,U5不仅拥有了对表SC的INSERT权限, 还可以传播此权限:
例4.6
GRANT INSERT
ON SC
TO U6
WITH GRANT OPTION;
同样,U6还可以将此权限授予U7:
例4.7
GRANT INSERT
ON SC
TO U7;
但U7不能再传播此权限。
(2)REVOKE
语句的一般格式为:
REVOKE <权限>[,<权限>]...
ON <对象类型> <对象名>[,<对象类型><对象名>]…
FROM <用户>[,<用户>]...[CASCADE | RESTRICT];
例4.8 把用户U4修改学生学号的权限收回
REVOKE UPDATE(Sno)
ON Student
FROM U4;
例4.9 收回所有用户对表SC的查询权限
REVOKE SELECT
ON SC
FROM PUBLIC;
例4.10 把用户U5对SC表的INSERT权限收回
REVOKE INSERT
ON SC
FROM U5 CASCADE ;
· 将用户U5的INSERT权限收回的时候应该使用CASCADE,否则拒绝执行该语句
**·**如果U6或U7还从其他用户处获得对SC表的INSERT权限,则他们仍具有此权限,系统只收回直接或间接从U5处获得的权限
5、数据库角色
角色(ROLE):
被命名的一组与数据库操作相关的权限
(1)角色是权限的集合。可以为一组具有相同权限的用户创建一个角色。
(2)优点:简化授权的过程
1.角色的创建
CREATE ROLE <角色名>
2.给角色授权
GRANT <权限>[,<权限>]…
ON <对象类型>对象名
TO <角色>[,<角色>]…
3.将一个角色授予其他的角色或用户
GRANT <角色1>[,<角色2>]…
TO <角色3>[,<用户1>]…
[WITH ADMIN OPTION]
(1)该语句把角色授予某用户,或授予另一个角色
(2)授予者是角色的创建者或拥有在这个角色上的ADMIN OPTION
(3)指定了WITH ADMIN OPTION则获得某种权限的角色或用户还可以把这种权限授予其他角色
一个角色的权限:直接授予这个角色的全部权限加上其他角色授予这个角色的全部权限
4.角色权限的收回
REVOKE <权限>[,<权限>]…
ON <对象类型> <对象名>
FROM <角色>[,<角色>]…
(1)用户可以回收角色的权限,从而修改角色拥有的权限
(2)REVOKE执行者是:
<1>角色的创建者
<2>拥有在这个(些)角色上的ADMIN OPTION
例4.11 通过角色来实现将一组权限授予一个用户。
步骤如下:
(1)首先创建一个角色 R1
CREATE ROLE R1;
(2)然后使用GRANT语句,使角色R1拥有Student表的SELECT、UPDATE、INSERT权限
GRANT SELECT, UPDATE, INSERT
ON Student
TO R1;
(3)将这个角色授予王平,张明,赵玲。使他们具有角色R1所包含的全部权限
GRANT R1
TO U1,U2,U3;
错误:“R1”附近有语法错误。
手动为R1添加角色成员
用U1,U2,U3代替王平,张明,赵玲
(4) 可以一次性通过R1来回收王平的这3个权限
REVOKE R1
FROM U1;
错误:“R1”附近有语法错误。
手动删除
例4.12 角色的权限修改
GRANT DELETE
ON Student
TO R1;
使角色R1在原来的基础上增加了Student表的DELETE 权限
例4.13 使R1减少了SELECT权限
REVOKE SELECT
ON TABLE Student
FROM R1;
6、强制存取控制方法
自主存取控制的缺点:
可能存在数据的“无意泄露”
原因:这种机制仅仅通过对数据的存取权限来进行安全控制,而数据本身并无安全性标记
解决:对系统控制下的所有主客体实施强制存取控制策略
强制存取控制(MAC)
(1)保证更高程度的安全性
(2)用户不能直接感知或进行控制
(3)适用于对数据有严格而固定密级分类的部门
<1> 军事部门
<2> 政府部门
在强制存取控制中,数据库管理系统所管理的全部实体被分为主体和客体两大类
主体是系统中的活动实体( 数据库管理系统所管理的实际用户)
客体是系统中的被动实体( 文件、基本表、索引、视图)
敏感度标记(Label)
(1) 对于主体和客体,DBMS为它们每个实例(值)指派一个敏感度标记(Label)
(2) 敏感度标记分成若干级别
· 绝密(Top Secret,TS)
· 机密(Secret,S)
· 可信(Confidential,C)
· 公开(Public,P)
TS>=S>=C>=P
主体的敏感度标记称为许可证级别(Clearance Level)
客体的敏感度标记称为密级(Classification Level)
强制存取控制规则
(1)仅当主体的许可证级别大于或等于客体的密级时,该主体才能读相应的客体
(2)仅当主体的许可证级别小于或等于客体的密级时,该主体才能写相应的客体
简记为:向上读;向下写
视图机制
把要保密的数据对无权存取这些数据的用户隐藏起来,对数据提供一定程度的安全保护
间接地实现支持存取谓词的用户权限定义
例4.14 建立计算机系学生的视图,把对该视图的SELECT权限授于王平,把该视图上的所有操作权限授于张明
(1)先建立计算机系学生的视图CS_Student
CREATE VIEW CS_Student
AS
SELECT *
FROM Student
WHERE Sdept='CS';
(2)在视图上进一步定义存取权限
GRANT SELECT
ON CS_Student
TO 王平;
GRANT ALL PRIVILIGES
ON CS_Student
TO 张明;
审计(Audit)
审计日志(Audit Log):
将用户对数据库的所有操作记录在上面
审计员利用审计日志:
监控数据库中的各种行为,找出非法存取数据的人、时间和内容。
审计功能的可选性:
(1)审计很费时间和空间
(2)DBA可以打开或关闭审计功能
(3)审计功能主要用于安全性要求较高的部门
AUDIT语句和NOAUDIT语句:
AUDIT语句:设置审计功能
NOAUDIT语句:取消审计功能
例4.15 对修改SC表结构或修改SC表数据的操作进行审计
AUDIT ALTER,UPDATE
ON SC;
报错:“,”附近有语法错误。
没想清楚为什么,也没找到合适的解释,应该是语句不适用
例4.16 取消对SC表的一切审计
NOAUDIT ALTER,UPDATE
ON SC;
错误同上。
心得体会:磨磨蹭蹭做了好几天,拖延症伤不起。主要是看ppt和百度理解,解决一些问题。现在已经基本理解了,写博客的时候,把ppt的内容又过了一遍。