为什么没有为Postgres视图启用行级安全性?

时间:2015-11-22 17:48:10

标签: sql postgresql views row-level-security postgresql-9.5

我需要严格控制Postgres数据的读写。可更新视图始终提供非常好,严格的数据读取控制,并允许我添加有价值的计算列。使用Postgres 9.5行级安全性引入了一种新的强大的方法来控制我的数据。但我不能同时使用两种技术视图和行级安全性。为什么呢?

2 个答案:

答案 0 :(得分:16)

基本上是因为不可能追溯性地改变视图的工作方式。我希望能够支持SECURITY INVOKER(或等效的)视图,但据我所知,目前还没有这样的功能。

您可以正常过滤对视图的访问权限。

视图访问的表格也将应用行安全规则。但是,他们会将current_user视为视图创建者,因为视图使用创建/拥有视图的用户的权限访问表(和其他视图)。

如果你愿意介入并帮助开发你需要的功能,或者pgsql-general,那么pgsql-hackers是否值得提出这个问题呢?

也就是说,虽然视图将表作为创建用户访问并相应地更改current_user,但它们并不会阻止您在行安全策略中使用自定义GUC,session_user或其他上下文信息。您可以将行安全性与视图一起使用,而不是(有用)基于current_user进行过滤。

答案 1 :(得分:2)

行级安全策略仍可以在视图的WHERE子句中应用。例如:

WHERE my_security_policy_function(person_id)