Postgresql
在 PostgreSQL 8.4 中執行觸發器函式需要哪些權限?
在 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
函式一章。在這個相關答案中找到一個程式碼範例。