在 PostgreSQL 中授予对函数 pg_start_backup 的执行不起作用

Posted

技术标签:

【中文标题】在 PostgreSQL 中授予对函数 pg_start_backup 的执行不起作用【英文标题】:Granting execute on function pg_start_backup in PostgreSQL does not work 【发布时间】:2017-07-28 22:03:33 【问题描述】:

https://www.postgresql.org/docs/9.6/static/functions-admin.html#FUNCTIONS-ADMIN-BACKUP-TABLE 和 https://www.postgresql.org/docs/9.6/static/continuous-archiving.html 声明函数 pg_start_backup(text, boolean, boolean) 可以由超级用户或已被授予函数执行权限的用户执行。

实际上,这不起作用,因为该函数是“安全调用程序”。只有当它是“安全定义器”时它才会起作用。页面Create PostgreSQL 9 role with login (user) just to execute functions 说“必须使用 SECURITY DEFINER 创建函数,否则此用户仍将无法执行它们”,这是完全正确的。

除了“在函数 pg_start_backup 上执行”之外,我必须赋予用户哪些最低权限才能让他真正执行该函数?

【问题讨论】:

【参考方案1】:

有趣的是,必须授予用户在他连接的数据库中执行此系统功能的权限。虽然这是一个在每个数据库中都相同的系统功能,并且只在集群级别执行操作,但执行它的权利被单独保存在每个数据库中。

所以,如果你想让一个特殊的用户专门执行这个函数(当然还有 pg_stop_backup(boolean)),最好在 postgres 数据库中授予它,并只允许用户连接到这个数据库。

【讨论】:

以上是关于在 PostgreSQL 中授予对函数 pg_start_backup 的执行不起作用的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL 授予对表的访问权限

PostgreSQL - 在*所有模式*中授予对所有表(和未来表)的选择

授予对 PostgreSQL 中未来创建的模式的使用和特权

PostgreSQL 数据库常用操作

PostgreSQL:将所有权限授予 PostgreSQL 数据库上的用户

在 PostgreSQL 中撤销另一个用户授予的权限