ruby 在Rails中运行种子时收到NO_AUTO_CREATE_USER弃用警告

mlnl4t2r  于 2022-11-04  发布在  Ruby
关注(0)|答案(1)|浏览(158)

我最近将我的Rails应用程序的MySQL版本从5.6升级到了5.7,在为数据库播种时遇到了这个问题。
当我运行播种时,它失败/中止并显示以下消息。

MysqlWarning: Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.

我在数据库中启用了NO_AUTO_CREATE_USER模式,但它仍然失败。

有人能告诉我我该怎么做来解决这个问题吗?我应该简单地从我的数据库中删除这个模式还是有其他方法来解决这个问题?
注意:我之前从数据库中删除了ONLY_FULL_GROUP_BY模式。

bhmjp9jg

bhmjp9jg1#

你不应该删除NO_AUTO_CREATE_USER。这是一个很好的特性,在MySQL 8.0中它是强制执行的行为。
它之所以重要是因为它的安全性。MySQL历史上允许您通过授予用户权限来隐式创建一个新用户。问题是人们在授予权限时没有指定密码:

GRANT ALL PRIVILEGES to 'newuser'@'%';

当GRANT自动创建一个用户时,这将以静默方式创建一个新用户 ,而不需要密码。 这是一个很大的安全禁忌。
通过要求在授予新用户权限之前使用CREATE USER创建新用户,它确保了用户将使用密码(或其他身份验证,如TLS证书)故意创建。
要解决此问题,您应该更改Rails种子代码,以便在授予权限之前执行CREATE USER。或者在运行Rails种子代码之前手动创建MySQL用户。
P.S.:你也不应该禁用ONLY_FULL_GROUP_BY。防止无效查询是很重要的。请看我的解释:列在选择列表中无效的原因,因为它未包含在聚合函数或GROUP BY子句中

相关问题