开发者社区> 问答> 正文

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

当我运行以下查询时,我得到一个错误:

SELECT a.sl_id AS sl_id, a.quote_id AS quote_id, a.sl_date AS sl_date, a.sl_type AS sl_type, a.sl_status AS sl_status, b.client_id AS client_id, b.business AS business, b.affaire_type AS affaire_type, b.quotation_date AS quotation_date, b.total_sale_price_with_tax AS total_sale_price_with_tax, b.STATUS AS status, b.customer_name AS customer_name FROM tbl_supplier_list a LEFT JOIN view_quotes b ON (b.quote_id = a.quote_id) LIMIT 0, 30 错误消息是:

#1449 - The user specified as a definer ('web2vi'@'%') does not exist 为什么会出现该错误?我如何解决它?

展开
收起
保持可爱mmm 2020-05-13 14:43:34 854 0
1 条回答
写回答
取消 提交回答
  • 当将视图/触发器/过程从一个数据库或服务器导出到另一个数据库或服务器时,通常会发生这种情况,因为创建该对象的用户不再存在。

    您有两种选择:

    1.更改定义 通过DEFINER从转储中删除任何语句,这在最初导入数据库对象时最容易做到。

    稍后更改定义器比较棘手:

    如何更改视图的定义器 运行此SQL生成必要的ALTER语句

    SELECT CONCAT("ALTER DEFINER=youruser@host VIEW ", table_name, " AS ", view_definition, ";") FROM information_schema.views WHERE table_schema='your-database-name'; 复制并运行ALTER语句

    如何更改存储过程的定义器 例:

    UPDATE mysql.proc p SET definer = 'user@%' WHERE definer='root@%' 注意,因为这将更改所有数据库的所有定义器。

    2.创建丢失的用户 如果在使用MySQL数据库时发现以下错误:

    The user specified as a definer ('someuser'@'%') does not exist` 然后,您可以使用以下方法解决此问题:

    GRANT ALL ON . TO 'someuser'@'%' IDENTIFIED BY 'complex-password'; FLUSH PRIVILEGES; 从http://www.lynnnayko.com/2010/07/mysql-user-specified-as-definer-root.html

    这就像一种魅力-只需更改someuser为丢失用户的名称即可。在本地开发服务器上,您通常可以使用root。

    还要考虑您是否实际上需要授予用户ALL权限,或者他们是否可以减少权限。来源:stack overflow

    2020-05-13 14:43:52
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
One Box: 解读事务与分析一体化数据库 HybridDB for MySQL 立即下载
One Box:解读事务与分析一体化数据库HybridDB for MySQL 立即下载
如何支撑HTAP场景-HybridDB for MySQL系统架构和技术演进 立即下载

相关镜像