phpMyAdmin不控制密码哈希,由MySQL服务端认证插件决定;MySQL 8.0+默认使用caching_sha2_password,要求SSL或RSA密钥交换,否则登录失败。

phpMyAdmin 本身不控制密码哈希方式,它只负责把用户输入的密码传给 MySQL/MariaDB 验证;真正决定“是否接受安全哈希”的是数据库服务端的认证插件和用户账户配置。
MySQL 8.0+ 用户必须用 caching_sha2_password 插件
从 MySQL 8.0 开始,默认创建用户的认证插件是 caching_sha2_password,它要求客户端(包括 phpMyAdmin)使用 SHA-256 哈希 + SSL 或 RSA 密钥交换。如果你看到登录失败并提示 Authentication plugin 'caching_sha2_password' cannot be loaded,说明:
- MySQL 服务启用了该插件,但 PHP 的
mysqli或pdo_mysql扩展未启用mysqlnd(必须)或未编译支持 SHA-256 - phpMyAdmin 连接时没启用 SSL,而 MySQL 强制要求(
require_secure_transport = ON) - 你用的是旧版 phpMyAdmin(
解决方法:升级 phpMyAdmin 到 ≥ 5.0,确认 PHP 启用 mysqlnd(运行 php -m | grep mysqlnd),并在 config.inc.php 中显式指定连接参数:
$cfg['Servers'][$i]['extension'] = 'mysqli'; $cfg['Servers'][$i]['ssl'] = true; // 若 MySQL 开了 require_secure_transport // 或降级用户插件(不推荐): // ALTER USER 'your_user'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
禁止明文密码或弱哈希账户登录
phpMyAdmin 不校验密码强度,但你可以从数据库层堵住漏洞:
- 检查现有用户是否用了过时插件:
SELECT User, Host, plugin FROM mysql.user;—— 排除mysql_old_password(已废弃)和空plugin - 强制重置高危账户:
ALTER USER 'admin'@'%' REQUIRE X509;或REQUIRE SUBJECT '/CN=trusted-client'(需配合证书) - 禁用匿名用户:
DROP USER ''@'localhost'; - 删除无密码账户:
DELETE FROM mysql.user WHERE authentication_string = '' OR plugin = 'auth_socket';(后者仅限本地 socket 认证,phpMyAdmin 无法用)
phpMyAdmin 自身登录不能绕过数据库认证机制
很多人误以为改 $cfg['Servers'][$i]['auth_type'] = 'config' 就能“跳过密码”,其实这只是把用户名/密码写死在配置里——它仍然会原样发给 MySQL 去验证。所以:
-
auth_type = 'config'≠ 免密登录,只是省去输入步骤;若数据库账户本身只允许caching_sha2_password,这里填mysql_native_password格式的密码照样失败 -
auth_type = 'cookie'是最常用方式,密码经 HTTPS 传输后由 MySQL 验证,安全性取决于数据库侧策略 - 不要在
config.inc.php里存明文密码;如必须用config模式,至少确保文件权限为600且不在 Web 可访问路径下
真正起作用的永远是 MySQL 的 user 表和 plugin 字段——phpMyAdmin 只是前台窗口。最容易被忽略的一点:即使你设了强哈希,如果用户 Host 是 '%' 且没开防火墙白名单,攻击者仍可能暴力试探;哈希再安全,也挡不住撞库成功后的合法登录。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











