Laravel SQL 通过网络连接错误,在 artisan 中有效

Laravel SQL connection error via web, works in artisan

尝试访问我的 Laravel 网站时,我在尝试执行 $candidate = App\Models\Candidate::find(400);

时收到 SQL 连接被拒绝的错误
SQLSTATE[HY000] [1698] Access denied for user 'root'@'localhost' (SQL: select * from `candidates` where `candidates`.`candid` = 400 limit 1)

但是,我可以从命令行使用 php artisan tinker 正常连接:

root@454ab4403b8f:/app# php artisan tinker
Psy Shell v0.9.6 (PHP 7.2.7-1+ubuntu18.04.1+deb.sury.org+1 — cli) by Justin Hileman
>>> App\Models\Candidate::find(400)
=> App\Models\Candidate {#2865
     candid: 400,
     firstname: "",
     ...
   }

artisan 的配置是否与 web 不同?为什么一个会工作而另一个不工作?

MySQL 数据库上的 ROOT 帐户通常被阻止登录非控制台。 Artisan 是控制台,您的用户已被识别。

只需在您的数据库中为您的开发目的创建一个专用的数据库和数据库用户。

永远不要使用 root 访问 Web 应用程序。始终为数据库等创建专门的用户。 Root 拥有太多权力,一些可能会在普通用户身上弹出的错误不会在 root 下弹出,这可能会导致在转向生产时出现意外错误。在您的本地环境中,您希望尽可能地模拟生产,并具有所有相同的限制。

此外,如果您的网站最终会出现弱点,并且在生产环境中您还使用 ROOT 作为数据库用户,那么如果黑客发现了弱点,黑客就可以 read/modify/wipe 您所有数据库中的所有数据,并且可能可以访问您的文件系统并以这种方式收集其他文件。除非配置数据库,否则永远不要使用 root。