Postgresql

在 PostgreSQL 8.4 中執行觸發器函式需要哪些權限?

  • July 23, 2013

在 PostgreSQL 8.4 中執行觸發器函式需要哪些權限?

似乎為角色設置的權限與執行觸發器功能無關。我想我有一天看到執行觸發器函式所需的特權是 EXECUTE 特權,但對於表的所有者,而不是執行觸發呼叫觸發器函式的觸發器的操作的實際角色。

我找不到解釋這一點的文件部分,有什麼幫助嗎?

就特權而言,觸發器函式的行為與其他函式一樣。除了一個小例外:

要在表上創建觸發器,使用者必須具有該TRIGGER 表的權限。使用者還必須具有EXECUTE觸發功能的權限。

更新 在評論回饋後,我做了一些研究。Postgres Wiki 中有一個打開的 TODO 項:

加強觸發權限檢查

連結到Postgres 黑客的這個執行緒。目前,僅在觸發器創建EXECUTE時檢查觸發器函式的權限,而不是在執行時檢查。因此,撤銷觸發器函式上的 EXECUTE 對觸發器創建後沒有影響。你的觀察似乎是正確的。

這不會授予任何額外的權限來操作對象。如果呼叫角色缺乏執行(部分)函式體所需的權限,則會引發通常的異常。為了鋪平道路,您可以創建OWNER該功能的特權使用者並使用

SECURITY DEFINER

條款,如此處手冊中所述。它使函式以所有者而不是呼叫者的權限執行(預設)。

如果所有者是超級使用者,您需要格外小心您授予誰EXECUTE特權以及該功能可以做什麼以避免濫用。你可能想要

REVOKE ALL ON FUNCTION foo() FROM public;

開始並SET search_path用於該功能。

請務必閱讀安全編寫SECURITY DEFINER函式一章。

在這個相關答案中找到一個程式碼範例。

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