mysql 函数/存储过程的The user specified as a definer ('root'@'%') does not exist 解决方法

当使用的函数出现这种情况时,可以在数据库中找到这个函数,查看状态:

show FUNCTION  status where name='xxxxxx';

查看definer 一栏,是否是 root@localhost ,若不是 则修改过来。


存储过程:

在数据库写,为一个表写了一个触发器,此触发器调用一个存储过程;由公司写的一个c程序自动往该表写入数据,通过触发器转换成业务相关数据;同过root@localhost连接数据库,但提示192.168.2.%不存在

问题查找: 
登录数据库,运行show procedure status\G 或者show procedure status  发现procedure的definer都是root@192.168.2.% 

问题解决: 

方法一:修改存储过程的definer 


[sql]  view plain  copy
  1. update mysql.proc set definer='root@localhost' where db='db_name';   

方法二:修改sql security 
       sql secuirty的值决定了调用存储过程的方式,取值 :definer或者invoker 
       definer:在执行存储过程前验证definer对应的用户如:root@192.168.2.%是否存在,以及是否具有执行存储过程的权限,若没有则报错 
        invoker:在执行存储过程时判断inovker即调用该存储过程的用户是否有相应权限,若没有则报错。 
       修改语法: 
        alter procedure pro_name sql security invoker; 

ps: 在创建时指定sql security  
    create procedure pro_name(params....) 
    sql security definer|invoker 
    begin 
     ..... 
    end;

[sql]  view plain  copy
  1. update mysql.proc set definer='root@localhost' where db='db_name';   





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值