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