【问题标题】:Create view without SUPER privileges in phpMyAdmin [duplicate]在phpMyAdmin中创建没有超级权限的视图[重复]
【发布时间】:2012-11-21 12:04:41
【问题描述】:

我正在尝试通过 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 特权,那么有什么办法可以解决这个问题吗?

提前致谢:-)

【问题讨论】:

  • 不,你无法解决这个问题。
  • 我相信可以做到的另一种方法是在您正在使用的数据库中创建一个测试视图。导出测试视图并查看用户名并使用它。
  • 检查定义器,除非明确需要,否则不应该是username@localhost,而是username@%

标签: mysql phpmyadmin


【解决方案1】:

来自文档:

如果您指定 DEFINER 子句,则不能将值设置为除您自己之外的任何用户,除非您具有 SUPER 权限。这些规则决定了合法的 DEFINER 用户值:

  • *如果您没有 SUPER 权限,则唯一合法的用户值是您自己的帐户,可以按字面意思指定,也可以使用 CURRENT_USER 指定。您不能将定义器设置为其他帐户。*
  • 如果您有 SUPER 权限,您可以指定任何语法上合法的帐户名称。如果帐户实际上不存在,则会生成警告。

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

解决方案:

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

【讨论】:

  • 简单来说,除非明确需要,否则定义者不应该是username@localhost,而是username@%
  • 在一个简单的文本编辑器中用 DEFINER = CURRENT_USER 替换每次出现的 DEFINER=xname@% 对我有用。