# 37、等保2.0 Mysql等保测评

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

---

## 一、身份鉴别
### **a) 应对登录的用户进行身份标识和鉴别，身份标识具有唯一性，身份鉴别信息具有复杂度要求并定期更换**
01、登录 mysql 查看是否使用了口令和密码的组合鉴别身份

  
![](/wikis/_resources/37%E3%80%81%E7%AD%89%E4%BF%9D2.0-MySQL%E7%AD%89%E4%BF%9D%E6%B5%8B%E8%AF%84/463f867d618cb2eb56d85cb598f32a8e_MD5.png)

mysql -h 192.168.100.16 -u root -p

02、使用如下命令查询用户列表，是否存在相同用户名。结果默认不存在同名用户

```plain
select user, host FROM mysql.user;
```

![](/wikis/_resources/37%E3%80%81%E7%AD%89%E4%BF%9D2.0-MySQL%E7%AD%89%E4%BF%9D%E6%B5%8B%E8%AF%84/2e21c97c4c46c62ab2cd226acf95d1d8_MD5.png)

03、执行如下命令查看是否存在空口令用户

```plain
select user,host,authentication_string,password_lifetime,account_locked from mysql.user;
```

![](/wikis/_resources/37%E3%80%81%E7%AD%89%E4%BF%9D2.0-MySQL%E7%AD%89%E4%BF%9D%E6%B5%8B%E8%AF%84/d09f043ca619f69f1a7a2eb08a0dd812_MD5.png)

04、执行如下命令查看密码复杂度设置

```plain
show variables like 'validate%';
```

![](/wikis/_resources/37%E3%80%81%E7%AD%89%E4%BF%9D2.0-MySQL%E7%AD%89%E4%BF%9D%E6%B5%8B%E8%AF%84/204f8663201f4f074a8f3d8707d9c039_MD5.png)

### **b）应具有登录失败处理功能，应配置并启用结束会话、限制非法登录次数和当登录连接超时自动退出等相关措施**
01、询问管理员是否采取其他手段配置数据库登录失败处理功能。

02、查看是否安装插件，并增加失败处理功能

```cpp
show variables like '%connection_control%';show variables like '%max_connect_errors%';  
# 查看登录失败策略
```

![](/wikis/_resources/37%E3%80%81%E7%AD%89%E4%BF%9D2.0-MySQL%E7%AD%89%E4%BF%9D%E6%B5%8B%E8%AF%84/03bdae257b40250939b089992d6aeb8c_MD5.png)

![](/wikis/_resources/37%E3%80%81%E7%AD%89%E4%BF%9D2.0-MySQL%E7%AD%89%E4%BF%9D%E6%B5%8B%E8%AF%84/de73da92e2b5e3380d6a4e43931ea2bc_MD5.png)

03、 操作超时自动退出功能

```plain
show variables like "%timeout%";
```

![](/wikis/_resources/37%E3%80%81%E7%AD%89%E4%BF%9D2.0-MySQL%E7%AD%89%E4%BF%9D%E6%B5%8B%E8%AF%84/7a7b849326643bb0d0cff738a246def7_MD5.png)

### **c）当进行远程管理时，应采取必要措施防止鉴别信息在网络传输过程中被窃听**
01、询问是否采用远程管理，如果本地管理则不适用，远程管理是否启用 SSL

```plain
show variables like "%have_ssl%";show variables like "%have_openssl%";
```

![](/wikis/_resources/37%E3%80%81%E7%AD%89%E4%BF%9D2.0-MySQL%E7%AD%89%E4%BF%9D%E6%B5%8B%E8%AF%84/24f95afc03dd7bc1917bee9c26f02bc2_MD5.png)

### **d）应采用口令、密码技术、生物技术等两种或两种以上组合的鉴别技术对用户进行身份鉴别，且其中一种鉴别技术至少应使用密码技术来实现**
对于数据库基本不符合。

## 二、访问控制
### **a）应对登录的用户分配账户和权限**
01、使用命令查看，是否为登录的用户创建了不同账户和权限。

```plain
select user,host from mysql.user ;SHOW grants for 'root'@'localhost';
```

![](/wikis/_resources/37%E3%80%81%E7%AD%89%E4%BF%9D2.0-MySQL%E7%AD%89%E4%BF%9D%E6%B5%8B%E8%AF%84/953b581b5ba0a7cdd8e48e9c9026f551_MD5.png)

![](/wikis/_resources/37%E3%80%81%E7%AD%89%E4%BF%9D2.0-MySQL%E7%AD%89%E4%BF%9D%E6%B5%8B%E8%AF%84/63a597598c0b8a7ad46c590d595a255f_MD5.png)

询问数据库管理员各个账户的作用与权限，输出结果是否与实际人员是否相符

### **b）应重命名或删除默认账户，修改默认账户的默认口令**
01、查看 root 用户是否被删除或者重命名，不修改需要增加口令复杂度，避免空口令弱口令出现

### **c）应及时删除或停用多余的、过期的账户，避免共享账户的存在**
```plain
select user,host,authentication_string,password_lifetime,account_locked from mysql.user;
```

![](/wikis/_resources/37%E3%80%81%E7%AD%89%E4%BF%9D2.0-MySQL%E7%AD%89%E4%BF%9D%E6%B5%8B%E8%AF%84/e85d8c266cf273d440f1f6a7383ab296_MD5.png)

02、询问管理员是否不同用户采用不同账户登录，避免共享账户的存在

**d）应授予管理用户所需的最小权限，实现管理用户的权限分离**

01、是否对用户进行角色划分且只授予账号必须的权限，除 root 外，任何用户不应该有 mysql 库 user 表的存取权限，禁止将 fil、process、 super 权限授予管理员以外的账户

```plain
select * from mysql.user;
```

![](/wikis/_resources/37%E3%80%81%E7%AD%89%E4%BF%9D2.0-MySQL%E7%AD%89%E4%BF%9D%E6%B5%8B%E8%AF%84/b7a5ad92120cac3474ba6bc70a99d1f4_MD5.png)

02、查看用户权限表，并验证用户是否具有自身角色外的其他用户的权限。

```plain
select * from mysql.user where user="test";
```

![](/wikis/_resources/37%E3%80%81%E7%AD%89%E4%BF%9D2.0-MySQL%E7%AD%89%E4%BF%9D%E6%B5%8B%E8%AF%84/f0398762d90784e7ffa98ebc3ecc664e_MD5.png)

### **e）应由授权主体配置访问控制策略，访问控制策略规定主体对客体的访问规则**
select * from mysql.user\G //检查用户权限列表select * from mysql.db\G //检查数据库权限列表select * from mysql.tables_priv\G //检查用户表权限列表

01、访谈管理员是否制定了访问控制策略。

02、执行命令查看用户权限列表

![](/wikis/_resources/37%E3%80%81%E7%AD%89%E4%BF%9D2.0-MySQL%E7%AD%89%E4%BF%9D%E6%B5%8B%E8%AF%84/6aa1a69d3bfb48bfd9a52e6e21467472_MD5.png)

03、检查数据库权限列表

```plain
select * from mysql.db
```

![](/wikis/_resources/37%E3%80%81%E7%AD%89%E4%BF%9D2.0-MySQL%E7%AD%89%E4%BF%9D%E6%B5%8B%E8%AF%84/55d68ecba4c4fb68974b0d1202a2c3ab_MD5.png)

04、检查用户表权限列表

```plain
select * from mysql.tables_priv
```

![](/wikis/_resources/37%E3%80%81%E7%AD%89%E4%BF%9D2.0-MySQL%E7%AD%89%E4%BF%9D%E6%B5%8B%E8%AF%84/325a5ced12ad9208db863aa40a4b56a5_MD5.png)

05、检查列权限列管理员

```plain
select * from mysql.columns_priv
```

![](/wikis/_resources/37%E3%80%81%E7%AD%89%E4%BF%9D2.0-MySQL%E7%AD%89%E4%BF%9D%E6%B5%8B%E8%AF%84/35eeab2c8257b7a55005a12c42477bfc_MD5.png)

输出的权限列是是否与管理员制定的访问控制策略及规则一致

### **f）访问控制的粒度应达到主体为用户级或进程级，客体为文件、数据库表级**
01、执行如下 sql 语句

select * from mysql.user -检查用户权限列表 select * from mysql.db -检查数据库权限列表

02、访谈管理员并核查访问控制粒度主体是否为用户级，客体是否为数据库表级。

### **g）应对重要主体和客体设置安全标记，并控制主体对有安全标记信息资源的访问**
MySQL 不提供该项功能，访谈管理员，是否采用其他技术手段。

## 三、安全审计
### **a）应启用安全审计功能，审计覆盖到每个用户，对重要的用户行为和重要安全事件进行审计**
01、执行下列语句:show global variables like '%general%'。默认为 OFF，不符合。应设置为 ON 为开启审计。

```plain
show global variables like '%general%';
```

![](/wikis/_resources/37%E3%80%81%E7%AD%89%E4%BF%9D2.0-MySQL%E7%AD%89%E4%BF%9D%E6%B5%8B%E8%AF%84/afd0e5ffbb74d505cef423038924f3da_MD5.png)

02、访谈管理员是否通过第三方插件收集审计数据进行分析。

### **b）审计记录应包括事件的日期和时间、用户、事件类型、事件是否成功及其他与审计相关的信息**
01、只要启用了审计功能，无论是自带的审计还是插件，在记录的信息上都能满足这个要求。02、是否采取第三方工具审计，查看审计内容是否符合上述要求

### **c）应对审计记录进行保护，定期备份，避免受到未预期的删除、修改或覆盖等**
01、访谈管理员如何对审计记录进行保护，对审计记录是否定期备份，备份策略是什么，时间大于 6 个月 02、如果采用第三方设审计产品，满足日志存储的时间要求 03、严格限制审计的访问权限，非授权用户禁止对日志进行操作

### **d）应对审计进程进行保护，防止未经授权的中断**
MySQL 数据库系统大多数默认符合，但是如果采取了第三方工具，则应检查数据库系统，查看未授权用户是否能中断审计进程。

## 四、入侵防范
以下条款为：不适用

### **a）应遵循最小安装的原则，仅安装需要的组件和应用程序**
### **b）应关闭不需要的系统服务、默认共享和高危端口**
### **d）应提供数据有效性检验功能，保证通过人机接口输入或通过通信接口输入的内容符合系统设定要求**
### **f）应能够检测到对重要节点进行入侵的行为，并在发生严重入侵事件时提供报警**
涉及到的：

### **c）应通过设定终端接入方式或网络地址范围对通过网络进行管理的管理终端进行限制**
对数据库登录的地址进行限制，不能为任何人根据业务需求设置本地或者指定地址登录对登录的数据库地址进行限制，配置文件中修改

![](/wikis/_resources/37%E3%80%81%E7%AD%89%E4%BF%9D2.0-MySQL%E7%AD%89%E4%BF%9D%E6%B5%8B%E8%AF%84/c86ca19d3573b46c2ff7a0119e272d6a_MD5.png)

### **e）应能发现可能存在的已知漏洞，并在经过充分测试评估后，及时修补漏洞**
访谈 MySQL 补丁升级机制，查看补丁安装情况:

01、执行如下命令查看当前补于版本:

```plain
show variables where variable_name like "version";
```

![](/wikis/_resources/37%E3%80%81%E7%AD%89%E4%BF%9D2.0-MySQL%E7%AD%89%E4%BF%9D%E6%B5%8B%E8%AF%84/a73490ed5079f32a76db6cc853022e7e_MD5.png)

02、访谈管理员是否定期进行漏洞扫描，并对高风险漏洞是否测试评估后进行修复。

## 五、数据完整性
### **a）应采用校验技术或密码技术保证重要数据在传输过程中的完整性，包括但不限于鉴别数据、重要业务数据、重要审计数据、重要配置数据、重要视频数据和重要个人信息等**
是否启用了 SSL 进行了数据通信，确认是否还有其他保证数据传输过程中的完整性措施。本地管理不适用，远程管理是否开启 SSL

![](/wikis/_resources/37%E3%80%81%E7%AD%89%E4%BF%9D2.0-MySQL%E7%AD%89%E4%BF%9D%E6%B5%8B%E8%AF%84/2bb7f278fbedd27852966c4d65e5f286_MD5.png)

### **b）应采用校验技术或密码技术保证重要数据在存储过程中的完整性，包括但不限于鉴别数据、重要业务数据、重要审计数据、重要配置数据、重要视频数据和重要个人信息等**
对数据库配置文件进行一个完整性检测，需要配置文件初始可信状态时的哈希值，然后再根据目前的文件生成一个哈希值，对比前后的一致性，确认数据是否被篡改过，根据了解一般数据库自身不带这种机制，询问管理人员是否使用了第三方软件对数据库重要数据进行了完整性校验。

## 六、数据保密性
### **a）应采用密码技术保证重要数据在传输过程中的保密性，包括但不限于鉴别数据、重要业务数据和重要个人信息等**
SCRAM-SHA-256 属于挑战-响应架构， 可防止密码在不可信连接上嗅探，并支持以密码散列的形式将密码存储在服务器上，这种形式被认为是安全的。

MD5 使用自定义安全性较低的质询-响应机制。 它可以防止密码嗅探，并避免以纯文本形式将密码存储在服务器上，但如果攻击者设法从服务器窃取密码哈希，则不提供保护。（MD5 哈希算法现在不再被认为是安全的算法）

若 password 是以明文密码传送给数据库，建议不在生产环境中使用。若数据库未开启 SSL 时，我通过 Wireshare 对数据库认证过程的数据包进行抓取，可能发现传输的密码字段信息。

### **b）应采用密码技术保证重要数据在存储过程中的保密性，包括但不限于鉴别数据、重要业务数据和重要个人信息等**
MySQL 提供的数据加密方案中包括 AES 加解密方案 AES_ENCRYPT AES_DECRYPT，DES 加解密方案 DES_ENCRYPT DES_DECRYPT。

## 七、数据备份恢复
### **a) 应提供重要数据的本地数据备份与恢复功能**
1.询问数据备份策略（每天/周，全备/增备）2.是否具备恢复测试记录

### **b）应提供异地实时备份功能，利用通信网络将重要数据实时备份至备份场地**
1.是否进行异地备份，记录异地备份机房。2.询问备份策略（每天/周，全备/增备）备份询问管理员

### **c）应提供重要数据处理系统的热冗余，保证系统的高可用性**
1.如果是云上数据库，是否为高可用版本。2.如果线下数据库，看是否部署两台以上服务器。集群部署、双机热备均可判定为符合。

## 八、剩余信息保护
### **a)应保证鉴别信息所在的存储空间被释放或重新分配前得到完全清除；**
默认符合

### **b)应保证存有敏感数据的存储空间被释放或重新分配前得到完全清除。**
默认符合

## 九、个人信息保护
### **a)应仅采集和保存业务必需的用户个人信息；**
检查数据库中是否存储个人信息，若有，检查个人信息保护机制和个人信息保护管理制度

### **b)应禁止未授权访问和非法使用用户个人信息。**
检查个人信息保护机制和个人信息保护管理制度，验证非授权人员是否可以访问个人信息存储的相关组件内容
