如何通过MySQL查询检测数据库中是否存在无密码或弱密码的账户?
- 内容介绍
- 文章标签
- 相关推荐
本文共计860个文字,预计阅读时间需要4分钟。
MySQL 允许创建字符串(空字符串)作为密码的用户账户,此类账户可直接登录。这类账户属于高风险配置(默认禁止空密码,但旧实例或手动修改过`mysql.user`表的环境可能存在)。
执行以下查询确认:
SELECT host, user, authentication_string FROM mysql.user WHERE LENGTH(TRIM(authentication_string)) = 0 OR authentication_string IN ('', '*');
注意:authentication_string 字段在 5.7+ 存储的是哈希值(如 *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9),若值为 '' 或 '*'(旧版未加密占位符),说明未设密码或密码为空。
-
TRIM()防止空格伪装成非空 - 不依赖
password字段(8.0 已移除) - 需以
root或具备SELECT ON mysql.*权限账号执行
识别常见弱密码哈希值(如 '123456'、'password')
MySQL 不存储明文密码,但可比对已知弱口令的哈希值。以 MySQL 5.7 默认的 caching_sha2_password 或 mysql_native_password 插件为例,其哈希逻辑固定,可预先生成常见弱口令的哈希串进行匹配。
本文共计860个文字,预计阅读时间需要4分钟。
MySQL 允许创建字符串(空字符串)作为密码的用户账户,此类账户可直接登录。这类账户属于高风险配置(默认禁止空密码,但旧实例或手动修改过`mysql.user`表的环境可能存在)。
执行以下查询确认:
SELECT host, user, authentication_string FROM mysql.user WHERE LENGTH(TRIM(authentication_string)) = 0 OR authentication_string IN ('', '*');
注意:authentication_string 字段在 5.7+ 存储的是哈希值(如 *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9),若值为 '' 或 '*'(旧版未加密占位符),说明未设密码或密码为空。
-
TRIM()防止空格伪装成非空 - 不依赖
password字段(8.0 已移除) - 需以
root或具备SELECT ON mysql.*权限账号执行
识别常见弱密码哈希值(如 '123456'、'password')
MySQL 不存储明文密码,但可比对已知弱口令的哈希值。以 MySQL 5.7 默认的 caching_sha2_password 或 mysql_native_password 插件为例,其哈希逻辑固定,可预先生成常见弱口令的哈希串进行匹配。

