回答

收藏

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

技术问答 技术问答 284 人阅读 | 0 人回复 | 2023-09-14

我需要严格控制Postgres数据的读写。可更新的视图始终能够很好,严格地控制我的数据读取,并允许我添加有价值的计算列。在Postgres  n" v. U! x$ o) _& V; W
9.5中,行级安全性引入了一种新的强大的方法来控制我的数据。但是我不能同时使用两种技术视图和行级安全性。为什么?
8 X/ _6 e0 v- W6 h) P  o. a* {2 T               
$ W# M7 s8 F- g. Z$ M+ s( m( g解决方案:
1 E6 x! G+ V; w, O                ) O$ Z) N8 F! X0 P  e5 S
3 O" y' I9 O1 i0 {( I
$ A+ c% Y/ A. r8 ^: c
                基本上是因为不可能追溯更改视图的工作方式。我希望能够支持SECURITY INVOKER(或等效)视图,但是据我所知,目前尚不存在这样的功能。1 U- F; b5 r7 ]/ ?
您可以使用行安全性正常过滤对视图自身的访问。
4 V0 o2 [/ g3 e; ~$ Q该视图访问的表也将应用其行安全性规则。但是,他们将把current_user视为 视图创建者,
2 V$ q2 A/ t; e6 o因为视图使用创建/拥有该视图的用户的权限访问表(和其他视图)。  s: e4 {5 R  e$ c' e- t
如果您愿意介入并帮助开发所需的功能,或者如果不是pgsql-general,那么也许值得在pgsql-hackers上提出这个建议?* U% p, y8 {2 j  F, t: i3 G
也就是说,虽然以创建用户的身份查看访问表并进行相应的更改current_user,但它们不会阻止您session_user在行安全策略中使用自定义GUC% f! |9 U# _: j( O" y' ]
,或其他上下文信息。您可以将行安全性与视图一起使用,只是不能(有用地)基于进行过滤current_user。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则