在 Postgres 中授予用户执行函数的权限

在 Postgres 中授予用户执行函数的权限

在文档中https://www.postgresql.org/docs/9.1/sql-grant.htmlGRANT 命令有一个语法。

GRANT { EXECUTE | ALL [ PRIVILEGES ] }
    ON { FUNCTION function_name ( [ [ argmode ] [ arg_name ] arg_type [, ...] ] ) [, ...]
         | ALL FUNCTIONS IN SCHEMA schema_name [, ...] }
    TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]

我尝试使用此语法为某些函数添加执行权限,但没有成功:

db=# GRANT EXECUTE ON FUNCTION some_function TO some_user;
ERROR:  syntax error at or near "TO"
LINE 1: GRANT EXECUTE ON FUNCTION some_function TO some_user...

为什么记录和现实如此吻合?我做错了什么?

答案1

后面括号里缺少“参数数据类型” function_name。函数名和参数数据类型我们可以通过\df命令来检查。

 Schema |        Name        | Result data type          |Argument data types |  Type  
--------+--------------------+---------------------------+--------------------+--------
 public | some_function      | TABLE(some_results,....)  | numeric            | normal

命令应该是:

GRANT EXECUTE ON FUNCTION some_function(numeric) TO some_user;

但是语法中有方括号内的参数,所以它们应该不是必需的。但是尝试

GRANT EXECUTE ON FUNCTION some_function() TO some_user;

给出function some_function() does not exist错误。因此 GRANT 命令的语法应为:

GRANT { EXECUTE | ALL [ PRIVILEGES ] }
    ON { FUNCTION function_name ( argmode arg_name arg_type [, ...] ] ) [, ...]
         | ALL FUNCTIONS IN SCHEMA schema_name [, ...] }
    TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]

答案2

请尝试一下。以下示例是我如何向 efm 用户授予 pg_current_wal_lsn() 系统函数的执行权限。

postgres=# 授予 efm 在函数 pg_current_wal_lsn() 上执行的权限;

授予

如何查看此功能授予的访问权限?

postgres=# \x

扩展显示已打开。

postgres=#

postgres =#\ df + pg_current_wal_lsn();

函数列表 -[记录 1]-------+----------------------------- 模式 | pg_catalog 名称 | pg_current_wal_lsn 结果数据类型 | pg_lsn 参数数据类型 | 类型 | func 挥发性 | 挥发性 并行 | 安全 所有者 | kali 安全性 | 调用者 访问权限 | =X/kali + | kali=X/kali + | efm=X/kali 语言 | 内部 源代码 | pg_current_wal_lsn 描述 | 当前 wal 写入位置

相关内容