《数据库系统概论》- 课本理论整理04之数据库安全性
数据库的数据保护主要包括数据的【安全性】和【完整性】
数据库的安全性是指保护数据库以防止不合法使用所造成的数据泄露、更改或破坏。
数据库的不安全因素以下方面
数据库安全性控制
- 系统根据用户的标识进行用户身份鉴定。
- 对合法用户进行存取控制只允许进行合法操作。
- 操作系统自身保护措施。
- 数据按需加密存储。
用户身份鉴别(User Authentication)
存取控制(Access Control)
自主存取控制方法(Discretionary Access Control)
SQL中进行存取控制(Access-Control)通过【GRANT】和【REVOKE】实现
grant v. (合法地)授予,允许;(勉强)承认,同意 ; revoke vt. 撤回,取消;废除
在关系数据库系统中,主要的存取权限
对象类型 | 对象 | 操作类型 |
---|---|---|
数据库模式 | 模式 | CREATE SCHEMA |
数据库模式 | 基本表 | CREATE TABLE,ALTER TABLE |
数据库模式 | 视图 | CREATE VIEW |
数据库模式 | 索引 | CREATE INDEX |
数据 | 基本表和视图 | SELECT、INSERT、UPDATE、DELETE、REFERENCES、ALL PRIVILEGES |
数据 | 属性列 | SELECT、INSERT、UPDATE、REFERENCES、ALL PRIVILEGES |
授权:【授予-GRANT】与【收回-REVOKE】
GRANT - 授予用户权限
格式:
GRANT [权限],...... ON <对象类型>对象名,...... TO <用户>,...... [WITH GRANT OPTION]
语义: 将对【指定操作对象】的【指定操作权限】【授予】【指定用户】
发出GRANT语句的用户是DBA、数据库对象创建者、已经拥有该权限的用户。
接受权限的用户可以是一个或多个
若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;
[把对表SC的查询权限授予所有用户]
GRANT SELECT ON TABLE SC TO PUBLIC;
[把查询student表和修改学生学号的权限授给用户U4]
GRANT SELECT,UPDATE(Sno) ON TABLE student TO U4;
对属性列授权时必须明确指出相应的属性列名
[把对表SC的INSERT权限授予U5用户,并允许将此权限再授予其他用户(保证权限的传播性)]
GRANT INSERT ON TABLE SC TO U5 WITH GRANT OPTION
REVOKE - 撤销指定用户对指定数据库对象的指定操作权限
格式:
REVOKE <权限>, ...... ON <对象类型>, ...... FROM <用户>, [CASCADE|RESTRICT];
[把用户U4修改学号的权限收回]
REVOKE UPDATE(Sno) ON 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)收回了U6和U7的INSERT权限,否则系统将拒绝执行该命令。
创建数据库模式的权限
对创建数据库模式一类的数据库对象授权由DBA在创建用户时实现
格式:
CREATE USER <username> [WITH][DBA|RESOURCE|CONNECT];
数据库角色
数据库角色是被命名为一组与数据库操作相关的权限,角色是权限的集合。
格式:
[1. 角色的创建]
CREATE ROLE <角色名>
[2. 给角色授权]
GRANT <权限>, ...... ON <对象类型> 对象名 TO <角色>, ......
[3. 将一个角色授予给其他的角色或用户]
GRANT <角色>, ...... TO <用户>, ...... [WITH ADMIN OPTION]
如果指定了
WITH ADMIN OPTION
子句,则获得某种权限的角色或用户还可以把这种权限再授予其他的角色。
一个角色包含的权限 = 直接授予这个角色的全部权限 + 其他角色授予这个全部权限
[4. 角色权限的收回]
REVOKE <权限>, ...... ON <对象类型><对象名> FROM <角色>, ......
角色使用案例
[1. 创建一个角色]
CREATE ROLE R1;
[2. 使用GRANT语句,使得角色R1拥有student表的SELECT、UPDATE、INSERT权限]
GRANT SELECT,UPDATE,INSERT ON TABLE student TO R1;
[3. 将这个角色授予王平、张明、赵玲,使他们具有角色R1所包含的全部权限]
GRANT R1 TO 王平,张明,赵玲;
[4. 一次性通过R1来收回王平的三个权限]
REVOKE R1 FROM 王平;
[5. 角色的权限修改]
GRANT DELETE ON TABLE student TO R1
让角色R1在原来的基础上增加了student表的DELETE权限
[6. 减少角色的权限]
REVOKE SELECT ON TABLE Student FROM R1;
数据库角色是一组权限的集合。使用角色来管理数据库权限简化授权的过程
强制存取控制方法(mandatory access control)
自主存取控制方法将存取的权限按照具有对某种数据库对象的操作的指定用户自由的将数据的存取权限授予他人
这种授权机制,存在数据的“无意泄露”,eg: 甲方将自己权限范围内的数据存取权限授权给乙方,甲方的本意是只允许乙方操作所授权的数据
但是乙方一旦获得对数据的权限,可以随意将数据备份获得自身权限内的副本,并能在不争的甲方同意的情况下随意分发数据。
Discretionary Access Control通过对数据的存取权限进行安全控制而数据本身并无安全性标记。
为解决上述问题对系统控制下的所有主客体实施强制存取控制策略
DBMS中所有的实体被分为主体和客体两大类
强制存取控制机制就是通过对比主体的敏感度标记和客体的敏感度标记,最终确定主体是否能存取客体
某一用户(主体)以标记lable注册入系统时,系统要求其对任何客体的存在遵循如下规则:
- 仅当主体的许可证级别【大于或等于】客体密级的时候,该主体才能读取相应的客体。
- 仅当主体的许可证级别【小于或等于】客体密级的时候,该主体才能写入相应的客体。
用户可以为写入的数据对象赋予高于自己的许可证级别的密级,这样一旦数据被写入,该用户自己也不能再读该数据对象了
如果违反该规则则可能把数据的密级从高流向低造成数据泄露。
【强制存取控制】对数据本身进行【密级标记】
无论数据如何复制,标记与数据是不可分割的整体,只有符合密级标记要求的用户才可以操纵数据,从而提高更高级别的安全性。
自动存取控制和强制存取控制共同构成DBMS的安全机制
系统首先进行DAC检查,对通过DAC检查允许存取的数据库对象再由系统自动进行MAC检查,只有通过MAC检查的数据对象才能存取。
视图机制
通过视图机制把要保密的数据对无权存取的用户隐藏起来,从而自动对数据提供一定程序的安全保护。
案例:
王平老师只能检索计算机学生的信息,系主任张明有全部的权限去管理学生信息可以在不支持谓词的系统中先建立计算机系学生的视图CS_Student然后在视图上增加存取权限。
[建立计算机系学生视图,对该视图的SELECT权限授予王平,把该视图的所有权限授予张明]
/*建立计算机系学生信息的视图*/ CREATE VIEW CS_Student AS SELECT * FROM Student WHERE Sdept = 'CS'; /*将视图的SELECT权限赋予王平*/ GRANT SELECT ON CS_Student TO 王平; /*系主任具有对计算机系学生信息的全部操作权限*/ GRANT ALL PRIVILEGES ON CS_Student TO 张明;
审计
审计功能:把用户对DB的所有操作自动记录下来放入审计日志(audit log)中,审计员可以利用审计日志监控数据库中的各种行为,重现导致数据库现有状况的一系列事件,
找出非法存取数据的人、时间和内容。或通过对审计日志分析,对潜在的威胁提前采取必要措施加以防范;
AUDIT和NOAUDIT语句
案例
[对修改SC表结构或修改SC表数据的操作进行审计]
AUDIT ALTER,UPDATE ON SC;
[取消对SC表的一切审计]
NOAUDIT ALTER,UPDATE ON SC;
审计设置以及审计日志均在数据字典中,必须把审计开关打开即(audit_trail设为true),才可以在系统表SYS_AUDITTRAIL中看到审计信息
DB安全设计系统是一种事后检查的安全机制。安全审计机制将特定用户或特定对象相关的操作记录记录到系统审计日志中,作为后续对操作的查询分析和追踪的依据
通过审计机制,可以约束用户可能的恶意操作。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具