簡體   English   中英

錯誤:語言 c 的權限被拒絕

[英]ERROR: permission denied for language c

當使用非超級用戶創建這樣的 function 時,我收到以下錯誤:

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? 還是我做錯了什么?

沒錯,根據doc

只有超級用戶才能使用不受信任的語言創建函數

快速檢查:

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';

每個用戶@Otheus 下面:UPDATE 語句必須在 function 將駐留的數據庫中完成。

與其將語言設置為被認為是的和危險的,不如使用角色在用戶操作存儲過程期間臨時為用戶提供超級用戶權限:

作為超級用戶:

create role dba with superuser noinherit;
grant dba to user;

然后以用戶身份登錄,您可以set role dba

然后你可以在 C 中創建存儲過程,而你暫時擁有角色dba

reset role; 當您完成恢復正常權利時。

更多信息在這里:https://dba.stackexchange.com/questions/37336/cannot-create-function-in-plpython3u-permission-denied

在我的情況下,RDS postgres 12.5 中的 uuid 函數。 我所要做的就是:

CREATE EXTENSION IF NOT EXISTS "uuid-ossp';

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM