创建和调用存储过程所需的权限

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 子句的数据库,则必须先将其编辑掉。

另请参阅:

因此,您不能依赖过程的 DEFINER 来让您的会话访问您通常没有权限访问的表。使用 RDS 时 MySQL 的该功能不可用。您的 MySQL 用户必须具有直接权限才能访问过程访问的任何表。如果你不这样做,你会得到一个错误。

如果您需要该功能,您将不得不放弃使用 RDS,而是 运行 MySQL 在 EC2 实例上自行服务器。