Postgresql

Postgresql 在沒有超級使用者的情況下啟用擴展

  • June 5, 2017

我有一個 PostgreSQL 9.5 伺服器,上面有自動為使用者創建角色和數據庫的腳本。在這些數據庫中,啟用特定擴展(例如 pgcrypto)會很有幫助,但據我了解,必須是超級使用者才能執行CREATE EXTENSION. 有沒有辦法在不使用超級使用者帳戶手動登錄的情況下啟用此類擴展?

從有關擴展的文件中,

superuser (boolean)如果此參數為 true(這是預設值),則只有超級使用者可以創建擴展或將其更新到新版本。如果設置為 false,則只需要執行安裝或更新腳本中的命令所需的權限。

該值未在 中設置pgcrypto.control,因此預設為 true,這需要超級使用者。

這意味著您不能CREATE EXTENSION僅僅作為數據庫的所有者,儘管CREATE EXTENSION上的文件讓您相信。

我努力將其設置為false,但沒有任何樂趣。C 是一種不受信任的語言,你會得到

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

來自pg_language 上的文件

只有超級使用者才能使用不受信任的語言創建函式。

…當然,您可以作為超級使用者c信任。UPDATE pg_language set lanpltrusted = true where lanname = 'c';然後CREATE EXTENSION pgcrypto將作為非超級使用者正常工作。但是,如果您不得不擔心您的使用者將源上傳到您的擴展目錄然後將其安裝到數據庫中,這聽起來是個壞主意。也就是說,我不會走那麼遠。我會想辦法給這隻貓剝皮。

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