Postgresql CREATE GRANT - 限制对服务器上其他数据库的访问?

Postgresql CREATE GRANT - Limit Access to other Databases on Server?

我有 2 个 Postgresql 数据库,分别是 abc 和 xyz。我想为每个网站创建一个用户,所以我创建了一个用户,命令如下:

CREATE ROLE abc LOGIN PASSWORD 'abc';

然后我这样做是为了授予他们访问数据库的权限:

GRANT ALL PRIVILEGES ON DATABASE abc TO abc;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO abc;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO abc;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL on TABLES TO abc;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL on SEQUENCES TO abc;

此时 abc 用户可以访问这些表,我相信任何未来创建的表。

我注意到 abc 用户可以看到 xyz 数据库存在并实际进入它并在 pgAdmin 中查看模式、表,甚至表的结构。

我想阻止这种情况并锁定 abc 用户,以便尽可能多地了解 abc 数据库。

我在这个配置中哪里出错了,锁定它的最佳方法是什么?

谢谢!

您必须禁止用户连接到其他数据库。

有两种可能:

  1. 通过数据库权限:

    -- by default, everybody can connect
    REVOKE CONNECT ON DATABASE other FROM PUBLIC;
    -- now you have to grant access to the legitimate users specifically
    GRANT CONNECT ON DATABASE other TO other_users;
    
  2. 通过 pg_hba.conf.

    不要向文件添加允许 abc 连接到 other 的条目。

    所以与其拥有

    host all all 0.0.0.0/0 scram-sha-256
    

    有像

    这样的条目
    host other +other_users 0.0.0.0/0 scram-sha-256
    host abc   abc          0.0.0.0/0 scram-sha-256