Hi,我是无丶味,这篇博客是我对数据库安全性的一些总结以及记录一下我的学习。
记得养好好习惯:先赞后看
文章目录
数据库安全性控制
非法使用数据库的情况
①编写合法程序绕过数据库管理系统及其授权机制
②直接或编写应用程序执行非授权操作
③通过多次合法查询数据库从中推导出一些保密数据
计算机系统的安全模型
系统根据用户标识鉴定用户身份,合法用户才准许进入计算机系统
数据库管理系统还要进行存取控制,只允许用户执行合法操作
操作系统有自己的保护措施
数据以密码形式存储到数据库中
数据库管理系统安全性控制模型
数据库安全性控制流程及常用方法:
①用户标识和鉴定
用户身份鉴别方法:
1.静态口令鉴别
2.动态口令鉴别
3.生物特征鉴别
4.智能卡鉴别
②存取控制
常用存取控制方法:
自主存取控制
通过 SQL 的GRANT 语句和REVOKE 语句实现
用户权限组成:数据对象、操作类型
定义用户存取权限:定义用户可以在哪些数据库对象上进行哪些类型的操作
定义存取权限称为授权
关系数据库系统中的存取权限
强制存取控制
强制存取控制规则
(1)仅当主体的许可证级别大于或等于客体的密级时,该主体才能读取相应的客体
例如银行的高管可以看到别人的帐户余额,而不能修改余额
(2)仅当主体的许可证级别小于或等于客体的密级时,该主体才能写相应的客体
例如银行的员工可以修改余额,但不能看到余额
强制存取控制(MAC)是对数据本身进行密级标记,无论数据如何复制,标记与数据是一个不可分的整体,只有符合密级标记要求的用户才可以操纵数据。
实现强制存取控制时要首先实现自主存取控制
原因:较高安全性级别提供的安全保护要包含较低级别的所有保护
自主存取控制与强制存取控制共同构成数据库管理系统的安全机制
先进行自主存取控制检查,通过自主存取控制检查的数据对象再由系统进行强制存取控制检查,只有通过强制存取控制检查的数据对象方可存取。
③视图
④审计
⑤数据加密
防止数据库中数据在存储和传输中失密的有效手段
加密的基本思想
根据一定的算法将原始数据—明文(Plain text)变换为不可直接识别的格式—密文(Cipher text)
加密方法:
1.存储加密
2.传输加密
存储加密:
①透明存储加密
内核级加密保护方式,对用户完全透明
将数据在写到磁盘时对数据进行加密,授权用户读取数据时再对其进行解密
数据库的应用程序不需要做任何修改,只需在创建表语句中说明需加密的字段即可
内核级加密方法: 性能较好,安全完备性较高
②非透明存储加密
通过多个加密函数实现
传输加密
链路加密:
在链路层进行加密
传输信息由报头和报文两部分组成
报文和报头均加密
端到端加密:
在发送端加密,接收端解密
只加密报文不加密报头
所需密码设备数量相对较少,容易被非法监听者发现并从中获取敏感信息
其他安全性保护
推理控制:
处理强制存取控制未解决的问题
避免用户利用能够访问的数据推知更高密级的数据
常用方法:
基于函数依赖的推理控制
基于敏感关联的推理控制
隐蔽信道:
处理强制存取控制未解决的问题
数据隐私保护:
描述个人控制其不愿他人知道或他人不便知道的个人数据的能力
范围很广:数据收集、数据存储、数据处理和数据发布等各个阶段
授权:授予与回收
1.GRANT
GRANT语句的一般格式:
GRANT <权限>[,<权限>]...
ON <对象类型> <对象名>[,<对象类型> <对象名>]…
TO <用户>[,<用户>]...
[WITH GRANT OPTION];
语义:将对指定操作对象的指定操作权限授予指定的用户
谁可以发出GRANT:
1.数据库管理员
2.数据库对象创建者(即属主Owner)
3.拥有该权限的用户
接受权限的用户 :
1.一个或多个具体用户
2.PUBLIC(即全体用户)
WITH GRANT OPTION子句:
指定:可以再授予
没有指定:不能传播
不允许循环授权
例
把查询Student表权限授给用户U1
GRANT SELECT
ON TABLE Student
TO U1;
把对Student表和Course表的全部权限授予用户U2和U3
GRANT ALL PRIVILIGES
ON TABLE Student,Course
TO U2,U3;
把查询Student表和修改学生学号的权限授给用户U4
GRANT UPDATE(Sno), SELECT
ON TABLE Student
TO U4;
2.REVOKE
授予的权限可以由数据库管理员或其他授权者用REVOKE语句收回
REVOKE语句的一般格式为:
REVOKE <权限>[,<权限>]...
ON <对象类型> <对象名>[,<对象类型><对象名>]…
FROM <用户>[,<用户>]...[CASCADE | RESTRICT];
例
把用户U4修改学生学号的权限收回
REVOKE UPDATE(Sno)
ON TABLE Student
FROM U4;
数据库管理员:
拥有所有对象的所有权限
根据实际情况不同的权限授予不同的用户
用户:
拥有自己建立的对象的全部的操作权限
可以使用GRANT,把权限授予其他用户
被授权的用户:
如果具有“继续授权”的许可,可以把获得的权限再授予其他用户
所有授予出去的权力在必要时又都可用REVOKE语句收回
数据库角色
数据库角色:被命名的一组与数据库操作相关的权限
角色是权限的集合
可以为一组具有相同权限的用户创建一个角色
简化授权的过程
1.角色的创建
CREATE ROLE <角色名>
例:
创建一个角色 R1:
CREATE ROLE R1;
2.给角色授权
GRANT <权限>[,<权限>]…
ON <对象类型>对象名
TO <角色>[,<角色>]…
使用GRANT语句,使角色R1拥有Student表的 SELECT、UPDATE、INSERT权限
GRANT SELECT, UPDATE, INSERT
ON TABLE Student
TO R1;
3.将一个角色授予其他的角色或用户
GRANT <角色1>[,<角色2>]…
TO <角色3>[,<用户1>]…
[WITH ADMIN OPTION]
将这个角色授予王平,张明,赵玲。使他们具有角色R1所包含的全部权限
GRANT R1
TO 王平,张明,赵玲;
该语句把角色授予某用户,或授予另一个角色
授予者是角色的创建者或拥有在这个角色上的ADMIN OPTION
指定了WITH ADMIN OPTION则获得某种权限的角色或用户还可以把这种权限授予其他角色
一个角色的权限:直接授予这个角色的全部权限加上其他角色
授予这个角色的全部权限
4.角色权限的收回
REVOKE <权限>[,<权限>]…
ON <对象类型> <对象名>
FROM <角色>[,<角色>]…
可以一次性通过R1来回收王平的这3个权限
REVOKE R1
FROM 王平;
用户可以回收角色的权限,从而修改角色拥有的权限
REVOKE执行者是
角色的创建者
拥有在这个(些)角色上的ADMIN OPTION