数据库系统概论笔记(4)
第4章数据库安全性
4.1数据库安全性概述
数据库安全性:保护数据库防止不合法使用所造成的数据泄露、更改或破坏
数据库的不安全因素
- 非授权用户对数据库的恶意存取和破坏
- 数据库中重要或敏感的数据被泄露
- 安全环境的脆弱性
安全标准简介
CC:通用准则(一个IT安全准则,是国际标准,也是国家标准)
从四个方面来描述安全级别划分的指标:安全策略、责任、保证、文档
(课程主要围绕C2讲)
4.2数据库安全性控制
超级用户(DBA)->账户级别(程序员用户)->关系级别(普通用户)
用户身份鉴别
定位:最外层安全保护措施
每个系统中都有一个用户标识(用户标识由用户名(user name)、用户标识号(UID)两部分组成,UID在整个生命周期内是唯一的)
常用的用户身份鉴别方法:
- 静态口令鉴别:
当前常用的鉴别方法,一般由用户自己设定 - 动态口令鉴别:
目前较为安全的鉴别方式,口令是动态变化的 - 生物特征鉴别:
通过生物特征进行认证的技术 - 智能卡识别
存取控制
存取控制机制包括:定义用户权限、合法权限检查
这两个机制组成了DBMS的存取控制子系统
- 定义用户权限
将用户权限登记到数据字典当中 - 合法权限检查
DBMS查找数据字典,按照安全规则进行合法权限检查
两类方法:
- 自主存取控制(C1级支持)
同一用户对不同数据库对象有不同的权限,不同用户对同一数据库对象也有不同的权限
授权用户可以将权限转授给其他用户 - 强制存取控制(B1级支持)
任意一个对象,只有具有合法许可证的用户才可以存取
自主存取控制方法
用户权限由两个要素组成:数据库对象和操作类型
定义存取权限称为授权
存取控制的对象不仅有数据本身,还有数据库模式
授权:授予与收回
GRANT
授予,REVOKE
收回
GRANT
:
语义:将对指定操作对象的指定操作权限授予指定的用户
被授权的用户还可以把这种权限再授予其他用户(但不允许循环授权)
一般格式:
GRANT <权限> [,<权限>]... ON <对象类型> <对象名> [,<对象类型> <对象名>]... TO <用户> [,<用户>]... //可以是一个或多个用户,PUBLIC代表全体用户 [WITH GRANT OPTION]; 例: 单权限 单用户 GRANT SELECT ON TABLE Student TO U1; 所有权限 单用户 GRANT ALL PRIVILEGES ON TABLE Student,Course TO U2,U3; 单权限 所有用户 GRANT SELECT ON TABLE SC TO PUBLIC; 多指定权限 单用户 GRANT UPDATE(Sno),SELECT ON TABLE Student TO U4 WITH GRANT OPTION; //允许传播权限
REVOKE
:
授予用户的权限可由数据库管理员或其他授权者用REVOKE
语句收回
若用户权限级联其他用户权限,且无声明CASCADE,权限收回会拒绝
一般格式:
REVOKE <权限> [,<权限>]... ON <对象类型> <对象名> [,<对象类型> <对象名>]... FROM <用户> [,<用户>] ... [CASCADE|RESTRICT]; //默认RESTRICT,CASCADE是级联收回
- 创建数据库模式的权限
只有超级用户才有权创建一个新的数据库用户
新创建的数据库用户有三种权限:CONNECT
,RESOURCE
,DBA
一般格式:
CREATE USER <username> [WITH][DBA|RESOURCE|CONNECT];
(CREATE USER
不是SQL标准)
数据库角色
数据库角色:是被命名的一组与数据库操作相关的权限,角色是权限的集合
//角色的创建 CREATE ROLE <角色名> //给角色授权 GRANT <权限> [,<权限>]... ON <对象类型> <对象名> TO <角色> [,<角色>]... //将一个角色授予其他的角色或用户 GRANT <角色1> [,<角色2>]... TO <角色3> [,<用户1>]... [WITH ADMIN OPTION] //被授权的角色是否可以传播权限 //角色权限的收回 REVOKE <权限> [,<权限>]... ON <对象类型> <对象名> TO <角色> [,<角色>]...
强制存取控制方法
自主存取控制存在数据的“无意泄露”问题(因为用户对数据的存储权限是自主的,是可以将权限传播给其他人的)
在强制存取控制中,实体被分为主体和客体两大类
主体:系统中的活动实体
客体:系统中的被动实体(受主体操纵)
对于实体和客体,DBMS为它们每个实例指派一个敏感度标记
敏感度标记:分为绝密(TS)、机密(S)、可信(C)、公开(P)(TS>=S>=C>=P)
用户对客体的存取必须遵循的两个规则:
- 主体的许可级别>=客体级别,才能读取相应的客体
- 主体的许可级别<=客体级别,才能写入相应的客体(违反这条将造成数据密集从高流向低(数据泄露))
强制存取控制是对数据本身进行密级标记,无论数据如何复制,标记与数据是一个不可分割的整体,只有符合密级标记要求的用户才可以操纵数据,从而提供了更高级别的安全性
4.3视图机制
视图作用:为不同的用户定义不同的视图,把数据对象限制在一定的范围内
4.4审计
审计:把用户对数据库的所有操作自动记录下来放入审计日志
作用:提供了一种事后检查的安全机制
AUDIT语句和NOAUDIT语句
AUDIT
设置审计,NOAUDIT
取消审计
例: 对修改SC表的结构、修改SC表的数据的操作进行审计 AUDIT ALTER,UPDATE ON SC; 取消对SC表的一切审计 NOAUDIT ALTER,UPDATE ON SC;
4.5数据加密
基本思想:根据一定的算法将原始数据(明文)变换为不可直接识别的格式(密文)
数据加密主要包括:存储加密、传输加密
4.6其他安全性保护
另外的三种技术:推理控制、隐蔽信道、数据隐私保护
推理控制:利用能够访问的数据推知更高密级的数据
数据隐私:控制不愿被他人知道或他人不便知道的个人数据的能力
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律