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

Posted

技术标签:

【中文标题】如何在 Redshift 中撤销用户对 pg_catalog.pg_database 的访问【英文标题】:how to revoke pg_catalog.pg_database access from a user in Redshift 【发布时间】:2021-03-31 04:21:49 【问题描述】:

我们的用例涉及 redshift 集群中的多个数据库,但每个数据库中的用户应该看不到其他数据库名称。为此,我从公共撤销了以下访问权限并尝试了级联,但用户仍然能够访问 pg_catalog.pg_database。有没有办法撤销此访问权限?

create database newdb1;
REVOKE USAGE ON SCHEMA information_schema FROM PUBLIC;
REVOKE USAGE ON SCHEMA pg_catalog FROM PUBLIC; 
REVOKE SELECT ON TABLE pg_catalog.pg_database FROM PUBLIC; 
REVOKE USAGE ON SCHEMA information_schema FROM PUBLIC cascade;
REVOKE USAGE ON SCHEMA pg_catalog FROM PUBLIC cascade;
REVOKE SELECT ON TABLE pg_catalog.pg_database FROM PUBLIC cascade; 
create user new_user password 'xxxxxx';
grant USAGE ON SCHEMA public to new_user;
revoke select on table pg_catalog.pg_database from new_user CASCADE;

下面是这个新用户的 Aginity 连接屏幕,显示了所有数据库名称,尽管他不应该对这些名称有任何访问权限:

当我以 new_user 身份登录时,我也可以查看 pg_catalog.pg_database:

【问题讨论】:

【参考方案1】:

找到答案:)

我需要在集群中的每个数据库中运行以下 revoke 语句来解决这个问题。默认情况下,redshift 在其每个数据库中创建一个新版本的 pg_database,因此我们需要从所有数据库中撤销此权限。

REVOKE SELECT ON TABLE pg_catalog.pg_database FROM PUBLIC;

【讨论】:

以上是关于如何在 Redshift 中撤销用户对 pg_catalog.pg_database 的访问的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 LOOP 撤销访问权限 - redshift

无法从 Redshift 中删除用户

在 aws redshift 中删除用户

如何授予 Redshift 中所有模式的使用权限?

discord.js 如何使用代码撤销对被禁止用户的禁令?

目录表的特权不会被撤销