在phpMyAdmin中创建视图而无需SUPER权限

9

我正在尝试通过phpmyadmin中的SQL选项卡创建/导入一个如下所示的视图:

CREATE ALGORITHM=UNDEFINED DEFINER=`byname`@`localhost` SQL SECURITY DEFINER VIEW `wr_averages` AS select `nf_users`.`id` AS `id`,(`nf_users`.`points` / `nf_users`.`played`) AS `average_points` from `nf_users` where (`nf_users`.`played` > 24);

我遇到了这个错误:

#1227 - Access denied; you need the SUPER privilege for this operation

我在我的托管公司无法获得SUPER权限,那么有什么方法可以解决这个问题吗?
提前感谢 :-)

不,你不能绕过那个。 - N.B.
我认为另一种方式是在您使用的数据库中创建一个测试视图。导出测试视图并查看用户名并使用它。 - madi
检查定义者,除非明确需要,否则不应该是 username@localhost,而应该是 username@% - Marco Marsala
1个回答

19

根据文档:

如果您指定了DEFINER子句,则除非您具有SUPER特权,否则不能将该值设置为任何用户,只能设置为自己的帐户。这些规则确定了合法的DEFINER用户值:

  • *如果您没有SUPER特权,则唯一合法的用户值是您自己的帐户,可以通过字面指定或使用CURRENT_USER来指定。您无法将定义者设置为其他帐户。
  • 如果您拥有SUPER特权,则可以指定任何语法上合法的帐户名称。如果该帐户实际上不存在,则会生成警告。

请检查您的MySQL帐户,它不是byname@localhost

解决方案:

  • 使用被授予SUPER特权的帐户创建带有DEFINER子句的新视图。
  • 在CREATE VIEW中不使用DEFINER子句,在这种情况下,MySQL将创建视图DEFINER=CURRENT_USER。

简单来说,除非明确需要,否则定义者不应该是username@localhost,而应该是username@% - Marco Marsala
1
使用简单文本编辑器将所有出现的 DEFINER=xname@% 替换为 DEFINER=CURRENT_USER 对我有效。 - Robin

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