【问题标题】:Postgresql CREATE GRANT - Limit Access to other Databases on Server?Postgresql CREATE GRANT - 限制对服务器上其他数据库的访问?
【发布时间】:2021-02-05 21:35:55
【问题描述】:

我有 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 数据库。

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

谢谢!

【问题讨论】:

    标签: postgresql roles privileges grant


    【解决方案1】:

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

    有两种可能:

    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
      

    【讨论】:

    • 谢谢,REVOKE/GRANT 非常有意义并且运行良好。我没有想过 pg_hba.conf 作为解决方案,但我也喜欢这个想法。
    猜你喜欢
    • 1970-01-01
    • 2020-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-13
    相关资源
    最近更新 更多