错误:语言c的权限被拒绝
使用非超级用户创建这样的函数时,我收到以下错误:
ERROR: permission denied for language c SQL state: 42501
创建的function是:
CREATE OR REPLACE FUNCTION dblink_connect (text) RETURNS text AS '$libdir/dblink','dblink_connect' LANGUAGE C STRICT;
但是,如果我想向非超级用户授予语言C的许可,我会收到以下错误: postgres=# grant usage on language c to caixa; ERROR: language "c" is not trusted
postgres=# grant usage on language c to caixa; ERROR: language "c" is not trusted
那意味着,非超级用户无法使用C语言创建function? 或者还有什么我做错了吗?
根据文件 ,这是对的:
只有超级用户才能以不受信任的语言创建function
快速检查:
SELECT lanpltrusted FROM pg_language WHERE lanname LIKE 'c'; lanpltrusted -------------- f (1 row)
如果你真的想要这个,那么你可以修改pg_language
系统目录( ALTER LANGUAGE
没有这样的选项):
UPDATE pg_language SET lanpltrusted = true WHERE lanname LIKE 'c';
而不是将语言设置为被认为是坏的和危险的可信任,您应该在操作存储过程期间使用角色临时向用户提供超级用户权限:
作为超级用户:
create role dba with superuser noinherit; grant dba to user;
然后以用户身份登录,您可以set role dba
然后,您可以在临时拥有角色dba
同时在C中创建存储过程。
reset role;
当你完成恢复正常的权利。
更多信息:https://dba.stackexchange.com/questions/37336/cannot-create-function-in-plpython3u-permission-denied