Laravel 4 - 生产环境下的 MySQL 用户配置

4

我一直在研究Laravel 4框架,想知道人们如何为生产应用程序配置数据库用户权限。

在我阅读的所有文档中,都显示要使用具有根特权的root。生产应用程序是否使用其mySQL根登录?如果不是,那么授予该用户哪些权限?

我尝试创建一个名为“dev-app”的数据库用户,在应用程序使用的数据库上拥有模式权限,允许所有对象和DDL权限。不幸的是,当我运行'php artisan migrate'时,我收到了“Access Denied for user ...”错误消息。

在我简单地授予该用户所有权限并继续编码之前,我想知道如何在数据库中正确设置这些用户。

谢谢


你执行了FLUSH PRIVILEGES吗?或者更好的方式是重启MySQL? - tacone
1
请参阅MySQL的"访问被拒绝错误的原因"以获取潜在原因的全面列表。Laravel的CLI可能需要对其修改的数据库具有ALL权限。 - Jacob Budin
@tacone 我没有执行 FLUSH PRIVILEGES 或重启 mysql。每次添加或更改用户时,您需要执行这些操作吗? - Joel R.
1
是的,据我所知,您总是需要“FLUSH PRIVILEGES”。 - tacone
@tacone 我正在使用MySQL Workbench进行数据库管理,因此我猜测该工具在更改用户权限时会自动运行flush。 - Joel R.
3个回答

1
我通常在Laravel配置中有两个用户账户和对应的两个数据库连接。
第一个(默认)账户具有最小权限:

enter image description here

第二个账户用于迁移,配置如下:

enter image description here

在迁移期间使用如下:
  php artisan migrate --database=migrateconn

因此,出于安全原因,您的Web应用程序用户将拥有最少的特权,仅在部署任务时应使用提升的用户帐户。

0

我重新创建了用户,并将所有权限添加到Laravel数据库中,一切似乎都按照预期工作。感谢所有的提示和评论。


0

以下是适用于修改并粘贴到MySQL 5命令提示符的命令行。

GRANT CREATE TEMPORARY TABLES, DELETE, EXECUTE, INSERT, LOCK TABLES, SELECT, UPDATE ON databasename.* TO 'username'@'localhost' IDENTIFIED BY 'password'

对于迁移用户,稍微大一点的站点: GRANT ALTER, CREATE, CREATE TEMPORARY TABLES, DELETE, DROP, INDEX, INSERT, LOCK TABLES, REFERENCES, SELECT, UPDATE ON databasename.* TO 'username'@'localhost' IDENTIFIED BY 'password'

修改位置:

'databasename' 是您的数据库名称 'username' 是您的MySQL帐户用户名 'localhost' 是安装Laravel的服务器主机 'password' 是该用户名所需的密码

在MySQL 8上,这必须分为两个步骤,一个用于创建用户,另一个用于授予权限。

通常最好限制允许的权限,因此这是比以前某些答案更小的列表。如果/当我找到需要更多功能的Laravel代码时,我计划更新此内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接