SECURITY DEFINER - 功能创建者或所有者的特权?

Exa*_*Box 8 postgresql execute database-security postgresql-9.4

Postgres的官方文档表明,使用SECURITY DEFINER定义的函数以创建它的用户的权限运行.

然而,其他来源,例如此处此处,声称它是该功能所有者的特权.

哪个是对的?

(适用于9.4+)

kli*_*lin 10

通常(最初)创建者是所有者.但是,如果功能的所有者已更改,则security definer应用于新所有者.根据文件:

new_owner - 函数的新所有者.请注意,如果该功能标记为SECURITY DEFINER,它将随后作为新所有者执行.