zoukankan      html  css  js  c++  java
  • mysql存储过程的权限 definer

    mysql中用户对存储过程的权限有:

    ALTER ROUTINE 编辑或删除存储过程

    CREATE ROUTINE 创建存储过程

    EXECUTE运行存储过程


    存储过程的创建者拥有存储过程的ALTER、CREATE、EXECUTE权限。


    详细实验后续补充。


    DEFINER用于指明存储过程是由哪个用户定义的,默认存储过程的定义者是存储过程,跟存储过程的使用权限无关。
    INVOKER用于指定哪些用户有调用存储过程的权限,此时会以调用者的权限去执行存储过程。
    默认情况下被执行的存储过程具有其创建者的权限,比如用户A创建了存储过程P1,用户B运行存储过程P1时,只有用户A有操作权限的数据才能被P1操作。
    假设用户A只有CREATE ROUTINE权限,没有select、update、delete等权限,正常情况下存储过程P1不能执行任何操作。如果在创建存储过程P1时,使用 SQL SECURITY INVOKER特征子句,让存储过程使用运行者的权限,这样即使P1的创建者没有数据操作权限,P1也可以正常使用。


    如果在创建存储过程时指定为root@%,将有可能导致root@localhost在使用存储过程时出现权限问题。


    相关操作方法:
    查看存储过程的创建语句:

    show create procedure 存储过程名;

    查看存储过程的信息:

    show procedure status like '存储过程名'G

    查看存储过程的Definer信息:

    select db,name,type,definer from mysql.proc where name='存储过程名' and type='PROCEDURE';

    创建存储过程时指定definer字段:

    CREATE
    DEFINER = ‘root@localhost’  -- 默认值
    PROCEDURE 存储过程名 ........


    测试存储过程

    delimiter $
    create procedure p_t1(in id int)
    begin
       insert into mysql.t2 values(id,'a');
       select count(*) from mysql.t2;
    end
    $
    delimiter ;

  • 相关阅读:
    如何编写优雅的代码:05. 设计模式(下)
    ArcGIS之Cartogram地图变形记
    GIS规划应用——基于哈夫模型的GIS服务区分析
    基于GIS的旅游辐射区人口统计
    图斑整理之字段计算器使用技巧
    ArcGIS制作放射状流向地图(Radial Flow Map)
    SQL Server时间粒度系列
    (原)SQL Server 代理作业执行持续时间简述
    (原)SQL Server 系统提供功能的三个疑惑
    sql server实现自定义分割月功能
  • 原文地址:https://www.cnblogs.com/timelesszhuang/p/3675357.html
Copyright © 2011-2022 走看看