创建和调用存储过程所需的权限
Privileges required to create and call stored procedures
我使用 create procedure sp_test()...
创建了一个存储过程
sp创建成功。然后当 运行 call sp_test()
以下是我的特权:
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON `%`.* TO 'xxx'@'%'
我按照 SO 问题中的建议尝试了 create DEFINER = 'root'@'%' procedure sp_test() 但遇到错误“访问被拒绝;您需要(至少一个)SUPER 权限才能执行此操作"
我需要什么额外特权?什么是 sql 语句来授予用户 xxx 权限?我在 Amazon Web Service
上使用 MySQL 5.6.10 (RDS)
您需要EXECUTE
权限才能运行将CALL语句运行一个过程。
https://dev.mysql.com/doc/refman/5.7/en/create-procedure.html 说:
CREATE PROCEDURE and CREATE FUNCTION require the CREATE ROUTINE privilege. They might also require the SUPER privilege, depending on the DEFINER value...
换句话说,只有在创建过程时要将 DEFINER 指定给除您自己以外的其他用户时,才需要 SUPER 权限。
在 Amazon RDS 中,您的 MySQL 用户不能拥有 SUPER 权限。那是他们的政策。您不能 GRANT SUPER
给任何您可以使用的用户。
因此您不能为过程、函数、触发器或视图设置 DEFINER。如果必须还原包含 DEFINER 子句的数据库,则必须先将其编辑掉。
另请参阅:
- https://aws.amazon.com/premiumsupport/knowledge-center/definer-error-mysqldump/
- https://www.percona.com/blog/2014/07/02/using-mysql-triggers-and-views-in-amazon-rds/
因此,您不能依赖过程的 DEFINER 来让您的会话访问您通常没有权限访问的表。使用 RDS 时 MySQL 的该功能不可用。您的 MySQL 用户必须具有直接权限才能访问过程访问的任何表。如果你不这样做,你会得到一个错误。
如果您需要该功能,您将不得不放弃使用 RDS,而是 运行 MySQL 在 EC2 实例上自行服务器。
我使用 create procedure sp_test()...
创建了一个存储过程sp创建成功。然后当 运行 call sp_test()
以下是我的特权:
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON `%`.* TO 'xxx'@'%'
我按照 SO 问题中的建议尝试了 create DEFINER = 'root'@'%' procedure sp_test() 但遇到错误“访问被拒绝;您需要(至少一个)SUPER 权限才能执行此操作"
我需要什么额外特权?什么是 sql 语句来授予用户 xxx 权限?我在 Amazon Web Service
上使用 MySQL 5.6.10 (RDS)您需要EXECUTE
权限才能运行将CALL语句运行一个过程。
https://dev.mysql.com/doc/refman/5.7/en/create-procedure.html 说:
CREATE PROCEDURE and CREATE FUNCTION require the CREATE ROUTINE privilege. They might also require the SUPER privilege, depending on the DEFINER value...
换句话说,只有在创建过程时要将 DEFINER 指定给除您自己以外的其他用户时,才需要 SUPER 权限。
在 Amazon RDS 中,您的 MySQL 用户不能拥有 SUPER 权限。那是他们的政策。您不能 GRANT SUPER
给任何您可以使用的用户。
因此您不能为过程、函数、触发器或视图设置 DEFINER。如果必须还原包含 DEFINER 子句的数据库,则必须先将其编辑掉。
另请参阅:
- https://aws.amazon.com/premiumsupport/knowledge-center/definer-error-mysqldump/
- https://www.percona.com/blog/2014/07/02/using-mysql-triggers-and-views-in-amazon-rds/
因此,您不能依赖过程的 DEFINER 来让您的会话访问您通常没有权限访问的表。使用 RDS 时 MySQL 的该功能不可用。您的 MySQL 用户必须具有直接权限才能访问过程访问的任何表。如果你不这样做,你会得到一个错误。
如果您需要该功能,您将不得不放弃使用 RDS,而是 运行 MySQL 在 EC2 实例上自行服务器。