【发布时间】:2020-02-02 18:20:30
【问题描述】:
我有一个运行良好的 Laravel 应用程序,但由于某些奇怪的原因,日志文件中有很多奇怪的消息:
[2019-10-04 10:24:21] production.ERROR: SQLSTATE[HY000] [1045] Access denied for user 'forge'@'localhost' (using password: NO) {"exception":"[ object] (Doctrine\DBAL\Driver\PDOException(code: 1045): SQLSTATE[HY000] [1045] 在 /var/www/html/pzw_prod 的用户 'forge'@'localhost' (使用密码: NO) 拒绝访问/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php:31, PDOException(code: 1045): SQLSTATE[HY000] [1045] Access denied for user 'forge'@'l ocalhost' (使用密码: NO) 在 /var/www/html/pzw_prod/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php:27)
问题是,我没有使用名为forge 的用户连接到数据库。我的.env 使用完全不同的登录名。而且,我再说一遍,一切正常:与数据库的通信按预期工作。正在成功读取和写入数据。
那么...为什么在日志文件中出现这条消息?
更新:
config('database')
$ php artisan tinker
Psy Shell v0.9.9 (PHP 7.2.22 — cli) by Justin Hileman
>>> config('database')
=> [
"default" => "mysql",
"connections" => [
"sqlite" => [
"driver" => "sqlite",
"url" => null,
"database" => /* CENSORED */,
"prefix" => "",
"foreign_key_constraints" => true,
],
"mysql" => [
"driver" => "mysql",
"url" => null,
"host" => "127.0.0.1",
"port" => "3306",
"database" => /* CENSORED */,
"username" => "prod_pzw",
"password" => /* CENSORED */,
"unix_socket" => "",
"charset" => "utf8",
"collation" => "utf8_unicode_ci",
"prefix" => "",
"prefix_indexes" => true,
"strict" => true,
"engine" => null,
"options" => [],
],
"pgsql" => [
"driver" => "pgsql",
"url" => null,
"host" => "127.0.0.1",
"port" => "3306",
"database" => /* CENSORED */,
"username" => "prod_pzw",
"password" => /* CENSORED */,
"charset" => "utf8",
"prefix" => "",
"prefix_indexes" => true,
"schema" => "public",
"sslmode" => "prefer",
],
"sqlsrv" => [
"driver" => "sqlsrv",
"url" => null,
"host" => "127.0.0.1",
"port" => "3306",
"database" => /* CENSORED */,
"username" => "prod_pzw",
"password" => /* CENSORED */,
"charset" => "utf8",
"prefix" => "",
"prefix_indexes" => true,
],
],
"migrations" => "migrations",
"redis" => [
"client" => "predis",
"options" => [
"cluster" => "predis",
"prefix" => /* CENSORED */,
],
"default" => [
"url" => null,
"host" => "127.0.0.1",
"password" => null,
"port" => "6379",
"database" => 0,
],
"cache" => [
"url" => null,
"host" => "127.0.0.1",
"password" => null,
"port" => "6379",
"database" => 1,
],
],
]
更新 2:
'forge' 似乎是某种默认登录。似乎有时 Laravel 没有使用来自 .env 的值。我该如何调试?
$ cat config/database.php | grep -B 5 forge
'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'),
--
'pgsql' => [
'driver' => 'pgsql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '5432'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
--
'sqlsrv' => [
'driver' => 'sqlsrv',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', 'localhost'),
'port' => env('DB_PORT', '1433'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
【问题讨论】:
-
转到工匠修补匠,写
config('database')并在此处粘贴(编辑您的问题)输出。 (出于安全原因清理所有密码) -
@EliasSoares,我用
config('database')的输出更新了我的问题 -
你试过
php artisan config:clear吗? -
@cbaconnier,不,因为我没有缓存配置(缓存是空的,我已经检查过了)。
-
我刚刚在 Laravel 更新后遇到了这个问题。似乎 env var 的名称在某个时候发生了变化 - 它以前称为
DB_USER,但现在称为DB_USERNAME,因此请检查您的 .env 文件是否反映了正确的 var 名称。