商会资讯

 找回密码
 立即注册

QQ登录

只需一步,快速开始

用新浪微博连接

一步搞定

搜索
热搜: 活动 交友 discuz
查看: 6967|回复: 0
打印 上一主题 下一主题

Mysql存储过程修改定义者

[复制链接]

109

主题

1

好友

3774

积分

管理员

Rank: 9Rank: 9Rank: 9

  • ta_mind
    mb_qb7
    2013-3-19 01:56
  • classn_01: 366 classn_02

    [LV.9]以坛为家II

    跳转到指定楼层
    楼主
    发表于 2016-12-28 11:04:37 |只看该作者 |倒序浏览
    MySQL中,执行存储过程时会检查过程的定义用户是否存在,如果不存在,即使当前用户有execute权限,也会报错
    The user specified as a definer (‘') does not exist


    如果想要继续执行这些过程就必须修改过程的定义用户,语句如下:
    mysql>update mysql.proc set DEFINER='usename' WHERE NAME='proc_name' AND db='mydb';
    修改完后,用户还需重新连接才能执行。

    我们也可以在创建存储过程时指定 SQL SECURITY INVOKER 选项,这样在调用存储过程时则只检查调用者是否具有执行权限
    DELIMITER $$
    CREATE
        /*[DEFINER = { user | CURRENT_USER }]*/
        PROCEDURE `test`.`a`()
        SQL SECURITY INVOKER  #不检查定义用户   
        BEGIN
    ...
        END$$
    DELIMITER ;

    show create procedure proc_name; //查看存储

    分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    分享分享0 收藏收藏0 转发到微博
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    回顶部