AllowNoPassword是phpMyAdmin中控制空密码登录的布尔开关,默认为false,必须显式设为true且MySQL用户使用mysql_native_password认证、authentication_string为空才生效。

phpMyAdmin 中 AllowNoPassword 必须显式开启
默认情况下,$cfg['Servers'][$i]['AllowNoPassword'] 是 false,哪怕 MySQL 用户密码为空,phpMyAdmin 也会拒绝登录并提示“空密码登陆禁止”。这不是权限问题,而是 phpMyAdmin 主动拦截。
- 找到配置文件:通常是
/etc/phpMyAdmin/config.inc.php,也可能是/usr/share/phpMyAdmin/libraries/config.default.php或libraries/config.default.php(取决于安装方式) - 搜索
AllowNoPassword,定位到类似这一行:$cfg['Servers'][$i]['AllowNoPassword'] = false; - 将其改为
true,注意必须是同一数组层级下的$i对应的服务器项(比如$i = 1) - 改完保存,重启 web 服务(如
systemctl restart httpd或nginx)
PHP 代码中 mysqli 或 PDO 连接空密码要留空字符串,不能省略参数
用 mysqli_connect() 或 PDO 连接时,如果 MySQL 用户密码为空,传参必须是空字符串 '',而不是 null、undefined 或直接省略。否则连接会失败或触发意外行为。
-
mysqli_connect('localhost', 'root', '')✅ 正确 -
mysqli_connect('localhost', 'root')❌ 可能报错或静默失败(取决于 MySQL 版本和客户端库) -
new PDO('mysql:host=localhost;dbname=test', 'root', null)❌null会被当作未提供密码,部分驱动会拒绝 -
new PDO('mysql:host=localhost;dbname=test', 'root', '')✅ 明确传递空字符串
MySQL 本身允许空密码,但需确认用户认证插件兼容
MySQL 8.0+ 默认使用 caching_sha2_password 插件,它对空密码支持不稳定;而 mysql_native_password 兼容性更好。如果空密码连不上,大概率是插件不匹配。
- 登录 MySQL(用有权限的账号):
mysql -u root -p - 检查目标用户用的插件:
SELECT host, user, plugin FROM mysql.user WHERE user = 'your_user'; - 若 plugin 是
caching_sha2_password,执行:ALTER USER 'your_user'@'localhost' IDENTIFIED WITH mysql_native_password BY ''; - 别忘了刷新:
FLUSH PRIVILEGES;
空密码不是安全选项,仅限开发或隔离环境
允许空密码本质是绕过认证,生产环境绝对禁用。即使在本地开发,也要确保 MySQL 绑定地址不是 0.0.0.0,而应限定为 127.0.0.1 或 ::1,避免被局域网其他设备探测利用。
立即学习“PHP免费学习笔记(深入)”;
最容易被忽略的是:phpMyAdmin 的 AllowNoPassword 和 MySQL 用户的认证插件这两层必须同时满足,缺一不可。只改一边,连接仍会中断。



















