如何在单个集群环境中将 Redshift 用户/组限制为多个数据库中的单个数据库

Posted

技术标签:

【中文标题】如何在单个集群环境中将 Redshift 用户/组限制为多个数据库中的单个数据库【英文标题】:How to restrict Redshift user/group to a single database in multiple databases in a single cluster environment 【发布时间】:2017-10-19 23:25:55 【问题描述】:

我们。

例如用户 test1_usertest1_group1 中创建一个名为 test1_DB 的数据库,后来我们创建了另一个数据库 test2_DB,当我们在 test2_DB 中查询 pg_grouppg_user 表时,我们可以看到 test1_usertest1_group

【问题讨论】:

【参考方案1】:

在 Redshift 集群中访问数据库和数据库对象(表和视图)的能力由用户/组帐户控制。正如您所提到的,您正在尝试控制数据库访问,您需要查看您的用户帐户权限。您可以使用 create user/group 和 grant/revoke 语句来管理和创建这些。

最简单的方法可能是使用您的超级用户帐户执行撤销语句并撤销对 test2_DB 的 test1_user/group 的访问权限。 例如

revoke all on all tables in test2_db from test1_group1

要检查的可能是创建数据库对象的人。默认情况下,创建数据库对象的人就是所有者。因此,如果您的 test1_group1 创建了新数据库,您应该返回并使用您的超级用户帐户创建它。

【讨论】:

那很好,我知道 test2_db 中的表和模式,并且我不授予 test1_db 中这些表的任何内容,所以我唯一关心的是为什么允许我查看访问详细信息(pg_user 和 pg_group) test2_db中的test1_db组和用户。可能是因为跨多个数据库的系统表共同共享。数据库中的任何超级用户(不是root)都可以看到集群中所有数据库的所有访问控制细节。 @Tech Support 我现在更好地理解了你的问题,所以你说你已经控制了对实际表的访问但想要控制对系统表的访问。不幸的是,我的理解是,由于 Redshift 是一个 Postgres 数据库,所有用户都可以完全访问公共模式。因此,即使用户没有查看表的权限,他们仍然可以从元数据表中收集信息。我相信除了我的回答中所述的方法之外,您无法进一步锁定它。

以上是关于如何在单个集群环境中将 Redshift 用户/组限制为多个数据库中的单个数据库的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 ruby​​ 将单个记录写入 Redshift 数据库?

在 Redshift 中将多行转换为列

Redshift WLM:“最终队列可能不包含用户组或查询组”

使用 terraform/terragrunt 创建多个共享相同子网组和安全组的 redshift 集群

如何在单个 Postgres 服务器中将 Embedded Debezium 用于多个数据库?

Redshift集群,如何获取片数信息