# 身份鉴别

##### <span style="color: rgb(0, 0, 0);">**<span lang="ZH-CN">测评项：</span>a) <span lang="ZH-CN">应对登录的用户进行身份标识和鉴别，身份标识具有唯一性，身份鉴别信息具有复杂度要求并定期更换。</span>**</span>

<p class="callout info"><span lang="ZH-CN">MySQL通常不存在空口令账户，弱口令须通过<span style="color: rgb(35, 111, 161);">访谈</span>确定。</span></p>

```mysql
# MySQL 5.7及更低版本本命令行不适用。
select * from mysql.user where length(authentication_string) = 0 or authentication_string is null;
```

<span lang="ZH-CN">[![image.png](https://document.nat.ac.cn/uploads/images/gallery/2025-07/scaled-1680-/TfKimage.png)](https://document.nat.ac.cn/uploads/images/gallery/2025-07/TfKimage.png)</span>

<p class="callout warning">MySQL通常未预装<span style="color: rgb(35, 111, 161);">**validate\_password**</span>，须先核查是否安装插件后再核查相关参数。</p>

<p class="callout info"><span lang="ZH-CN">云服务客户租用数据库时通过云控制台查看，不适用本条命令。</span></p>

```mysql
# 核查插件形式的validate_password，从MySQL 5.7开始支持
select * from information_schema.plugins where plugin_name = 'validate_password';
# 核查模块形式的validate_password，从MySQL 8.0.2开始支持
select * from mysql.component;
# 核查MySQL当前口令策略，默认策略符合要求。
show variables LIKE 'validate_password%';
```

核查效果：（以<span style="color: rgb(35, 111, 161);">**插件**</span>形式安装validate\_password，从MySQL 5.7开始支持）

[![Snipaste_2025-07-29_16-43-04.png](https://document.nat.ac.cn/uploads/images/gallery/2025-07/scaled-1680-/snipaste-2025-07-29-16-43-04.png)](https://document.nat.ac.cn/uploads/images/gallery/2025-07/snipaste-2025-07-29-16-43-04.png)

核查效果：（以<span style="color: rgb(35, 111, 161);">**模块**</span>形式安装validate\_password，从MySQL 8.0.2开始支持）

[![Snipaste_2025-07-30_14-21-58.png](https://document.nat.ac.cn/uploads/images/gallery/2025-07/scaled-1680-/snipaste-2025-07-30-14-21-58.png)](https://document.nat.ac.cn/uploads/images/gallery/2025-07/snipaste-2025-07-30-14-21-58.png)

<p class="callout info"><span lang="ZH-CN">MySQL账户通常无法重复，账户名具有唯一性；MySQL支持单个用户名配置口令过期策略，仅在<span style="color: rgb(35, 111, 161);">**缺省**</span>时由全局配置确定。云服务客户租用数据库时通过云控制台查看，不适用本条命令。</span></p>

```mysql
# 查看MySQL全局口令过期策略。
show variables like 'default_password_lifetime';
# 查看MySQL 5.7最近口令更换情况。
select user, host, password_last_changed, password_lifetime from mysql.user;
# 查看MySQL 8.0最近口令更换情况。（支持限制使用重复密码）
select user, host, password_last_changed, password_lifetime,password_expired,password_reuse_history,password_reuse_time from mysql.user;
```

[![Snipaste_2025-07-29_18-06-20.png](https://document.nat.ac.cn/uploads/images/gallery/2025-07/scaled-1680-/snipaste-2025-07-29-18-06-20.png)](https://document.nat.ac.cn/uploads/images/gallery/2025-07/snipaste-2025-07-29-18-06-20.png)

核查效果：（在MySQL 5.7）

[![Snipaste_2025-07-30_16-21-52.png](https://document.nat.ac.cn/uploads/images/gallery/2025-07/scaled-1680-/snipaste-2025-07-30-16-21-52.png)](https://document.nat.ac.cn/uploads/images/gallery/2025-07/snipaste-2025-07-30-16-21-52.png)

核查效果：（在MySQL 8.0）

[![Snipaste_2025-07-30_16-22-24.png](https://document.nat.ac.cn/uploads/images/gallery/2025-07/scaled-1680-/snipaste-2025-07-30-16-22-24.png)](https://document.nat.ac.cn/uploads/images/gallery/2025-07/snipaste-2025-07-30-16-22-24.png)

---

##### <span style="color: rgb(0, 0, 0);">**<span lang="ZH-CN">测评项：</span>b) <span lang="ZH-CN">应具有登录失败处理功能，应配置并启用结束会话、限制非法登录次数和当登录连接超时自动退出等相关措施。</span>**</span>

<p class="callout warning">MySQL<span style="color: rgb(35, 111, 161);">**低版本不支持**</span>登录失败锁定策略，从MySQL 8.0开始支持单用户设置失败锁定策略，从MySQL 8.1开始支持锁定时长限制至小时或分钟。</p>

```mysql
select host,user,User_attributes from mysql.user;
# 核查 interactive_timeout参数
show variables like '%timeout';
```

[![Snipaste_2025-07-30_17-44-55.png](https://document.nat.ac.cn/uploads/images/gallery/2025-07/scaled-1680-/snipaste-2025-07-30-17-44-55.png)](https://document.nat.ac.cn/uploads/images/gallery/2025-07/snipaste-2025-07-30-17-44-55.png)[![Snipaste_2025-08-01_09-35-21.png](https://document.nat.ac.cn/uploads/images/gallery/2025-08/scaled-1680-/snipaste-2025-08-01-09-35-21.png)](https://document.nat.ac.cn/uploads/images/gallery/2025-08/snipaste-2025-08-01-09-35-21.png)

---

##### <span style="color: rgb(0, 0, 0);">**<span lang="ZH-CN">测评项：</span>c) <span lang="ZH-CN">当进行远程管理时，应采取必要措施防止鉴别信息在网络传输过程中被窃听。</span>**</span>

<p class="callout info">云服务客户租用数据库时仅核查当前会话，其他信息通过云控制台查看。</p>

```mysql
# 查看指定用户名（如root）是否强制使用TLS传输
select user, host, ssl_type from mysql.user where user = 'root';
# 查看是否全局开启强制TLS传输
show variables like 'require_secure_transport';
# 查看MySQL是否已开启TLS传输
show variables like 'have_ssl';
# 查看MySQL当前TLS相关配置信息
show global variables like 'ssl_cipher';
show global variables like 'ssl_ca';
show global variables like 'ssl_cert';
show global variables like 'ssl_key';
# （重点）查看当前会话是否采用TLS传输
show session status like 'ssl_cipher';
show session status LIKE 'Ssl_cipher_list';
show session status like 'ssl_version';
# 查看MySQL当前支持的TLS版本
show variables like 'tls_version';
```

[![Snipaste_2025-07-30_16-44-23.png](https://document.nat.ac.cn/uploads/images/gallery/2025-07/scaled-1680-/snipaste-2025-07-30-16-44-23.png)](https://document.nat.ac.cn/uploads/images/gallery/2025-07/snipaste-2025-07-30-16-44-23.png)

[![Snipaste_2025-07-30_16-44-57.png](https://document.nat.ac.cn/uploads/images/gallery/2025-07/scaled-1680-/snipaste-2025-07-30-16-44-57.png)](https://document.nat.ac.cn/uploads/images/gallery/2025-07/snipaste-2025-07-30-16-44-57.png)

---

##### <span style="color: rgb(0, 0, 0);">**<span lang="ZH-CN">测评项：</span>d) <span lang="ZH-CN">应采用口令、密码技术、生物技术等两种或两种以上组合的鉴别技术对用户进行身份鉴别， 且其中一种鉴别技术至少应使用密码技术来实现。</span>**</span>

<p class="callout danger"><span lang="ZH-CN">从MySQL **<span style="color: rgb(35, 111, 161);">8.0.27</span>**起，企业版支持<span style="color: rgb(35, 111, 161);">**FIDO**</span>，社区版支持<span style="color: rgb(35, 111, 161);">**TOTP**</span>，可在完成用户名+口令后支持二次验证。基于实际生产环境，默认不支持。</span></p>