在PostgreSQL中,我有一个带有自定义函数的数据库,该函数使用系统函数
如果我在具有超级用户权限的用户下运行此自定义函数,则可以成功执行。但是当用户没有超级用户权限时,我会收到一个错误:
如果我通过检查权限
我得到:
据我所知,现在
所以问题是如何授予非超级用户执行函数
pg_read_binary_file
将文件的二进制内容加载到数据库表中。如果我在具有超级用户权限的用户下运行此自定义函数,则可以成功执行。但是当用户没有超级用户权限时,我会收到一个错误:
permission denied for function pg_read_binary_file
我认为我所需要做的就是简单地为这个用户授予执行该函数的权限,因此我执行了以下操作:
GRANT
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
的权限?可能需要授予一些附加权限,但这并不明显。在Portgres系统函数文档中的pg_read_binary_file
中写道:默认情况下仅限超级用户,但可以授予其他用户EXECUTE
以运行该函数。我搜索了一些关于如何授予此类权限的附加信息,但没有成功。
GRANT EXECUTE ON FUNCTION pg_read_binary_file(text) TO someuser;
不是在postgres数据库上,而是在工作的数据库上执行。再次感谢您。 - user2248760