【发布时间】:2021-04-04 20:52:12
【问题描述】:
我有一个由 Postgres 支持的网络应用程序。
- 每个 Web 应用请求只能读取/写入当前登录用户的数据。
- 每个包含用户数据的表都有一个
user_id列。
我偶尔会遇到忘记将user_id = ? 添加到SQL 请求的WHERE 子句的错误。为了以一般方式防止此问题,我正在研究 Postgres 行级安全性 (article):
- 为每个用户数据表设置策略:
CREATE POLICY table_policy ON table USING (user_id::TEXT = current_setting('app.user_id')) - 在 Web 应用程序中,当请求开始时,在请求的连接上设置当前登录的用户 ID:
SET app.user_id = ?。
这让我在编写SELECT 和UPDATE 请求时可以完全忽略user_id。
我剩下的问题是INSERTs。有没有办法避免在INSERTs 上提供user_id?
【问题讨论】:
标签: postgresql row-level-security