【发布时间】:2017-03-05 03:32:55
【问题描述】:
Postgres 的official docs 表明使用 SECURITY DEFINER 定义的函数以创建它的用户的权限运行。
但其他来源(例如 here 和 here)声称这是函数所有者的权限。
哪个是正确的?
(适用于 9.4+)
【问题讨论】:
-
创建函数的用户是所有者(除非您手动更改所有者)
-
@a_horse_with_no_name 但这就是重点……通常,当我创建一个新函数时,我以非常高的权限登录。我希望运行这些功能的用户拥有有限的(有时,仅限 SELECT)权限。
-
然后省略安全定义器(这就是
security definer的重点:让非特权用户访问特权事物) -
@a_horse_with_no_name 对,
security definer允许用户仅在执行函数时“借用”一些提升的权限。假设我有一个插入数据的函数,我希望受限用户能够执行该函数。我希望用户临时模拟只能选择和插入的函数“所有者”,而不是可以创建函数以及删除、截断、更新等的超级用户。
标签: postgresql execute postgresql-9.4 database-security