`CREATE ALGORITHM=UNDEFINED DEFINER` 需要超级权限

Yah*_*din 5 mysql

我正在尝试将我的旧数据库之一导入到我的新数据库中。

为此,我创建了一个与以前具有相同权限的用户:

除了以下命令外,几乎每个命令似乎都有效:

CREATE ALGORITHM=UNDEFINED DEFINER=`foo`@`localhost` SQL SECURITY DEFINER VIEW `wp_affiliate_wp_campaigns` AS select `wp_affiliate_wp_visits`.`affiliate_id` AS `affiliate_id`,`wp_affiliate_wp_visits`.`campaign` AS `campaign`,count(`wp_affiliate_wp_visits`.`url`) AS `visits`,count(distinct `wp_affiliate_wp_visits`.`url`) AS `unique_visits`,sum(if((`wp_affiliate_wp_visits`.`referral_id` <> 0),1,0)) AS `referrals`,round(((sum(if((`wp_affiliate_wp_visits`.`referral_id` <> 0),1,0)) / count(`wp_affiliate_wp_visits`.`url`)) * 100),2) AS `conversion_rate` from `wp_affiliate_wp_visits` group by `wp_affiliate_wp_visits`.`affiliate_id`,`wp_affiliate_wp_visits`.`campaign`;
Run Code Online (Sandbox Code Playgroud)

这给了我以下错误:

Error Code: 1227. Access denied; you need (at least one of) the SUPER privilege(s) for this operation
Run Code Online (Sandbox Code Playgroud)

这很奇怪,因为此表是由与我的旧数据库具有相同权限(即 table 的所有权限foo)的用户创建的。

所以我的问题是:

  • 这个命令到底是做什么的?
  • 当我的旧数据库从未执行过时,为什么我突然需要超级权限才能执行它?

小智 8

我遇到了这个相同的问题。对我有用的是取消:

  ALGORITHM=UNDEFINED DEFINER=`foo`@`localhost` SQL SECURITY DEFINER
Run Code Online (Sandbox Code Playgroud)

然后你将只需要:

  CREATE VIEW `wp_affiliate_wp_campaigns'...
Run Code Online (Sandbox Code Playgroud)

像魅力一样工作。祝你好运!