36

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

4

2 回答 2

32

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

您可以通常使用行安全过滤对视图本身的访问。

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

如果您愿意介入并帮助开发您需要的功能,或者 pgsql-general 否则可能值得在 pgsql-hackers 上提出这个问题?

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

于 2015-11-23T03:36:55.810 回答
6

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

WHERE my_security_policy_function(person_id)
于 2020-10-09T16:21:14.917 回答