暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

[译文] PostgreSQL 15 - 添加对安全调用程序视图的支持

原创 通讯员 2022-03-28
437
PostgreSQL 15 添加对安全调用程序视图的支持。
 
安全调用者视图检查访问它的权限,使用用户的权限的基础基础关系,视图,而不是视图所有者的权限。此外,如果任何基本关系都是启用 RLS 的表,策略用视图的用户,而不是视图所有者的用户。
 
这允许定义视图而不放弃额外的对基础基础关系的特权,并匹配一个类似的其他数据库系统中可用的功能。
 
它还允许视图使用 RLS 更自然地操作,而无需影响对用户的策略分配。
 
Christoph Heiss,还有我的一些额外的黑客攻击。审核人
劳伦兹阿尔贝和沃尔夫冈瓦尔特。
 
讨论:https : //postgr.es/m/b66dd6d6-ad3e-c6f2-8b90-47be773da240 %40cybertec.at

这是很酷的事情。

当您拥有表时,您可以对它们拥有权限,允许某些用户访问,而有些则不允许。

现在,当您拥有函数时,通常以调用它们的用户身份运行这些函数。例如,如果我运行:

$ psql -U depesz
...
=$ select some_function();

然后 some_functions 将调用它的所有主体,包括所有查询,作为用户depesz。

但是,有时创建绕过安全检查的函数是有意义的(例如,因为它做了一些用户不应该“手动”做的事情)。这些被称为“安全定义器”函数,因为函数标记为这样,当被调用时,会以创建函数的用户的权限执行,而不是调用它的用户。

视图始终是“安全定义者”。其想法是,如果您创建视图,则可以微调视图的权限,但表的权限并不重要(那么多)。

现在,我们可以改变它。

让我们做一个测试:

$ psql -X -U depesz -c 'create user test'
CREATE ROLE
 
$ psql -X -U depesz -c 'create table source_data as select id from generate_series(1,10) id'
SELECT 10
 
$ psql -X -U depesz -c 'create view old_type_view as select * from source_data'
CREATE VIEW
 
$ psql -X -U depesz -c 'grant select on old_type_view to test'
GRANT
 
$ psql -X -U depesz -c 'create view new_type_view with (security_invoker = true ) as select * from source_data'
CREATE VIEW
 
$ psql -X -U depesz -c 'grant select on new_type_view to test'
GRANT

现在,通过用户测试:

$ psql -X -U test -d depesz -c "select * from old_type_view"
 id 
----
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
(10 rows)
 
$ psql -X -U test -d depesz -c "select * from new_type_view"
ERROR:  permission denied for table source_data

旧类型的视图,实际上是security_invoker = false允许选择,即使没有对基础表的特权,但是新的,security_invoker = true将失败。

文章来源:https://www.depesz.com/2022/03/22/waiting-for-postgresql-15-add-support-for-security-invoker-views/

最后修改时间:2022-05-24 12:09:23
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论