Laravel 11连接数据库遇SQLSTATE[HY000] [1045]权限拒绝问题求助
解决Laravel 11数据库连接1045访问拒绝问题
1. 修正数据库用户授权语句
你执行的授权对象是user@localhost,但错误提示里的数据库用户是solvrcyi_admin,两者不匹配。执行正确的授权命令:
GRANT ALL PRIVILEGES ON *.* TO 'solvrcyi_admin'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES;
FLUSH PRIVILEGES;用于让MariaDB立即加载新的权限规则,无需重启服务。
2. 严格校验配置文件一致性
确认.env和database.php中的数据库用户名完全为solvrcyi_admin,注意避免空格、大小写差异(虽然MySQL/MariaDB默认用户名不区分大小写,但严格匹配更稳妥):
- .env文件示例:
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=你的目标数据库名 DB_USERNAME=solvrcyi_admin DB_PASSWORD=你的数据库密码 - database.php的mysql配置需与.env对应:
'mysql' => [ 'driver' => 'mysql', 'url' => env('DATABASE_URL'), 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '3306'), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), // 其他默认配置项... ],
3. 清除Laravel配置缓存
Laravel会缓存配置文件,即使修改了.env,旧配置可能仍在生效,执行以下命令清空缓存:
php artisan config:clear php artisan cache:clear
4. 验证用户数据库访问权限
在MariaDB控制台用solvrcyi_admin登录,确认能正常访问目标数据库和users表:
mysql -u solvrcyi_admin -p -- 登录后执行 USE 你的目标数据库名; SELECT * FROM users LIMIT 1;
如果此步骤能成功执行,说明数据库层面权限无问题,问题大概率出在Laravel的配置缓存或配置细节错误。
5. 检查socket连接配置(可选)
若你的MariaDB使用socket而非TCP/IP连接,需在database.php中添加socket配置:
'mysql' => [ // 其他配置项... 'unix_socket' => env('DB_SOCKET', '/var/run/mysqld/mysqld.sock'), ],
对应的.env中可补充:DB_SOCKET=/var/run/mysqld/mysqld.sock(路径需根据你的系统实际情况调整)
内容的提问来源于stack exchange,提问作者Gucci
相关产品推荐
相关产品推荐

