PHP应用连接MySQL数据库时,若出现权限拒绝的错误提示,大多是因为数据库用户的授权配置不符合连接要求,需要从用户权限、主机匹配、密码验证等多个维度排查问题。

常见权限拒绝错误表现
PHP连接MySQL时出现的典型权限相关错误提示如下:
- Access denied for user 'test_user'@'localhost' (using password: YES)
- Access denied for user 'test_user'@'192.168.0.10' (using password: NO)
- Host 'web_server_ip' is not allowed to connect to this MySQL server
检查数据库用户授权设置步骤
1. 登录MySQL查看用户权限
首先使用管理员账号登录MySQL服务,查看目标用户的授权信息,确认权限范围是否包含当前操作:
-- 查看所有用户及对应的主机授权范围 SELECT user, host FROM mysql.user WHERE user = 'test_user'; -- 查看指定用户的完整权限 SHOW GRANTS FOR 'test_user'@'localhost';
如果用户对应的host字段不是%或者当前PHP服务所在的主机地址,就会出现主机不允许连接的权限错误。
2. 验证密码正确性
确认连接时使用的密码和MySQL中存储的密码一致,若密码错误也会触发权限拒绝提示:
-- 修改用户密码(MySQL 5.7及以上版本) ALTER USER 'test_user'@'localhost' IDENTIFIED BY 'new_password'; -- 刷新权限使配置生效 FLUSH PRIVILEGES;
3. 修正用户授权配置
如果权限范围不足或者主机不匹配,需要重新为用户授权:
-- 授予test_user用户所有数据库的所有权限,允许任意主机连接 GRANT ALL PRIVILEGES ON *.* TO 'test_user'@'%' IDENTIFIED BY 'user_password'; -- 仅授予test_user对test_db数据库的操作权限,仅允许localhost连接 GRANT SELECT, INSERT, UPDATE, DELETE ON test_db.* TO 'test_user'@'localhost' IDENTIFIED BY 'user_password'; -- 刷新权限 FLUSH PRIVILEGES;
PHP连接代码示例
完成授权配置后,使用正确的参数编写PHP连接代码:
<?php
$host = '127.0.0.1';
$port = 3306;
$user = 'test_user';
$password = 'user_password';
$database = 'test_db';
// 创建连接
$conn = new mysqli($host, $user, $password, $database, $port);
// 检查连接是否成功
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
echo "MySQL连接成功";
$conn->close();
?>
注意事项
授权时host字段的设置需要符合实际场景,生产环境不建议使用%开放所有主机访问权限,应尽量限制为固定的PHP服务主机地址。修改权限后一定要执行FLUSH PRIVILEGES命令,否则配置不会立即生效。如果使用的是云服务器或者Docker容器部署的MySQL,还需要检查服务端口是否开放,防火墙是否允许对应IP访问3306端口。