我有一个运行良好的 Laravel 应用程序,但由于某些奇怪的原因,日志文件中有很多奇怪的消息:
\n\n\n\n\n[2019-10-04 10:24:21] Production.ERROR: SQLSTATE[HY000] [1045] 用户\'forge\'@\'localhost\'访问被拒绝(使用密码:NO){“例外”:“ [object] (Doctrine\\DBAL\\Driver\\PDOException(code: 1045): SQLSTATE[HY000] [1045] 用户\'forge\'@\'localhost\' 的访问被拒绝(使用密码:NO) /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)
\n
问题是,我没有使用名为 的用户连接到数据库forge。我.env使用完全不同的登录名。而且,我再说一遍,一切正常:与数据库的通信按预期工作。数据读写成功。
那么...为什么日志文件中出现此消息?
\n\n更新:
\n\nconfig(\'database\')
$ php artisan tinker\nPsy Shell v0.9.9 (PHP 7.2.22 \xe2\x80\x94 cli) by Justin Hileman\n>>> config(\'database\')\n=> [\n "default" => "mysql",\n "connections" => [\n "sqlite" => [\n "driver" => "sqlite",\n "url" => null,\n "database" => /* CENSORED */,\n "prefix" => "",\n "foreign_key_constraints" => true,\n ],\n "mysql" => [\n "driver" => "mysql",\n "url" => null,\n "host" => "127.0.0.1",\n "port" => "3306",\n "database" => /* CENSORED */,\n "username" => "prod_pzw",\n "password" => /* CENSORED */,\n "unix_socket" => "",\n "charset" => "utf8",\n "collation" => "utf8_unicode_ci",\n "prefix" => "",\n "prefix_indexes" => true,\n "strict" => true,\n "engine" => null,\n "options" => [],\n ],\n "pgsql" => [\n "driver" => "pgsql",\n "url" => null,\n "host" => "127.0.0.1",\n "port" => "3306",\n "database" => /* CENSORED */,\n "username" => "prod_pzw",\n "password" => /* CENSORED */,\n "charset" => "utf8",\n "prefix" => "",\n "prefix_indexes" => true,\n "schema" => "public",\n "sslmode" => "prefer",\n ],\n "sqlsrv" => [\n "driver" => "sqlsrv",\n "url" => null,\n "host" => "127.0.0.1",\n "port" => "3306",\n "database" => /* CENSORED */,\n "username" => "prod_pzw",\n "password" => /* CENSORED */,\n "charset" => "utf8",\n "prefix" => "",\n "prefix_indexes" => true,\n ],\n ],\n "migrations" => "migrations",\n "redis" => [\n "client" => "predis",\n "options" => [\n "cluster" => "predis",\n "prefix" => /* CENSORED */,\n ],\n "default" => [\n "url" => null,\n "host" => "127.0.0.1",\n "password" => null,\n "port" => "6379",\n "database" => 0,\n ],\n "cache" => [\n "url" => null,\n "host" => "127.0.0.1",\n "password" => null,\n "port" => "6379",\n "database" => 1,\n ],\n ],\n ]\nRun Code Online (Sandbox Code Playgroud)\n\n更新2:
\n\n看来“forge”是某种默认登录。似乎有时 Laravel 不使用来自 的值.env。我该如何调试这个?
$ cat config/database.php | grep -B 5 forge\n \'mysql\' => [\n \'driver\' => \'mysql\',\n \'url\' => env(\'DATABASE_URL\'),\n \'host\' => env(\'DB_HOST\', \'127.0.0.1\'),\n \'port\' => env(\'DB_PORT\', \'3306\'),\n \'database\' => env(\'DB_DATABASE\', \'forge\'),\n \'username\' => env(\'DB_USERNAME\', \'forge\'),\n--\n \'pgsql\' => [\n \'driver\' => \'pgsql\',\n \'url\' => env(\'DATABASE_URL\'),\n \'host\' => env(\'DB_HOST\', \'127.0.0.1\'),\n \'port\' => env(\'DB_PORT\', \'5432\'),\n \'database\' => env(\'DB_DATABASE\', \'forge\'),\n \'username\' => env(\'DB_USERNAME\', \'forge\'),\n--\n \'sqlsrv\' => [\n \'driver\' => \'sqlsrv\',\n \'url\' => env(\'DATABASE_URL\'),\n \'host\' => env(\'DB_HOST\', \'localhost\'),\n \'port\' => env(\'DB_PORT\', \'1433\'),\n \'database\' => env(\'DB_DATABASE\', \'forge\'),\n \'username\' => env(\'DB_USERNAME\', \'forge\'),\nRun Code Online (Sandbox Code Playgroud)\n
Vik*_*iya 16
过去几天我遇到了同样的问题,我想我已经解决了:
由于某种原因,中的设置.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',
Run Code Online (Sandbox Code Playgroud)
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,
],
Run Code Online (Sandbox Code Playgroud)
将localhost,,,更改为您的实际设置。databaseusernamepassword.env
此示例适用于MySQL如果您使用其他数据库引擎,请改为更改这些变量。
可能有更好的解决方案(更安全?),但这就是迄今为止阻止错误出现的原因。
| 归档时间: |
|
| 查看次数: |
14065 次 |
| 最近记录: |