pg中创建函数时可以指定权限检测,有两个可选参数:SECURITY INVOKER和SECURITY DEFINER。
SECURITY INVOKER:表示要用调用该函数的用户的特权来执行它。这是默认值。
SECURITY DEFINER:指定要用拥有该函数的用户的特权来执行该函数。
比如我们使用普通用户创建了一个调用者权限的函数,那么当超级用户调用这个函数时,就会以超级用户的权限来执行,这就会导致很大的安全隐患。
例子:
我们现在数据库中有两个用户:超级用户postgres和普通用户bill