1

我目前正在尝试在 AWS RDS 上运行的 PostgreSQL 数据库上配置 RLS。出于某种原因,我无法让它在 AWS 的 Postgres DB 上工作,但在本地它可以工作,而且一切似乎都是相同的。

这是我的设置:

PostgreSQL 版本:10.6

脚步:

SELECT * FROM pg_user;
|usename|usesysid|usecreatedb|usesuper|userepl|usebypassrls|passwd|valuntil|
|rdsadmin|10 |t| t|t| t| ******** | infinity|
|app_user|16393|t|f|f|f|********|infinity|

SELECT current_user;
> current_user
> ---------------
> app_user

CREATE TABLE rls_test (id int, name varchar(255));
INSERT INTO rls_test (1, 'test');
SELECT * FROM rls_test;
>  id | name
> ----+------
>  1  | test

SELECT * FROM pg_tables where tablename='rls_test';
>  schemaname | tablename | tableowner | tablespace | hasindexes | hasrules | hastriggers | rowsecurity
> ------------+-----------+------------+------------+------------+----------+-------------+-------------
>  public     | rls_test  | app_user   |            | f          | f        | f           | f

ALTER TABLE rls_test ENABLE ROW LEVEL SECURITY;
ALTER TABLE rls_test FORCE ROW LEVEL SECURITY;

SELECT * FROM pg_tables where tablename='rls_test';
>  schemaname | tablename | tableowner | tablespace | hasindexes | hasrules | hastriggers | rowsecurity
> ------------+-----------+------------+------------+------------+----------+-------------+-------------
>  public     | rls_test  | app_user   |            | f          | f        | f           | t

SELECT * FROM rls_test;
>  id | name
> ----+------
>  1  | test

本地运行的 Postgres DB 上的相同步骤确实有效。在新表上启用并强制 RLS 后,用户不再看到表中的条目。只有在 AWS RDS 上运行的 Postgres 上它不起作用。

有什么我可能在这里遗漏的想法吗?

4

3 回答 3

1

因此,与此同时,我发现 AWS 创建了一个“主”用户,我实际上在这里使用了该用户 (app_user)。可以在此处找到授予该用户的权限:https ://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.MasterAccounts.html 创建具有数据库所需所有权限的新用户解决了该问题。不过,我仍然有点困惑,哪些特权阻止了这个主用户绕过行级安全性,因为用户表显示我的 app_user 不是超级用户。如果有人仍然对此有答案,我将不胜感激:-)。

于 2020-04-09T15:32:52.720 回答
0

另一个原因,是用户(模式所有者)将始终能够看到所有数据。即 RLS 不适用于架构所有者,除非您添加

alter table xxxxx force 启用行级安全性。

这可能是您尝试从架构所有者那里查询的另一个原因。

于 2021-09-03T22:03:10.830 回答
0

AWS postgres 中的主用户默认启用 BYPASSRLS 选项。这将使任何和所有 RLS 策略都被绕过。

于 2021-09-03T02:14:28.760 回答