MySQL中创建存储过程时通过DEFINER和SQL SECURITY设置访问权限
2017-07-31 14:16
316 查看
procedure与function、trigger等创建时紧接着CREATE都有个definer可选项,该definer规定了访问该procedure等的安全控制。
上面示例指定definer为用户
DEFINER默认为当前用户,也可指定其他用户。如果想通过访问者来判断是否具有访问该PROCEDURE 的权限,则可用SQL SECURITY指定。
该示例虽然指定了DEFINER ,但同时也指定了SQL SECURITY 类型为INVOKER ,SQL SECURITY 优先级高,所以安全类型为INVOKER,用户能否访问取决于用户是否有执行该PROCEDURE 的权限及该PROCEDURE 中的SELECT 权限(与select操作的表有关)。
当然,也可用SQL SECURITY 指定DEFINER:SQL SECURITY DEFINER
CREATE DEFINER = `bigdata1`@`192.168.%` PROCEDURE `Test`() BEGIN ...... END;
上面示例指定definer为用户
bigdata1@
192.168.%,所以任意用户A访问该PROCEDURE 时,能否成功取决于A是否有调用该PROCEDURE的权限,以及definer是否有procedure中的SELECT的权限。
DEFINER默认为当前用户,也可指定其他用户。如果想通过访问者来判断是否具有访问该PROCEDURE 的权限,则可用SQL SECURITY指定。
CREATE DEFINER = `bigdata1`@`192.168.%` PROCEDURE `Test`() SQL SECURITY INVOKER BEGIN ...... END;
该示例虽然指定了DEFINER ,但同时也指定了SQL SECURITY 类型为INVOKER ,SQL SECURITY 优先级高,所以安全类型为INVOKER,用户能否访问取决于用户是否有执行该PROCEDURE 的权限及该PROCEDURE 中的SELECT 权限(与select操作的表有关)。
当然,也可用SQL SECURITY 指定DEFINER:SQL SECURITY DEFINER
相关文章推荐
- SQL基础学习(二)- 通过命令行创建和设置一个MySQL用户
- MySQL创建数据库,授权用户访问权限,通过Navicat Premium进行连接
- MYSQL 更改数据库data存储目录 创建用户 创建权限 设置远程访问的权限.
- Mysql远程链接访问权限设置
- Mysql用户访问权限设置
- 如何通过命令行创建和设置一个MySQL用户
- mysql创建用户并设置所有权限
- Mysql创建存储过程示例_设置变量方法_
- mysql用命令创建用户创建数据库设置权限
- 如何通过命令行创建和设置一个MySQL用户
- (通过SQL*Plus)Oracle创建表空间、用户并授予权限命令,切换当前用户
- linux,Ubuntu 16.04 设置MySQL远程访问权限
- linux,Ubuntu设置MySQL远程访问权限
- 如何通过命令行创建和设置一个MySQL用户
- MySQL中修改密码及访问权限设置详解
- Centos下mysql数据库安装、创建数据库、utf8编码设置、外部访问授权、导入sql执行、开机启动(系列3)
- mysql的bind-address设置为127.0.0.1,通过localhost连接访问不了
- MySQL创建用户 权限设置
- Ubuntu 16.04 设置允许root用户MySQL远程访问权限
- sql语句创建新登录名和设置权限