MySQL 存储过程 函数 routine 权限

MySQL 存储过程 函数 routine 权限

1 mysql存储过程/函数权限

Mysql 某个用户在执行存储过程、函数时,需要检查相关对象的操作权限,比如是否有执行 该函数的权限 ,某个用户是否操作(DML)相关对象的权限 。

在创建存储过程或者函数时,有一个关键词,sql_security, 该关键词决定了对哪个用户进行权限检查。下面是创建存储过程或者函数的语法:

 

  • delimiter //    -- 声明分隔符(命令结束符)
    
    create
    
      definer = user@hostname | current_user
    
      [procedure| function] 对象名(参数)
    
      comment '注释'
    
      sql security definer | invoker   -- sql 的安全设置
    
    begin
    
       body
    
    end
    
    //
    
    delimiter ;    -- 声明分隔符(命令结束符)

1.1 相关对象操作权限检查

     sql_security 主要 是检查调用 者或者definer指定的用户,有没有操作相关对象的权限 。 该选项有两种值可选,一个是definer,一个是invoker.

  • DEFINER

    definer 检查指定的用户, 创建存储过程时可以省略掉。省略时,默认DEFINER=CURRENT_USER.

    sql security 设置为definer时,则数据库根据definer 是否有操作相应对象的权限 。

  • INVOKER

    检查调用存储过程/函数的用户是否有操作相应对象的处理权限 。

1.2 执行权限

Mysql可以(取消)授权给指定用户去执行某个存储过程或者函数等。

  • 授权给指定用户

    grant execute on <schema>.<procedure_name> to 'user'@'host';
    
  • 取消授权

    revoke  execute on <schema>.<procedure_name> from 'user'@'host';
    

Author: halberd.lee

Created: 2019-07-18 Thu 17:49

Validate

posted @ 2019-07-15 16:52  halberd.lee  阅读(3583)  评论(0编辑  收藏  举报