DELIMITER $$有个definer,指定存储过程属于哪个用户,SQL SECURITY指定了调用存储过程的方式,DEFINER 定义着(默认),INVOKER调用者
CREATE
/*[DEFINER = { user | CURRENT_USER }]*/
PROCEDURE `DB_U1`.`P1`()
/*LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
| COMMENT 'string'*/
BEGIN
XXX;
END$$
DELIMITER ;
第一种,如果是以定义着身份执行,默认没问题,如果不是定义着,可以修改:
update mysql.P1 set definer='root@localhost' where db='db_name';
第二种,如果是另外一个用户执行,需要满足两个条件:
1,调用者具有调用存储过程的权限,2,存储过程拥有者本身具有执行存储过程的权限
第三种,修改存储过程的默认调用者权限,lter procedure P1 sql security invoker,或者创建过程时候指定
以上同样适用于视图,触发器,事件等