#1449 - phpMyAdmin(指定为定义者('***'@'localhost')的用户不存在)
Posted
技术标签:
【中文标题】#1449 - phpMyAdmin(指定为定义者(\'***\'@\'localhost\')的用户不存在)【英文标题】:#1449 - phpMyAdmin (The user specified as a definer ('***'@'localhost') does not exist)#1449 - phpMyAdmin(指定为定义者('***'@'localhost')的用户不存在) 【发布时间】:2017-02-16 12:17:12 【问题描述】:我目前正在将我的所有“视图”从使用 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。
【问题讨论】:
用户不见了?? 但是 'etd' 从来没有出现在新的 VPS 上,所以它怎么知道它是什么用户呢?我尝试将“etd”更改为链接到我正在运行它的数据库的用户名,但它仍然无法正常工作。 尝试创建新用户然后尝试 但是etd
是从哪里得到的呢? :S
按照以下步骤操作: 1.转到 PHPMyAdmin 2.选择您的数据库 3.选择您的表 4.在顶部菜单上单击“触发器” 5.单击“编辑”以编辑触发器 6.将定义者从 [user@localhost] 更改为 root@localhost
【参考方案1】:
select user, host from mysql.user;
您可以使用此命令获取您的用户和主机信息。如果您使用 root 作为用户,请尝试使用 root@localhost
【讨论】:
【参考方案2】:DEFINER
在 MySQL CREATE VIEW
语句中是可选的。
您可以尝试修改语句以从语句中删除DEFINER = 'user'@'host'
。
这相当于在语句中指定DEFINER = CURRENT_USER
。
鉴于SQL SECURITY DEFINER
,这将影响视图的安全上下文。
如果要在视图定义中指定DEFINER
(在CREATE VIEW
语句中),则指定的用户将需要存在于MySQL 中。
请注意,MySQL 中的“用户”由用户名和和主机标识。
也就是说,'etd'@'%'
与'etd'@'localhost'
是不同的用户。
要创建用户,您可以运行如下语句:
GRANT USAGE ON *.* TO 'etd'@'localhost' IDENTIFIED BY 'mysecretpassword'
同样的用户还需要被授予对视图底层表的适当 SELECT 权限,
要在 MySQL 实例上创建用户,您希望将定义从另一个 MySQL 实例“复制”到另一个...
在“源”实例(我们要“复制”的'etd'@'localhost'
用户存在的地方,我们可以运行如下语句:
SHOW GRANTS FOR 'etd'@'localhost'
它返回的行很好地表示了我们需要在另一个 MySQL 实例上运行的语句,以便在那里创建用户。
【讨论】:
@spenser7593 SHOW GRANTS 显示:GRANT USAGE ON . TO 'etd'@'localhost' IDENTIFIED BY PASSWORD '*RANDOMCODE' @user6618037:您可以获取 SHOW GRANTS 语句的输出(在“源”实例上执行,您要从中复制用户),并将其交给 another 数据库实例,并执行这些语句(添加分号)来创建用户。 (我会注意到,“不能让它工作”并不是特别描述你观察到的行为,就帮助识别问题而言。)【参考方案3】:该用户不存在,因此您要么需要创建它,要么使用另一个存在并具有必要权限的用户。
etd 是在原始源中用作定义者的用户。
【讨论】:
如何创建用户? @user6618037,请看这篇文章,最后应该可以创建用户了:dev.mysql.com/doc/refman/5.7/en/create-user.html以上是关于#1449 - phpMyAdmin(指定为定义者('***'@'localhost')的用户不存在)的主要内容,如果未能解决你的问题,请参考以下文章
[H背包] lc1449. 数位成本和为目标值的最大数字(背包求具体方案+状态定义+边界情况)
Worklight、SQL-Adapter、指定为定义者的用户 ('mobilefirst'@'localhost') 不存在