Postgresql

無法在 plpython3u 中“創建函式”,權限被拒絕

  • March 22, 2013

作為 postgres 使用者,我create extension plpython3u;的數據庫中有

然後我將其設置plpython3u為trusted:select lanpltrusted from pg_language where lanname like 'plpython3u';返回true

但是當我的 db_user 嘗試

 create function check_data_valid(id bigint)
   returns boolean
   as $$
   -- ...
   return true
   $$ language plpython3u;

我得到了錯誤:permission denied for the language plpython3u

grant usage on plpython3u to db_user因此,對於我的 postgres 使用者,我已經嘗試過:grant execute on plpython3u to db_user但兩者都返回錯誤:

relation python doesn't exist

也許是因為它是一個擴展……但是,我不知道該怎麼做才能創建我的儲存過程。

首先不要讓 plpython3u 成為受信任的語言。這很糟糕。 您正在以可能被嚴重濫用的方式授予對數據庫、文件系統等各種事物的訪問權限。 請重新考慮。

現在,根據您的評論,您希望將管理員權限與普通使用者權限分開。這樣做的方法是確保超級使用者是 NOINHERIT 並且使用者被授予角色。你可以:

CREATE ROLE mydba WITH SUPERUSER NOINHERIT;

GRANT mydba TO myuser;

然後登錄,myuser您可以:

SET ROLE mydba;

並且您獲得超級使用者權限。然後,您可以使用它以類似於 *nix 系統上的 sudo 的方式臨時升級您的權限。

引用自:https://dba.stackexchange.com/questions/37336