【发布时间】:2019-12-31 06:04:08
【问题描述】:
在 PostgreSQL 中,我有一个带有自定义函数的数据库,它使用系统函数 pg_read_binary_file 在数据库表中加载文件的二进制内容。
如果我在具有超级用户权限的用户下运行此自定义功能,它会成功执行。但是当用户没有超级用户权限时,我收到一个错误:
permission denied for function pg_read_binary_file
我认为我需要的只是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;
如果我检查权限
SELECT proacl FROM pg_proc WHERE proname='pg_read_binary_file';
我明白了:
{postgres=X/postgres,someuser=X/postgres}
{postgres=X/postgres,someuser=X/postgres}
{postgres=X/postgres,someuser=X/postgres}
据我了解,现在someuser 有权执行函数pg_read_binary_file。但是当我尝试运行我的自定义函数时,我仍然收到同样的错误:
permission denied for function pg_read_binary_file
那么问题是如何授予非超级用户执行pg_read_binary_file函数的权限?也许有一些额外的权限必须被授予,但这并不明显。
在pg_read_binary_file 的documentation on Portgres system functions 中写道:
默认限制为超级用户,但可以授予其他用户
EXECUTE运行该功能。
我搜索了一些有关如何授予此类权限的其他信息,但没有运气。
【问题讨论】:
标签: postgresql security privileges