【问题标题】:SECURITY DEFINER - privileges of the function's creator, or owner?SECURITY DEFINER - 函数创建者或所有者的权限?
【发布时间】:2017-03-05 03:32:55
【问题描述】:

Postgres 的official docs 表明使用 SECURITY DEFINER 定义的函数以创建它的用户的权限运行。

但其他来源(例如 herehere)声称这是函数所有者的权限。

哪个是正确的?

(适用于 9.4+)

【问题讨论】:

  • 创建函数的用户是所有者(除非您手动更改所有者)
  • @a_horse_with_no_name 但这就是重点……通常,当我创建一个新函数时,我以非常高的权限登录。我希望运行这些功能的用户拥有有限的(有时,仅限 SELECT)权限。
  • 然后省略安全定义器(这就是security definer 的重点:让非特权用户访问特权事物)
  • @a_horse_with_no_name 对,security definer 允许用户仅在执行函数时“借用”一些提升的权限。假设我有一个插入数据的函数,我希望受限用户能够执行该函数。我希望用户临时模拟只能选择和插入的函数“所有者”,而不是可以创建函数以及删除、截断、更新等的超级用户。

标签: postgresql execute postgresql-9.4 database-security


【解决方案1】:

通常(最初)创建者是所有者。但是,如果函数的所有者已更改,security definer 将应用于新所有者。每the documentation

new_owner - 函数的新所有者。请注意,如果该函数被标记为 SECURITY DEFINER,它将随后以新所有者的身份执行。

【讨论】:

    猜你喜欢
    • 2010-11-23
    • 1970-01-01
    • 2018-09-30
    • 2014-04-15
    • 2019-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-14
    相关资源
    最近更新 更多