#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')的用户不存在)的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 错误 1449:指定为定义者的用户不存在

[H背包] lc1449. 数位成本和为目标值的最大数字(背包求具体方案+状态定义+边界情况)

Worklight、SQL-Adapter、指定为定义者的用户 ('mobilefirst'@'localhost') 不存在

指定为定义者的用户不存在 - GRANT 无法修复

[题解]P1449 后缀表达式

墨者靶场 phpMyAdmin后台文件包含分析溯源 (CVE-2018-12613)