当我运行以下查询时,我得到一个错误:

SELECT
  `a`.`sl_id`                     AS `sl_id`,
  `a`.`quote_id`                  AS `quote_id`,
  `a`.`sl_date`                   AS `sl_date`,
  `a`.`sl_type`                   AS `sl_type`,
  `a`.`sl_status`                 AS `sl_status`,
  `b`.`client_id`                 AS `client_id`,
  `b`.`business`                  AS `business`,
  `b`.`affaire_type`              AS `affaire_type`,
  `b`.`quotation_date`            AS `quotation_date`,
  `b`.`total_sale_price_with_tax` AS `total_sale_price_with_tax`,
  `b`.`STATUS`                    AS `status`,
  `b`.`customer_name`             AS `customer_name`
FROM `tbl_supplier_list` `a`
  LEFT JOIN `view_quotes` `b`
    ON (`b`.`quote_id` = `a`.`quote_id`)
LIMIT 0, 30

错误信息是:

#1449 - The user specified as a definer ('web2vi'@'%') does not exist

为什么会出现这个错误?我该怎么解决呢?


当前回答

通过运行以下注释修复。

grant all on *.* to 'web2vi'@'%' identified by 'root' with grant option;
FLUSH PRIVILEGES;

如果你得到的是some_other而不是web2vi,那么你必须相应地改变名称。

其他回答

这种情况发生在我用MYSQL Workbench 6.3 Community在Windows 10上导入转储文件后,提示“root@%不存在”。即使用户存在。 首先,我试图注释掉DEFINER,但是,这没有工作。 然后,我用“root@localhost”替换了“root@%”上的字符串,并重新导入转储。这招对我很管用。

最初创建SQL视图或过程的用户已被删除。如果您重新创建该用户,它应该可以解决您的错误。

您的视图“view_quotes”可能已经从“web2vi”是有效用户的另一个数据库复制到“web2vi”不是有效用户的数据库。 将“web2vi”用户添加到数据库或更改视图(通常删除DEFINER='web2vi'@'%'部分并执行脚本将完成此操作)

grant all on *.* to 'username'@'%' identified by 'password' with grant option;

例子:

grant all on *.* to 'web2vi'@'%' identified by 'password' with grant option;

尝试将您的过程设置为 安全调用程序

Mysql默认将过程安全性设置为“DEFINER”(CREATOR OF)..您必须将安全性设置为“调用者”。