如何允许用户在Postgresql中调用存储过程而不授予额外的权限?

nik*_*iks 6 postgresql stored-procedures transactions

我在 Postgresql 中有一个包含 COMMIT 语句的存储过程,我希望用户只能访问此过程,而不授予他们选择、插入等的权利。在函数中,我将使用 SECURITY DEFINER,但来自官方文档 https:// www. postgresql.org/docs/11/sql-createprocedure.html

SECURITY DEFINER 过程无法执行事务控制语句(例如 COMMIT 和 ROLLBACK,具体取决于语言)。

据我了解,这意味着我无法使用 SECURITY DEFINER,并且必须授予用户存储过程中所需的任何权限以允许用户执行它,这完全违背了仅允许用户使用函数或过程的整个目的。

如何调用其中包含 COMMIT 语句的存储过程,而不需要对过程内的所有语句进行单独授权?

J S*_*att 6

您可以向特定过程授予权限,以便用户只能拥有该过程的事务控制权限。

GRANT ALL ON PROCEDURE <procedure_name> TO <role>;
Run Code Online (Sandbox Code Playgroud)