Skip to main content

身份鉴别

测评项:a) 应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换。

测评点:用户名唯一性、弱口令、空口令、口令强度策略、口令过期策略;

核查注意:MySQL通常不存在空口令账户,弱口令须通过访谈确定。

核查命令:

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

核查效果:

image.png

核查注意:云服务客户租用数据库时通过云控制台查看,不适用本条命令。

核查注意:MySQL通常未预装validate_password,须先核查是否安装插件后再核查相关参数。

核查命令:

# 核查插件形式的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%';

核查效果:(以插件形式安装validate_password,从MySQL 5.7开始支持)

Snipaste_2025-07-29_16-43-04.png

核查效果:(以模块形式安装validate_password,从MySQL 8.0.2开始支持)

Snipaste_2025-07-30_14-21-58.png

核查注意:MySQL账户通常无法重复,账户名具有唯一性;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

核查效果:(在MySQL 5.7)

Snipaste_2025-07-30_16-21-52.png

核查效果:(在MySQL 8.0)

Snipaste_2025-07-30_16-22-24.png

测评项:b) 应具有登录失败处理功能,应配置并启用结束会话、限制非法登录次数和当登录连接超时自动退出等相关措施。

测评点:登录失败锁定、登录超时退出;

核查注意:MySQL低版本不支持登录失败锁定策略,从MySQL 8.0开始支持单用户设置失败锁定策略,从MySQL 8.1开始支持锁定时长限制至小时或分钟。

核查命令:

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

Snipaste_2025-07-30_17-44-55.pngSnipaste_2025-08-01_09-35-21.png

测评项:c) 当进行远程管理时,应采取必要措施防止鉴别信息在网络传输过程中被窃听。

核查注意:云服务客户租用数据库时仅核查当前会话,其他信息通过云控制台查看。

# 查看指定用户名(如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

Snipaste_2025-07-30_16-44-57.pngSnipaste_2025-07-30_16-45-26.png

测评项:d) 应采用口令、密码技术、生物技术等两种或两种以上组合的鉴别技术对用户进行身份鉴别, 且其中一种鉴别技术至少应使用密码技术来实现。

核查要素:双因子

核查注意:从MySQL 8.0.27起,企业版支持FIDO,社区版支持TOTP,可在完成用户名+口令后支持二次验证。基于实际生产环境,默认不支持。