procedure与function、trigger等建立时紧接着CREATE都有个definer可选项,该definer规定了访问该procedure等的安全控制。mysql
1、DEFINERsql
如:建立procedure数据库
说明:安全
上面示例指定definer为用户'admin'@'localhost',因此任意用户A访问该PROCEDURE 时,可否成功取决于A是否有调用该PROCEDURE的权限,以及definer是否有procedure中的SELECT的权限。blog
2、SQL SECURITYio
DEFINER默认为当前用户,也可指定其余用户。若是想经过访问者来判断是否具备访问该PROCEDURE 的权限,则可用SQL SECURITY指定。function
说明:select
该示例虽然指定了DEFINER ,但同时也指定了SQL SECURITY 类型为INVOKER ,SQL SECURITY 优先级高,因此安全类型为INVOKER,用户可否访问取决于用户是否有执行该PROCEDURE 的权限及该PROCEDURE 中的SELECT 权限(与select操做的表有关)。权限
固然,也可用SQL SECURITY 指定DEFINER:SQL SECURITY DEFINERim
3、mysql.proc
关于procedure的信息,存储在mysql数据库的proc表中,可多了解mysql数据库中的更多表!