在MySQL中查找视图的定义者

6

我已经将一个包含视图的数据库从一台计算机迁移到另一台计算机,现在这些视图已经损坏了。我知道我需要在新机器上重新创建旧用户才能解决问题,但我的问题是:

我该如何找到创建视图的旧用户的用户名?我不再能够访问旧机器。

谢谢。


https://dba.stackexchange.com/questions/9249/how-do-i-change-the-definer-of-a-view-in-mysql - Channa
2个回答

9

"#1356 - 查看 'database.table' 引用了无效的表格或列或函数,或视图的定义者/调用者缺少使用它们的权限" - 这就是为什么我需要更改定义者,也是为什么我需要找出定义者的名称! :) - user3640967
像root一样拥有SUPER权限的账户是偶数吗? - Kenneth L.
是的 - 在新机器上,实际上根用户是我目前唯一设置的用户。 - user3640967
你的mysql版本是多少?我已经在mysql-community-server 5.6.27中使用普通用户测试了create view,并在删除普通用户后由root用户重新登录,尽管会报告警告,但仍然显示了create view语法的详细信息。 mysql> show warnings \G ... Level: Note Code: 1449 Message: The user specified as a definer ('testuser'@'localhost') does not exist ... Level: Warning Code: 1356 Message: View 'stackoverflow.testview' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them - Kenneth L.
这是版本为5.6.16的MySQL Community Server(GPL)。目前我已经通过删除并重新创建视图来解决了这个问题,但这并不是一个真正的解决方案... :/ - user3640967
1
翻译:哎呀..其实很久以前我也遇到过类似的情况(从MySQL 5.1升级到5.5,最后是5.6,然后清空了mysql.user表)。之后视图无法访问,我的前辈只是像你一样通过删除并重新创建视图(或 ALTER VIEW? 忘记了) 来解决它...他说如果可能的话,声明 SQL SECURITY INVOKER 而不是 SQL SECURITY DEFINER,以防止类似情况的再次发生。 - Kenneth L.

4
要查看每个视图的定义者,请执行以下操作:

select v.TABLE_SCHEMA, v.TABLE_NAME, v.`DEFINER` 
from information_schema.VIEWS v
where v.TABLE_SCHEMA not in ('sys');

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