指定为定义者的用户不存在 - GRANT 无法修复
Posted
技术标签:
【中文标题】指定为定义者的用户不存在 - GRANT 无法修复【英文标题】:The user specified as a definer does not exist - GRANT doesn't fix 【发布时间】:2019-11-07 09:35:35 【问题描述】:在我的 php webapp 在后端运行 mysql 5.5 多年没有问题之后,今天突然间我遇到了权限问题。
每当我尝试运行 INSERT 语句(从 PHP 或从 Workbench 或 Heidi)时,我都会收到以下错误消息:The user specified as a definer ('my_user'@'1.2.3.%') does not exist
一个症状是INSERT
语句不能由我的 PHP 或远程客户端(如 Workbench 或 Heidi)执行。我尝试了以下建议的各种解决方案:
MySQL error 1449: The user specified as a definer does not exist
Error: 1449, "The user specified as a definer ('root'@'localhost') does not exist"
一切都指向运行GRANT
语句。我按照建议尝试了各种 GRANT,但我总是收到此错误:
Access denied for user
好像我的权限被破坏了。因此,我在我的 VPS 的 BlueHost 控制面板中创建了一个全新的 DB 用户并授予了完全权限。我在这个全新的用户身上得到了同样的错误。
BlueHost 支持不知道该怎么做。
一些 Stack 文章说要使用 TRIGGERS 或 STORED PROCS 权限 - 但我没有任何这些类型的对象。简单的 INSERT 语句会导致此错误,并且可能还会导致 UPDATE,但我目前不确定。
与往常一样,用户拥有完整的权限。
我还能尝试什么?有没有办法修复损坏的权限?我可以毫无问题地运行 SELECT 语句。
我尝试使用 root 连接到数据库(使用与连接 WHM 时相同的密码),但它不喜欢我的密码或一般用户。我从未针对此数据库将 root 设置为特定用户,我不确定这是一个好主意。我一直使用专门为此数据库创建的特定用户。同样,过去 5 年完全没有问题。数据库没有升级,没有数据库变化,没有用户变化,什么都没有。
请帮忙,提前致谢。
【问题讨论】:
【参考方案1】:我解决了它。我最终创建了一个具有不同名称的新数据库,并创建了一个新的管理员用户来使用它。然后我针对它运行了我的数据库备份/转储脚本。有了这个新的数据库,一切都再次完美运行。旧的数据库仍然被劫持。
我认为旧数据库中的权限已损坏。
【讨论】:
以上是关于指定为定义者的用户不存在 - GRANT 无法修复的主要内容,如果未能解决你的问题,请参考以下文章
#1449 - phpMyAdmin(指定为定义者('***'@'localhost')的用户不存在)
如何修复 grant_type 错误为 NULL - 使用 Pay Pal 的 REST API 访问令牌不受支持的授权类型
无法为使用 MinIO 客户端的用户设置策略,即使用户存在于 LDAP 中,获取用户也不存在于 ldap 错误中