Laravel: доступ запрещен для пользователя «forge» @ «localhost» (но такой пользователь не используется в приложении) - PullRequest
0 голосов
/ 04 октября 2019

У меня есть приложение 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'),

1 Ответ

2 голосов
/ 04 октября 2019

У меня была точно такая же проблема в течение последних нескольких дней, и я думаю, что решил ее:

Настройки в .env не всегда используются по тем или иным причинам, а иногда Laravel просто использует настройки по умолчаниюнастройки в config/app.php и config/database.php.

config/app.php:

// Change the 'SomeRandomString' to the generated key from your .env
'key' => env('APP_KEY', 'SomeRandomString'),

'cipher' => 'AES-256-CBC',

config/database.php

'mysql' => [
    'driver'    => 'mysql',
    'host'      => env('DB_HOST', 'localhost'),
    'database'  => env('DB_DATABASE', 'forge'),
    'username'  => env('DB_USERNAME', 'forge'),
    'password'  => env('DB_PASSWORD', ''),
    'charset'   => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix'    => '',
    'strict'    => false,
],

Изменить localhost, database,username, password с вашими фактическими настройками из .env.

Этот пример для MySQL, если вы используете другой механизм базы данных, вместо этого измените эти переменные.

Тамможет быть лучшим решением (более безопасным?), но это то, что до сих пор удерживало ошибку от показа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...