我目前正在将我的所有“观点”从123-reg托管的VPS转移到Heart Internet提供的另一个VPS。
以下是视图:
CREATE ALGORITHM=UNDEFINED DEFINER=`etd`@`localhost` SQL SECURITY DEFINER VIEW `vShoppingCart` AS SELECT `VCoursesUOC`.`Distributor` AS `Distributor`,`VCoursesUOC`.`Company` AS `Company`,`VCoursesUOC`.`Title` AS `Title`,`VCoursesUOC`.`Price` AS `Price`,(`VCoursesUOC`.`Price` / 5) AS `VAT`,(`VCoursesUOC`.`Price` * 1.2) AS `WithVAT`,(sum(`VCoursesUOC`.`Price`) * 1.2) AS `Total`,count(`VCoursesUOC`.`CourseId`) AS `NoOfCourses` FROM `VCoursesUOC` WHERE (`VCoursesUOC`.`Payment` = 'Unpaid') GROUP BY `VCoursesUOC`.`Title`,`VCoursesUOC`.`Distributor`,`VCoursesUOC`.`Company`,`VCoursesUOC`.`Price`
每次我尝试运行此操作时都会出现以下错误:
#1449 - The user specified as a definer ('etd'@'localhost') does not exist
我尝试将etd
更改为root用户并在MySQL数据库上更改数据库用户名,但它不能解决错误。
我可以尝试什么?
我以root用户身份登录phpMyAdmin。
答案 0 :(得分:0)
用户不存在,因此您需要创建它或使用另一个存在且具有必要权限的用户。
etd是在原始来源用作定义者的用户。
答案 1 :(得分:0)
MySQL DEFINER
声明中的CREATE VIEW
是可选。
您可以尝试修改语句以从语句中删除DEFINER = 'user'@'host'
。
这相当于在语句中指定DEFINER = CURRENT_USER
。
鉴于SQL SECURITY DEFINER
,这将影响视图的安全上下文。
如果要在视图定义中指定DEFINER
(在CREATE VIEW
语句中),则指定的用户需要存在于MySQL中。
请注意,MySQL中的“用户”由用户名和以及主机标识。
也就是说,'etd'@'%'
是与<{1}}不同的用户。
要创建用户,您可以运行如下语句:
'etd'@'localhost'
同样的用户还需要在视图底层的表上被授予适当的SELECT权限,
要在MySQL实例上创建用户,您要将定义从另一个MySQL实例“复制”到另一个...
在“source”实例(我们想要“复制”的GRANT USAGE ON *.* TO 'etd'@'localhost' IDENTIFIED BY 'mysecretpassword'
用户)存在的地方,我们可以运行如下语句的语句:
'etd'@'localhost'
由它返回的行很好地表示了我们需要在另一个MySQL实例上运行的语句,以便在那里创建用户。
答案 2 :(得分:0)
select user, host from mysql.user;
您可以使用此命令来获取用户和主机信息。如果您以root用户身份使用,请尝试使用 root @ localhost