如何在 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 的访问的主要内容,如果未能解决你的问题,请参考以下文章