У меня есть приложение Laravel, которое работает хорошо, но по какой-то странной причине в файлах журналов много странных сообщений:
[2019-10-04 10:24:21] production.ERROR: SQLSTATE [HY000] [1045] Доступ запрещен для пользователя 'forge' @ 'localhost' (с использованием пароля: НЕТ) {"исключение": "[объект] (Doctrine \ DBAL \ Driver \ PDOException (код: 1045):SQLSTATE [HY000] [1045] Доступ разрешен для пользователя 'forge' @ 'localhost' (используя пароль: НЕТ) по адресу / var / www / html / pzw_prod / vendor / doctrine / dbal / lib / Doctrine / DBAL / Driver / PDOConnection.php: 31, PDOException (код: 1045): SQLSTATE [HY000] [1045] Доступ запрещен для пользователя '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'),