Cal*_*mer 18 sql postgresql views row-level-security postgresql-9.5
我需要严格控制Postgres数据的读写.可更新视图始终提供非常好,严格的数据读取控制,并允许我添加有价值的计算列.使用Postgres 9.5行级安全性引入了一种新的强大的方法来控制我的数据.但我不能同时使用两种技术视图和行级安全性.为什么?
Lau*_*lbe 23
您可以从 PostgreSQL v15 开始执行此操作,它引入了security_invoker视图选项。如果您打开该功能,则会以调用视图的用户身份检查基础表的权限,并使用调用用户的 RLS 策略。
您可以使用以下命令更改现有视图
ALTER VIEW view_name SET (security_invoker = on);
Run Code Online (Sandbox Code Playgroud)
Cra*_*ger 20
基本上是因为不可能追溯性地改变视图的工作方式.我希望能够支持SECURITY INVOKER(或等效)视图,但据我所知,目前还没有这样的功能.
您可以正常使用行安全性过滤对视图的访问.
视图访问的表也将应用其行安全规则.但是,他们会将视图创建者current_user视为视图创建者,因为视图使用创建/拥有视图的用户的权限访问表(和其他视图).
如果你愿意介入并帮助开发你需要的功能,或者pgsql-general,也许值得在pgsql-hackers上提高这一点?
也就是说,虽然视图将表作为创建用户进行访问并相应地进行更改current_user,但它们并不会阻止您session_user在行安全策略中使用自定义GUC ,或其他上下文信息.您可以将行安全性与视图一起使用,而不是(有用)基于此进行过滤current_user.
小智 9
行级安全策略仍然可以应用在WHERE视图的子句中。例如:
WHERE my_security_policy_function(person_id)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2557 次 |
| 最近记录: |