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会成功,原因见之前章节描述.
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步