关于mysql存储过程的definer的有关问题

关于mysql存储过程的definer的问题

由于对mysql了解不够透彻,导致对definer问题查了好久才解决问题

记录自己的一些理解!

问题描述:

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

问题查找:

登录数据库,show procedure status\G 发现procedure的definer都是root@192.168.2.%

问题解决:

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

       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;

关于mysql存储过程的definer的有关问题

相关文章:

你感兴趣的文章:

标签云: