notebooks
  • notebooks
  • _planning
    • 2022 OKR
    • basketball
    • swimming
  • communication
    • Dubbo
    • Kafka
    • Messaging
    • RPC
    • Thrift
  • computation
    • map-reduce
  • cs-basic-knowledge
    • computer-architecture
    • data-structure-and-algorithms
    • networks
    • os
  • devops
    • Docker
    • Linux
    • Prometheus
    • operations
    • security
    • trouble-shooting
  • distributed-knowledge
    • Zookeeper_CMD
    • distributed-system
  • game-engine
    • Unity
  • others
    • appium使用
  • protocols
    • http(s)协议
    • 官方链接
    • sip
  • storage
    • Elasticsearch
    • GuavaCache
    • MySQL
    • MySQL_CMD
    • NoSQL
    • Redis
    • Redis_CMD
  • system-design
    • system-design
  • tools
    • Git
    • IDEA
    • Mac
    • VScode
    • Vim
  • _working
    • doc-template
      • backend-design-review
      • correction-of-error
      • service-review
    • process
      • domain-backup
      • oncall
  • blogs
    • history
      • 8088/8086微处理器
      • 8088/8086指令系统
      • CSS-DOM
      • CSS定位
      • CSS工作原理
      • CSS控制背景
      • CSS浮动布局
      • CSS盒模型
      • Chrome开发者工具使用方法
      • DOM
      • Django Model模型层学习
      • Django-REST-framework Serializers学习
      • Django-REST-framework Views和ViewSets学习
      • Django View视图层学习
      • Gvim下Emmet安装及使用教程
      • HTTP协议简介
      • HashMap原理初探
      • JavaScript简史
      • JavaScript语法
      • Java内存模型和GC机制
      • Java基础——Lambda学习
      • Java基础——方法引用
      • Java基础——枚举类型
      • Java类加载机制
      • KMP算法
      • Kafka学习
      • Linux下用命令行编译Java程序
      • MathJax简介和基本用法
      • Python实现常见数据结构
      • Python装饰器总结
      • TCP协议的三次握手和四次挥手
      • Thrift学习
      • asyncio学习
      • markdown的常用语法
      • 修改hosts文件实现翻墙
      • 充实文档的内容
      • 关系数据库
      • 关系数据库标准语言SQL(一)
      • 关系数据库标准语言SQL(二)
      • 关系数据理论
      • 关系查询处理和查询优化
      • 内联元素和块级元素
      • 剑指offer算法题练习
      • 动态创建标记
      • 图形化用户界面
      • 在Eclipse中使用Maven构建Java Web项目
      • 增加微博秀遇到的一些问题
      • 处理机调度
      • 如何用github和hexo搭建个人博客
      • 存储管理
      • 存储系统的层次结构
      • 学习模仿lionhit网站首页的过程总结
      • 实用的GitHub小技巧
      • 并发控制
      • 循环与分支程序设计
      • 指令系统的设计
      • 指令级并行及其开发——硬件方法
      • 搭建自己的VPN服务器
      • 操作系统用户界面
      • 数据库安全性
      • 数据库完整性
      • 数据库恢复技术
      • 数据库绪论
      • 数据库编程
      • 数据库设计
      • 数据抽象
      • 文件系统
      • 文法和语言
      • 最佳实践
      • 案例研究:JavaScript图片库
      • 案例研究:图片库改进版
      • 汇编语言程序格式
      • 汇编语言程序设计基础知识
      • 流水线技术
      • 深度优先搜索和广度优先搜索
      • 牛客网——网易2017秋招编程题集合
      • 用JavaScript实现动画效果
      • 第一篇博客
      • 经典排序算法总结(Java实现)
      • 经典查找算法总结(Java实现)
      • 综合示例
      • 编译原理引论
      • 背包、队列和栈
      • 虚拟机安装Linux系统及常用软件
      • 计算机操作系统绪论
      • 计算机系统结构的基础知识
      • 设备管理
      • 设计模式之代理模式
      • 设计模式之单例模式
      • 设计模式之工厂模式
      • 设计模式之策略模式
      • 设计模式之观察者模式
      • 词法分析
      • 进程管理
      • 闭包
      • 阻止Google自动跳转到香港服务器的方法
      • 项目部署过程
  • programming-language
    • C#
      • C#
    • C&C++
      • C
    • C&C++
      • C++
    • Java
      • GoogleGuice
    • Java
      • JVM
    • Java
      • Java
    • Java
      • Maven
    • Java
      • Mybatis
    • Java
      • Spring知识
    • Java
      • SpringBoot
    • Java
      • Tomcat
    • Python
      • Python
    • Shell
      • Shell
  • wheels
    • dcc
      • 产品调研
      • 方案设计
    • red-envelope
      • 方案设计
    • short-url
      • 短链接服务
    • sso
      • 方案设计
Powered by GitBook
On this page
  • 数据库安全性概述
  • 数据库的不安全因素
  • 安全标准简介
  • 用户身份鉴别
  • 存取控制
  • 自主存取控制方法
  • 授权:授予与回收
  • 数据库角色
  • 强制存取控制方法
  • 视图机制
  • 审计
  • 数据加密
  • 其他安全性保护
  1. blogs
  2. history

数据库安全性

Previous操作系统用户界面Next数据库完整性

Last updated 3 years ago

数据库安全性概述

数据库的安全性是指保护数据库以防止不合法的使用所造成的数据泄漏、更改或破坏。

数据库的不安全因素

  1. 非授权用户对数据库的恶意存取和破坏

  2. 数据库中重要或敏感的数据被泄露

  3. 安全环境的脆弱性

安全标准简介

TCSEC/TDI标准的基本内容

  1. TCSEC/TDI,从四个方面来描述安全性级别划分的指标

  • 安全策略

  • 责任

  • 保证

  • 文档

  1. TCSEC/TDI安全级别划分

安全级别
定义

A1

验证设计

B3

安全域

B2

结构化保护

B1

标记安全保护

C2

受控的存取保护

C1

自主安全保护

D

最小保护

CC评估保证级(EAL)划分

评估保证级
定义
TCSEC安全级别(近似相当)

EAL1

功能测试

EAL2

结构测试

C1

EAL3

系统地测试和检查

C2

EAL4

系统地设计、测试和复查

B1

EAL5

半形式化设计和测试

B2

EAL6

半形式化验证的设计和测试

B3

EAL7

形式化验证的设计和测试

A1

# 数据库安全性控制

非法使用数据库的情况

  • 编写合法程序绕过DBMS及其授权机制

  • 直接或编写应用程序执行非授权操作

  • 通过多次合法查询数据库从中推导出一些保密数据

数据库安全性控制的常用方法

  • 用户标识和鉴定

  • 存取控制

  • 视图

  • 审计

  • 密码存储

用户身份鉴别

用户身份鉴别

  • 系统提供的最外层安全保护措施

  • 用户标识:由用户名和用户标识号组成(用户标识号在系统整个生命周期内唯一)

用户身份鉴别的方法

  1. 静态口令鉴别 静态口令一般由用户自己设定,这些口令是静态不变的

  2. 动态口令鉴别 口令是动态变化的,每次鉴别时均需使用动态产生的新口令登录数据库管理系统,即采用一次一密的方法

  3. 生物特征鉴别 通过生物特征进行认证的技术,生物特征如指纹、虹膜和掌纹等

  4. 智能卡鉴别 智能卡是一种不可复制的硬件,内置集成电路的芯片,具有硬件加密功能

存取控制

存取控制机制组成

  • 定义用户权限:定义用户可以在哪些数据库对象上进行哪些类型的操作,定义存取权限称为授权

  • 合法权限检查

用户权限定义和合法权检查机制一起组成了DBMS的安全子系统。

常用存取控制方法

  • 自主存取控制(Discretionary Access Control,简称DAC)

    • C2级

    • 用户对不同的数据对象有不同的存取权限

    • 不同的用户对同一对象也有不同的权限

    • 用户还可将其拥有的存取权限转授给其他用户

  • 强制存取控制(Mandatory Access Control,简称 MAC)

    • B1级

    • 每一个数据对象被标以一定的密级

    • 每一个用户也被授予某一个级别的许可证

    • 对于任意一个对象,只有具有合法许可证的用户才可以存取

自主存取控制方法

  1. 通过 SQL 的GRANT 语句和REVOKE 语句实现

  2. 用户权限组成

  • 数据对象

  • 操作类型

  1. 数据对象

  • 数据

  • 数据库模式

  1. 关系数据库系统中的存取权限

对象类型
对象
操作类型

数据库模式

模式

CREATE SCHEMA

数据库模式

基本表

CREATE TABLE,ALTER TABLE

数据库模式

视图

CREATE VIEW

数据库模式

索引

CREATE INDEX

数据

基本表和视图

SELECT,INSERT,UPDATE,DELETE,REFERENCES,ALL PRIVILEGES

数据

属性列

SELECT,INSERT,UPDATE,REFERENCES,ALL PRIVILEGES

授权:授予与回收

  1. GRANT

  • GRANT语句的一般格式:

GRANT <权限>[,<权限>]... 
ON <对象类型> <对象名>,<对象类型> <对象名>,...
TO <用户>[,<用户>]...
[WITH GRANT OPTION];
  • 发出GRANT:

    • DBA

    • 数据库对象创建者(即属主Owner)

    • 拥有该权限的用户

  • 接受权限的用户

    • 一个或多个具体用户

    • PUBLIC(全体用户)

  • WITH GRANT OPTION子句:

    • 指定:可以再授予

    • 没有指定:不能传播

    • 不能循环授权,即被授权者不能把权限再授回给授权者或其祖先

  • 例如:

GRANT SELECT   /*把查询Student表的权限授给用户U1*/
ON TABLE Student
TO U1;

GRANT ALL PRIVILEGES   /*把对Student表和Course表的全部操作权限授予所有用户*/
ON TABLE Student,Course
TO PUBLIC;

GRANT UPDATE(Sno),SELECT  /*把查询Student表和修改学生学号的权限授给用户U4*/
ON TABLE Student
TO U4;
  1. REVOKE REVOKE语句的一般格式为:

REVOKE <权限>[,<权限>]... 
ON <对象类型> <对象名>,<对象类型> <对象名>,...
FROM <用户>[,<用户>]...;
  1. SQL灵活的授权机制

  • DBA:

    • 拥有所有对象的所有权限

    • 不同的权限授予不同的用户

  • 用户:

    • 拥有自己建立的对象的全部的操作权限

    • GRANT:授予其他用户

  • 被授权的用户

    • “继续授权”许可:再授予

  • 所有授予出去的权力在必要时又都可用REVOKE语句收回

  1. 创建数据库模式的权限

  • DBA在创建用户时实现

  • CREATE USER语句格式

CREATE USER <username> [WITH] [DBA|RESOURCE|CONNECT];
  • 对CREATE USER语句说明

    • 只有系统的超级用户才有权创建一个新的数据库用户

    • 新创建的数据库用户有三种权限:CONNECT、RESOURCE和DBA

    • CREATE USER命令中如果没有指定创建的新用户的权限,默认该用户拥有CONNECT权限

拥有的权限
CREATE USER
CREATE SCHEMA
CREATE TABLE
登录数据库,执行数据查询和操纵

DBA

可以

可以

可以

可以

RESOURCE

不可以

不可以

可以

可以

CONNECT

不可以

不可以

不可以

可以,但必须拥有相应权限

数据库角色

数据库角色:被命名的一组与数据库操作相关的权限。

  • 角色是权限的集合

  • 可以为一组具有相同权限的用户创建一个角色

  • 简化授权的过程

语句格式

  1. 角色的创建

CREATE ROLE <角色名> 
  1. 给角色授权

GRANT <权限>,<权限>,... 
ON <对象类型>对象名  
TO <角色>,<角色>,...
  1. 将一个角色授予其他的角色或用户

GRANT <角色1>,<角色2>,...
TO  <角色3>[,<用户1>],... 
[WITH ADMIN OPTION] 

如果指定了WITH ADMIN OPTION子句,被授予角色或用户可以再授予其他角色。 4. 角色权限的收回

REVOKE <权限>,<权限>,...
ON <对象类型> <对象名>
FROM <角色>,<角色>,...

强制存取控制方法

自主存取控制缺点

  • 可能存在数据的“无意泄露”

  • 原因:这种机制仅仅通过对数据的存取权限来进行安全控制,而数据本身并无安全性标记

  • 解决:对系统控制下的所有主客体实施强制存取控制策略

在强制存取控制中,数据库管理系统所管理的全部实体被分为主体和客体两大类

  • 主体是系统中的活动实体

    • 数据库管理系统所管理的实际用户

    • 代表用户的各进程

  • 客体是系统中的被动实体,受主体操纵

    • 文件、基本表、索引、视图

敏感度标记(Label)

  • 对于主体和客体,DBMS为它们每个实例(值)指派一个敏感度标记(Label)

  • 敏感度标记分成若干级别

    1. 绝密(Top Secret,TS)

    2. 机密(Secret,S)

    3. 可信(Confidential,C)

    4. 公开(Public,P)

    5. TS>=S>=C>=P

主体的敏感度标记称为许可证级别(Clearance Level) 客体的敏感度标记称为密级(Classification Level)

强制存取控制规则

  1. 仅当主体的许可证级别大于或等于客体的密级时,该主体才能读取相应的客体

  2. 仅当主体的许可证级别小于或等于客体的密级时,该主体才能写相应的客体 解释:如果违反规则2,就有可能把数据的密级从高流向低,造成数据的泄露。

强制存取控制是对数据本身进行密级标记,无论数据如何复制,标记与数据是一个不可分的整体,只有符合密级标记要求的用户才可以操纵数据,从而提供了更高级别的安全性。

视图机制

  • 把要保密的数据对无权存取这些数据的用户隐藏起来,对数据提供一定程度的安全保护

  • 间接实现了支持存取谓词的用户权限定义

审计

什么是审计

  • 审计日志(Audit Log) 将用户对数据库的所有操作记录在上面

  • DBA利用审计日志 找出非法存取数据的人、时间和内容

  • C2以上安全级别的DBMS必须具有审计功能

审计事件

  • 服务器事件 审计数据库服务器发生的事件,包含启动、停止、配置文件的重新加载。

  • 系统权限 对系统拥有的结构或模式对象进行操作的审计 要求该操作的权限是通过系统权限获得的

  • 语句事件 对SQL语句,如DDL、DML、DQL及DCL语句的审计

  • 模式对象事件 对特定模式对象上进行的SELECT或DML操作的审计

审计功能

  • 基本功能 提供多种审计查阅方式提供多种审计查阅方式

  • 多套审计规则:一般在初始化设定

  • 提供审计分析和报表功能

  • 审计日志管理功能 防止审计员误删审计记录,审计日志必须先转储后删除 对转储的审计记录文件提供完整性和保密性保护 只允许审计员查阅和转储审计记录,不允许任何用户新增和修改审计记录等

  • 提供查询审计设置及审计记录信息的专门视图

AUDIT语句和NOAUDIT语句

  • AUDIT语句:设置审计功能

  • NOAUDIT语句:取消审计功能

  • 例如:

AUDIT ALTER,UPDATE  /*对修改SC表结构或修改SC表数据的操作进行审计*/
ON SC;

NOAUDIT ALTER,UPDATE
ON SC;

审计一般可以分为用户级审计和系统级审计

  • 用户级审计

    • 任何用户可设置的审计

    • 主要是用户针对自己创建的数据库表和视图进行审计

  • 系统级审计

    • 只能由数据库管理员设置

    • 监测成功或失败的登录要求、监测授权和收回操作以及其他数据库级权限下的操作

数据加密

数据加密

  • 防止数据库中数据在存储和传输中失密的有效手段

加密的基本思想

  • 根据一定的算法将原始数据—明文(Plain text)变换为不可直接识别的格式­—密文(Cipher text)

加密方法

  • 存储加密

  • 传输加密

存储加密

  • 透明存储加密

    • 内核级加密保护方式,对用户完全透明

    • 将数据在写到磁盘时对数据进行加密,授权用户读取数据时再对其进行解密

    • 数据库的应用程序不需要做任何修改,只需在创建表语句中说明需加密的字段即可 内核级加密方法: 性能较好,安全完备性较高

  • 非透明存储加密

    • 通过多个加密函数实现

传输加密

  • 链路加密

    • 在链路层进行加密

    • 传输信息由报头和报文两部分组成

    • 报文和报头均加密

  • 端到端加密

    • 在发送端加密,接收端解密

    • 只加密报文不加密报头

    • 所需密码设备数量相对较少,容易被非法监听者发现并从中获取敏感信息

其他安全性保护

推理控制

  • 处理强制存取控制未解决的问题

  • 避免用户利用能够访问的数据推知更高密级的数据

  • 常用方法

    • 基于函数依赖的推理控制

    • 基于敏感关联的推理控制

隐蔽信道

  • 处理强制存取控制未解决的问题

数据隐私保护

  • 描述个人控制其不愿他人知道或他人不便知道的个人数据的能力

  • 范围很广:数据收集、数据存储、数据处理和数据发布等各个阶段

《数据库系统概论(第5版)》王珊 萨师煊 著

计算机系统中,安全措施是一级一级层层设置的

数据库管理系统安全性控制模型

DAC+MAC安全检查示意图 先进行自主存取控制检查,通过自主存取控制检查的数据对象再由系统进行强制存取控制检查,只有通过强制存取控制检查的数据对象方可存取。

数据库安全性4
数据库安全性1
数据库安全性3
数据库安全性2