11 postgresql trigger stored-procedures permissions postgresql-8.4
在 PostgreSQL 8.4 中执行触发器函数需要什么权限?
似乎为角色设置的权限与执行触发器功能无关。我想我有一天看到执行触发器函数所需的特权是 EXECUTE 特权,但对于表的所有者,而不是执行触发调用触发器函数的触发器的操作的实际角色。
我找不到解释这一点的文档部分,有什么帮助吗?
Erw*_*ter 10
就特权而言,触发器函数的行为与其他函数一样。除了一个小例外:
要在表上创建触发器,用户必须具有
TRIGGER
该表的权限。用户还必须具有EXECUTE
触发功能的权限。
更新 在评论中反馈后,我做了一些研究。Postgres Wiki 中有一个开放的 TODO 项目:
加强触发器权限检查
链接到Postgres 黑客上的这个线程。目前,EXECUTE
触发器函数的权限只在触发器创建时检查,而不是在运行时检查。因此,在触发器函数上撤销 EXECUTE 对创建的触发器没有影响。你的观察似乎是正确的。
这不会授予任何额外的权限来操作对象。如果调用角色缺乏执行(部分)函数体所需的权限,则会引发通常的异常。为了铺平道路,您可以创建OWNER
该功能的特权用户并使用
SECURITY DEFINER
Run Code Online (Sandbox Code Playgroud)
条款,如此处的手册中所述。它导致函数以所有者的权限而不是调用者的权限运行(默认)。
如果所有者是超级用户,则需要格外小心授予谁EXECUTE
特权以及该功能可以做什么来避免滥用。你可能想要
REVOKE ALL ON FUNCTION foo() FROM public;
Run Code Online (Sandbox Code Playgroud)
开始并SET search_path
用于该功能。
请务必阅读安全编写SECURITY DEFINER
函数一章。
归档时间: |
|
查看次数: |
10504 次 |
最近记录: |