对某些用户隐藏 redshift 集群中的特定数据库

Posted

技术标签:

【中文标题】对某些用户隐藏 redshift 集群中的特定数据库【英文标题】:Hide particular database in redshift cluster from certain users 【发布时间】:2017-09-21 06:11:53 【问题描述】:

在 redshift 集群中有多个数据库,有没有办法让一组用户只能查看集群中的特定数据库,而所有其他数据库对他来说都是隐藏的。 目前所有用户都可以查看集群中的数据库。

【问题讨论】:

请看下面的***帖子:https://***.com/questions/21551200/hide-databases-in-amazon-redshift-cluster-from-certain-users 这会撤销所有数据库的访问权限,我的要求是让用户只能访问一个数据库,当他登录时,用户应该只有他的数据库才能看到他有权访问,而不管有多少数据库出现在集群上。因此,他应该只能查看一个 DB。 数据库是否在单独的架构中(或者您可以将其放在单独的架构中)?如果是这样,您可以使用Schema path 来限制他们可以看到的内容。 @JohnRotenstein 对于一个 Redshift 6 节点集群,我们在每个数据库下都有示例 5 数据库 (1,2,3,4,5),我们有单独的多个模式。例如:DB 1 有模式(A,B,C),DB 2 有模式(D,E,F)。为了隔离事物,我们想创建 USER,这样,如果他被授予对 DB1 的访问权限,当他通过工具(例如 Agintiy)登录到该集群时,他应该只能查看 DB 1。因此实际上对于这个用户,其他 4 个数据库不应该存在于这个集群上,因为他只查看数据库 1。目前,每个用户都能够查看集群上存在的所有数据库。我们如何创建这样的用户。 【参考方案1】:

我怀疑这是不可能的。

privileges that can be granted in PostgreSQL 8(Redshift 的基础)是:

GRANT   SELECT | INSERT | UPDATE | DELETE | RULE | REFERENCES | TRIGGER 
    [,...] | ALL [ PRIVILEGES ] 
    ON [ TABLE ] tablename [, ...]
    TO  username | GROUP groupname | PUBLIC  [, ...] [ WITH GRANT OPTION ]

GRANT   CREATE | TEMPORARY | TEMP  [,...] | ALL [ PRIVILEGES ] 
    ON DATABASE dbname [, ...]
    TO  username | GROUP groupname | PUBLIC  [, ...] [ WITH GRANT OPTION ]

GRANT  EXECUTE | ALL [ PRIVILEGES ] 
    ON FUNCTION funcname ([type, ...]) [, ...]
    TO  username | GROUP groupname | PUBLIC  [, ...] [ WITH GRANT OPTION ]

GRANT  USAGE | ALL [ PRIVILEGES ] 
    ON LANGUAGE langname [, ...]
    TO  username | GROUP groupname | PUBLIC  [, ...] [ WITH GRANT OPTION ]

GRANT   CREATE | USAGE  [,...] | ALL [ PRIVILEGES ] 
    ON SCHEMA schemaname [, ...]
    TO  username | GROUP groupname | PUBLIC  [, ...] [ WITH GRANT OPTION ]

GRANT  CREATE | ALL [ PRIVILEGES ] 
    ON TABLESPACE tablespacename [, ...]
    TO  username | GROUP groupname | PUBLIC  [, ...] [ WITH GRANT OPTION ]

在表级别,无法控制可见性。

最接近的是 schema 级别,可以授予他们是否可以使用架构的权限。

【讨论】:

同意,同上。但是,当出于专业目的使用集群时,没有人愿意将同一集群上的其他客户端数据库暴露给共享同一集群的其他客户端。因此,这是一个通用用例,在工作空间中,组织希望在数据库级别的可见性上也与某些用户隔离。这样做有什么解决方法吗,不胜感激。谢谢【参考方案2】:

这是不可能的。您最多可以撤销(或不授予)对架构的使用/对您要隐藏的表的访问权限。

用户仍然可以查看列表中的架构/表及其所有属性(主键、列等),但无法查看任何数据,这足以满足预期的数据保护。

【讨论】:

以上是关于对某些用户隐藏 redshift 集群中的特定数据库的主要内容,如果未能解决你的问题,请参考以下文章

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

如何在 Redshift 中撤销用户对 pg_catalog.pg_database 的访问

仅在某些条件下使用 Redshift 中的 SQL 对具有相同名称的行进行分组

如何在redshift中查找为特定模式执行的删除命令

从 db 中检索 Redshift 集群指标

如何在特定时间自动创建 Redshift 快照并从快照恢复集群?