'pdo_code' => '42000', 'db_code' => 1044, 'db_error' => 'Access denied for user \'username\'@\'host\' to database \'database_name\''
解决方案
检查数据库连接配置中的用户名和密码
确认用户是否有访问目标数据库的权限
为指定用户授予数据库访问权限
检查MySQL用户的主机限制(@'%' vs @'localhost')
验证数据库名称是否正确
重启MySQL服务使权限更改生效
MySQL权限管理示例
-- 查看当前用户权限
SHOW GRANTS FOR CURRENT_USER;
-- 授予用户对特定数据库的所有权限
GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'host';
-- 授予用户对特定数据库的特定权限
GRANT SELECT, INSERT, UPDATE, DELETE ON database_name.* TO 'username'@'host';
-- 刷新权限使更改生效
FLUSH PRIVILEGES;
-- 创建新用户并授予权限
CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON database_name.* TO 'newuser'@'localhost';
FLUSH PRIVILEGES;
权限检查流程
1. 用户身份验证
✓ 用户名: username
✓ 密码: 已验证
✓ 主机: localhost
2. 数据库访问权限
✗ 数据库: target_database
✗ 权限: SELECT, INSERT, UPDATE, DELETE
错误: 用户没有访问该数据库的权限
3. 解决方案
✓ 使用GRANT命令授予权限
✓ 执行FLUSH PRIVILEGES
✓ 重新连接数据库测试
常见原因与排查
1. 连接配置问题
用户名或密码错误
数据库名称拼写错误
主机地址配置错误(localhost vs 127.0.0.1)
2. 权限配置问题
用户没有被授予数据库访问权限
权限仅限于特定表而不是整个数据库
主机限制(@'localhost' vs @'%')
3. MySQL配置问题
权限表损坏
MySQL服务需要重启
skip-grant-tables模式启用
调试工具
使用以下MySQL命令诊断权限问题:
-- 查看所有用户及其权限
SELECT User, Host FROM mysql.user;
-- 查看特定用户的权限
SHOW GRANTS FOR 'username'@'host';
-- 查看数据库权限
SELECT * FROM mysql.db WHERE Db = 'database_name';
-- 查看表权限
SELECT * FROM mysql.tables_priv WHERE Db = 'database_name';