gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 07:30:46 24 4
gpt4 key购买 nike

我使用 create procedure sp_test()... 创建了一个存储过程

sp 已成功创建。然后我在运行 call sp_test()

时收到错误提示“ Access denied for user 'xxx'@'%' to database 'DB'

以下是我的特权:

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 权限

我需要什么额外特权?以及给用户xxx赋予权限的sql语句是什么?我在 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 给您可以使用的任何用户。

因此您不能为过程、函数、触发器或 View 设置 DEFINER。如果您必须恢复包含 DEFINER 子句的数据库,则必须先将它们编辑掉。

另见:

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

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

关于mysql - 创建和调用存储过程所需的权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51390397/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com