# §20.1_数据库安全机制与技术

LLMS index: [llms.txt](/wikis/llms.txt)

---

CIA 机密性完整性可用性

管理安全、数据安全、应用安全、运行安全

### 概况
![](/wikis/_resources/%C2%A720.1_%E6%95%B0%E6%8D%AE%E5%BA%93%E5%AE%89%E5%85%A8%E6%9C%BA%E5%88%B6%E4%B8%8E%E6%8A%80%E6%9C%AF/263a094b64fddc3733dfca8d928028a7_MD5.png)

授权的误用，例如金盾OA糟糕的数据管理。

### 安全威胁
![](/wikis/_resources/%C2%A720.1_%E6%95%B0%E6%8D%AE%E5%BA%93%E5%AE%89%E5%85%A8%E6%9C%BA%E5%88%B6%E4%B8%8E%E6%8A%80%E6%9C%AF/741cf64994bfaebaccce2e97d75ea0af_MD5.png)

### 数据库安全隐患
1.数据库用户账号和密码隐患。 默认密码/复杂度不满足要求/未定期更换

2.数据库系统扩展存储过程隐患。 [缓存/索引等]   数据未全部可控

3.数据库系统软件和应用程序漏洞。   

4.数据库系统权限分配隐患。 未最小权限划分

5.数据库系统用户安全意识薄弱。 加强管理和培训

6.网络通信内容是明文传递。 使用SSL/TLS加密

7.数据库系统安全机制不健全。 升级软件/从管理层面下手。

### 安全机制与实现技术
![](/wikis/_resources/%C2%A720.1_%E6%95%B0%E6%8D%AE%E5%BA%93%E5%AE%89%E5%85%A8%E6%9C%BA%E5%88%B6%E4%B8%8E%E6%8A%80%E6%9C%AF/efdf06b7e498d92cd679955dbde386d2_MD5.png)
传输安全&存储安全

#### 数据库加密
![](/wikis/_resources/%C2%A720.1_%E6%95%B0%E6%8D%AE%E5%BA%93%E5%AE%89%E5%85%A8%E6%9C%BA%E5%88%B6%E4%B8%8E%E6%8A%80%E6%9C%AF/cae239b58907c21825b623f3e475f9e7_MD5.png)


**数据存储加密**
<details><summary>点击展开详情</summary>



数据库的加密方式通常分为库内加密和库外加密。下面我们详细讲解这两种方式的实现原理、优缺点和适用场景。
<hr id="fddn6" class="ne-hr">

# 1. 库内加密（In-Database Encryption）


库内加密是指直接在数据库中进行加密和解密操作。它通常通过数据库系统自带的加密功能或者用户自定义的加密方案来实现，数据在存入数据库之前就已经加密，查询时解密。库内加密主要包括透明数据加密（TDE）和字段级加密。


## a. 透明数据加密（Transparent Data Encryption, TDE）


TDE是一种广泛应用的库内加密方式，旨在保护存储在物理数据库中的数据。它的特点是对用户和应用透明，通常不需要对应用代码进行改动。TDE在存储层加密数据库文件或表空间，解密则发生在数据从存储中读取时。

**实现步骤**：
- **设置加密密钥**：生成或指定主密钥（Master Key），该密钥用于保护数据库加密密钥。
- **创建证书**：基于主密钥生成一个证书，后续用于解密加密密钥。
- **应用TDE加密**：启用TDE后，数据库文件会被加密，所有的数据文件、日志文件也会随之加密。


**优缺点**：
- **优点**：对用户和应用透明，加密过程自动化。
- **缺点**：不能加密特定的字段或行；对于数据查询操作没有加密保护。



## b. 字段级加密（Column-Level Encryption）


字段级加密是在数据库层面通过特定算法（如AES、DES）对指定列加密。这样可以保护更敏感的列，比如密码、信用卡信息等。

**实现步骤**：
- **选择加密算法**：决定加密方式，如对称或非对称加密。
- **设置密钥管理**：密钥可以存储在数据库外部的密钥管理系统中，以提高安全性。
- **加密字段数据**：插入或更新数据时调用加密函数。
- **查询解密**：读取数据时调用解密函数，确保数据是以明文形式呈现给用户。


**优缺点**：
- **优点**：更精细地控制加密对象，保护特定字段。
- **缺点**：需要在应用中处理加密/解密函数，对性能有一定影响。



## 适用场景


库内加密适合希望利用数据库自身加密功能，并且对性能要求不极高的场景。适合需要对数据本身提供基本保护，但不涉及复杂的密钥管理的情况。
<hr id="x41en" class="ne-hr">

## 2. 库外加密（External Database Encryption）


库外加密是指在数据库系统之外，通过应用程序层或外部工具对数据进行加密和解密，数据库存储的是已经加密的数据。这种方式的灵活性较高，适合更复杂的业务需求。


## a. 应用层加密（Application-Level Encryption）


在应用层加密中，加密和解密工作由应用程序负责。这种加密方式可以对特定的数据进行更加灵活的控制，用户可以对敏感信息进行不同层级的加密。

**实现步骤**：
- **选择加密算法和密钥管理方案**：选择合适的加密算法和密钥管理系统（如KMS、HSM等）。
- **加密数据并存储**：在数据写入数据库之前加密，数据库中存储的是加密后的数据。
- **解密数据并展示**：从数据库读取时，应用程序解密后展示给用户。


**优缺点**：
- **优点**：加密控制更灵活，适合需要严格保护敏感信息的情况。
- **缺点**：需要应用支持加密解密逻辑，密钥管理复杂。



## b. 全盘加密（Disk-Level Encryption）


全盘加密在物理层面对数据库文件所在的磁盘进行加密，以保护整个数据库实例的数据安全。常见的实现方式是通过操作系统层面的加密软件（如BitLocker、LUKS）对存储设备进行加密。

**实现步骤**：
- **选择加密工具**：选择适合的全盘加密工具或操作系统自带的加密功能。
- **配置加密策略**：设置密钥和解密权限，确保只有授权用户可以解密访问。
- **激活加密**：启动全盘加密，确保数据库文件所在的磁盘或文件系统加密。


**优缺点**：
- **优点**：对数据库完全透明，不需要对数据库或应用层进行更改。
- **缺点**：只对物理存储层加密，数据库备份和数据传输过程中可能不受保护。



## 适用场景


库外加密适合对加密需求更灵活、加密控制更精细的场景。它适合需要高度定制化的安全性方案，特别是需要在应用层进行加密控制的业务场景。
<hr id="JqDzC" class="ne-hr">

## 总结


加密方式

实现层

加密控制粒度

主要优点

主要缺点

库内加密

数据库层

透明数据加密、字段级加密

配置简单，透明性高

粒度相对较粗，性能略受影响

应用层加密

应用层

字段级或更细

控制灵活，密钥可控

需要应用逻辑支持，复杂度高

全盘加密

操作系统层

整个磁盘

对数据库完全透明

仅保护存储层，不适合细粒度加密


## 实现建议

- **敏感信息较少**：优先选择库内加密，使用TDE保护整体数据。
- **业务需求复杂且灵活性要求高**：采用应用层加密，自行控制加密和密钥管理。
- **硬件安全要求高**：可考虑全盘加密，在数据库级别配置额外的保护。


不同的数据库管理系统在支持库内加密和库外加密时各有特色，例如MySQL、SQL Server等。结合实际业务需求，选择最合适的加密方案才是保障数据安全的关键。



</details>


![](/wikis/_resources/%C2%A720.1_%E6%95%B0%E6%8D%AE%E5%BA%93%E5%AE%89%E5%85%A8%E6%9C%BA%E5%88%B6%E4%B8%8E%E6%8A%80%E6%9C%AF/4216d104ff6013996b801ade2ec99c2a_MD5.png)
字段（属性）加密-列加密

记录加密-行加密

文件加密-库加密

#### 数据库防火墙
![](/wikis/_resources/%C2%A720.1_%E6%95%B0%E6%8D%AE%E5%BA%93%E5%AE%89%E5%85%A8%E6%9C%BA%E5%88%B6%E4%B8%8E%E6%8A%80%E6%9C%AF/5f66d9e83c3e55825b494fe6d72641cf_MD5.png)

市场上，数据库审计与数据库防火墙一般是一个设备。

![](/wikis/_resources/%C2%A720.1_%E6%95%B0%E6%8D%AE%E5%BA%93%E5%AE%89%E5%85%A8%E6%9C%BA%E5%88%B6%E4%B8%8E%E6%8A%80%E6%9C%AF/4b3566be9facd8c3093f78f15d727ba0_MD5.png)

#### 数据库脱敏
![](/wikis/_resources/%C2%A720.1_%E6%95%B0%E6%8D%AE%E5%BA%93%E5%AE%89%E5%85%A8%E6%9C%BA%E5%88%B6%E4%B8%8E%E6%8A%80%E6%9C%AF/2aa1455e7f6f453457d19a8759e73d6c_MD5.png)

数据库脱敏-匿名化处理

数据库漏洞扫描有时数据库防火墙/审计设备也能实现。

#### 数据库漏扫
![](/wikis/_resources/%C2%A720.1_%E6%95%B0%E6%8D%AE%E5%BA%93%E5%AE%89%E5%85%A8%E6%9C%BA%E5%88%B6%E4%B8%8E%E6%8A%80%E6%9C%AF/a78c9e76311223db977b32d7d44a1994_MD5.png)
