在 PostgreSQL 中,我有一个带有自定义函数的数据库,该函数使用系统函数在数据库表中加载文件的二进制内容pg_read_binary_file。
如果我在具有超级用户权限的用户下运行此自定义函数,它将成功执行。但是当用户没有超级用户权限时,我收到错误:
permission denied for function pg_read_binary_file
Run Code Online (Sandbox Code Playgroud)
我认为我所需要的只是为此类用户GRANT授予该功能的权限EXECUTE,因此我执行了以下操作:
GRANT EXECUTE ON FUNCTION pg_read_binary_file(text,bigint,bigint,boolean) TO someuser;
GRANT EXECUTE ON FUNCTION pg_read_binary_file(text,bigint,bigint) TO someuser;
GRANT EXECUTE ON FUNCTION pg_read_binary_file(text) TO someuser;
Run Code Online (Sandbox Code Playgroud)
如果我检查权限
SELECT proacl FROM pg_proc WHERE proname='pg_read_binary_file';
Run Code Online (Sandbox Code Playgroud)
我得到:
{postgres=X/postgres,someuser=X/postgres}
{postgres=X/postgres,someuser=X/postgres}
{postgres=X/postgres,someuser=X/postgres}
Run Code Online (Sandbox Code Playgroud)
据我了解,现在someuser有权执行该函数pg_read_binary_file。但是当我尝试运行自定义函数时,我仍然收到相同的错误:
permission denied for function pg_read_binary_file
Run Code Online (Sandbox Code Playgroud)
那么问题是如何授予非超级用户执行该函数的权限pg_read_binary_file?也许还有一些必须授予的额外权限,但这并不明显。
在Portgres 系统功能的文档中pg_read_binary_file写道:
默认情况下仅限超级用户,但可以授予其他用户
EXECUTE运行该功能。
我搜索了一些有关如何授予此类权限的其他信息,但没有运气。