MySQL存储过程之安全策略

1. CREATE ROUTINE

1 GRANT CREATE ROUTINE  
2 ON database-name . *  
3 TO user(s)   
4 [WITH GRANT OPTION]; 

  CREATE ROUTINE可以创建存储过程和函数,还可以创建视图和表.现在内置的root拥有该权限,同时清空有ALTER ROUTINE权限.

2. EXECUTE

1 GRANT EXECUTE  
2 ON database-name . *  
3 TO user(s)   
4 [WITH GRANT OPTION]; 

  EXECUTE决定是否可以使用或执行存储过程,存储过程的创建者默认拥有这个权限.

3. SHOW ROUTINE

1 GRANT SHOW ROUTINE
2 ON database-name . *  
3 TO user(s)   
4 [WITH GRANT OPTION]; 

  由于我们默认已拥有了控制视图的GRANT SHOW VIEW特权,在此基础上,为保证兼容,将来可能会添加GRANT SHOW ROUTINE特权

4. INVOKERS AND DEFINERS 

1 CREATE PROCEDURE p26 ()    
2     SQL SECURITY INVOKER
3     SELECT COUNT(*) FROM t //
4 CREATE PROCEDURE p27 ()
5     SQL SECURITY DEFINER
6     SELECT COUNT(*) FROM t //
7 GRANT INSERT ON db5.* TO peter; //

  上面的例子前面已提到,你是root用户创建两个存储过程并将插入权限赋给peter.注意peter没有对表t的select权限,只有root用户有.正因如此,以上代码Peter调用p26会失败,而调用p27会成功,原因见之前章节描述.

原文地址:https://www.cnblogs.com/free-coder/p/4777399.html