【问题标题】:MySQL user specified as definer does not exist指定为定义者的 MySQL 用户不存在
【发布时间】:2013-12-09 00:24:57
【问题描述】:

我正在尝试使用 php 调用存储过程。前一天这是工作,但今天我收到一个错误“指定为定义者的用户('用户名'@'前一天我的 ip')不存在”

该程序位于主机中,我通过 cpanel 的远程 MySql 授予我的 ip 访问权限。 我使用的代码是正确的,取自这里http://www.php.net/manual/en/mysqli.quickstart.stored-procedures.php

是否因为我今天的 ip 不同而发生错误,即使我可以再次访问? 我该如何解决?

【问题讨论】:

  • 感谢您的回复。我相信我可以用你的代码解决它,但我没有 root 访问凭据。正如我所预料的那样,定义者与IP有关。以前我从 MySQL 工作台远程创建了这些存储过程,这就是原因。解决方案是使用 cPanel 提供的 phpMyAdmin 工具并使用它来创建存储过程(因此不再有定义器限制)。

标签: php mysql web


【解决方案1】:

如果您在使用 mysql 数据库时发现以下错误: 指定为定义者的用户 ('root'@'%') 不存在 然后您可以使用以下方法解决它:

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

感谢http://www.lynnnayko.com/2010/07/mysql-user-specified-as-definer-root.html

【讨论】:

    【解决方案2】:

    创建该过程的用户必须已被删除。由于您的用户 ID 映射到 IP 地址,因此 IP 的更改很可能是原因。如果您可以重新创建用户,那将起作用。

    或者,试试这个:

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

    这是一种稍微不安全的处理方式,但如果它只是本地业务,它应该不是问题。

    来源:http://www.lynnnayko.com/2010/07/mysql-user-specified-as-definer-root.html

    【讨论】:

      【解决方案3】:

      使用 MySQL Ansible 模块

      - name: create root@% user
        mysql_user: name=root host=% password=password priv=*.*:ALL,GRANT state=present
      

      【讨论】:

        猜你喜欢
        • 2021-07-28
        • 2022-01-14
        • 2012-04-27
        • 2016-07-13
        • 2019-01-04
        • 2020-09-25
        • 2017-02-16
        • 2019-11-07
        相关资源
        最近更新 更多