gpt4 book ai didi

mysql - 表 'session_variables' 的命令被拒绝

转载 作者:行者123 更新时间:2023-11-29 06:24:02 25 4
gpt4 key购买 nike

更新mysql版本5.7.8-rc-log后,我授予权限是这样的:

GRANT select ON test_db.* TO 'test'@'host';

出现以下错误:

SELECT command denied to user 'test'@'host' for table 'session_variables'

但是当我授予这样的权限时:

GRANT select ON *.* TO 'test'@'host';

它有效。有人可以帮忙吗?

最佳答案

这是 article1 , article2 , article3与这个问题有关。根据这些文章,解决方法是在 /etc/my.cnf 中设置 show_compatibility_56 = on 并重新启动 mysql 服务器。

MySQL 5.7 对我们查询全局变量和状态变量的方式进行了更改:INFORMATION_SCHEMA.(GLOBAL|SESSION)_(VARIABLES|STATUS) 表现在已弃用且为空。相反,我们将使用各自的 performance_schema.(global|session)_(variables|status) 表。

但变化远不止于此;还有一个安全变化。

所以非root用户得到:

mysql> show session variables like 'tx_isolation';
ERROR 1142 (42000): SELECT command denied to user 'normal_user'@'my_host' for table 'session_variables'

解决方案?

以下是解决方案,但并不能真正解决问题:

  • 显示命令。 SHOW GLOBAL|SESSION VARIABLES|STATUS 将正常工作,并将隐式知道是通过 information_schema 还是 performance_schema 表提供结果。但是,我们不是应该更快乐地使用 SELECT 查询吗?这样我真的可以做比 LIKE 'variable_name%' 更聪明的事情吗?当然,您不能在服务器端游标中使用 SHOW。您的存储例程现在一团糟。这并没有解决 GRANT 问题。
  • show_compatibility_56:5.7中引入的变量,boolean。从多个方面来看,这确实是一部伪装的时间旅行悖论小说。文档介绍了它,并说它已被弃用。时间旅行悖论:O但它实际上适用于 5.7.8(最新)时间旅行悖论情节变厚你的自动化脚本事先并不知道你的 MySQL 是否有这个变量因此 SELECT @@global.show_compatibility_56 将在 5.6 上产生错误但是 SHOW GLOBAL VARIABLES LIKE 'show_compatibility_56' 的“安全”方式将在 5.7 上因特权错误而失败时间旅行悖论:O实际上,我的同事 Simon J. Mudd 建议,show_compatibility_56 默认为 OFF。我支持这个思路。否则它又是 old_passwords=1 了。show_compatibility_56 不能解决 GRANT 问题。这不会解决任何迁移路径。它只是推迟了我遇到同样问题的那一刻。当我将变量从“1”翻转为“0”时,我回到了第一个方 block 。

建议

如上所述,我声称安全不是问题。我声称,如果当前的解决方案不变,Oracle 将在 5.6 中再次陷入 no-easy-way-to-migrate-to-GTID 的陷阱。我声称一次发生了太多变化。因此,我建议选择两种流程之一:

  • 流程 1:保留 information_schema,稍后迁移到 performance_schema在 5.7 中,information_schema 表仍应生成数据。information_schema 没有安全限制从 information_schema 读取时生成警告(“...这将被弃用...”)performance_schema 也可用。有安全限制,无论如何。在 5.8 中移除 information_schema 表;我们只剩下 performance_schema。
  • 流程 2:轻松迁移到 performance_schema:在 5.7 中,performance_schema 表不需要任何特殊权限。任何用户都可以从中读取。保持 show_compatibility_56 不变。SHOW 命令自行在 information_schema 或 performance_schema 之间进行选择——就像现在所做的那样。在 5.8 中,performance_schema 表将需要 SELECT 权限。

希望对您有所帮助。

关于mysql - 表 'session_variables' 的命令被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32053655/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com