mysql 存储过程 definer_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 ;


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部