【问题标题】:How do I whitelist access to a PostgreSQL schema?如何将对 PostgreSQL 架构的访问列入白名单?
【发布时间】:2017-03-14 17:09:24
【问题描述】:

我在 PG 数据库中有一个特定的模式,其中包含一些非常敏感的数据。我想阻止除一个之外的每个角色访问它,但我无法从有关权限的文档中弄清楚。

一开始,我想我只会让CONNECT 访问那个特殊角色,但随后所有其他角色都可以连接到架构。更糟糕的是,每个角色还可以CREATEDROP,做其他所有事情。

我错过了什么?

附带问题:随着时间的推移,此架构将成为另一个 postgresql 实例的流式传输目的地。简而言之,我们有一个支持实时网站的主数据库服务器,我们需要在另一台机器上对其进行辅助的只读副本,以执行一些计算密集型查询。我们认为流媒体是答案。这有意义吗?是否仍然可以保护对它的访问?

我们使用的是 9.5 版,以防万一。

【问题讨论】:

  • 连接数据库的权限默认授予角色public你需要撤销:revoke connect from public然后你可以通过grants来控制允许哪个用户连接。

标签: postgresql access-control whitelist


【解决方案1】:

你可以编辑文件/etc/postgresql/9.5/main/pg_hba.conf并把这个内容:

# Database administrative login by Unix domain socket
local   all             postgres                                peer
# TYPE  DATABASE        USER            ADDRESS                 METHOD
# IPv4 local connections:
host    all             YOUR_USER       [USER_IP]/32            md5

它将允许此特定用户使用此特定 LAN/WAN IP 的密码进行连接。

仅允许此用户和postgres

这个数据库最终将成为另一个 postgresql 实例的流式传输目的地。

当此数据库成为复制主数据库时,您可以将以下内容添加到同一文件中:

# Allow replication connections from localhost, by a user with the
# replication privilege.
host    replication     REPL_USER        [REPL_HOST]/32            md5

有关如何在此处设置复制的更多信息:https://www.gab.lc/articles/replication_postgresql

更改后您需要重新加载 PostgreSQL:

service postgresql reload

您可以删除不想允许的角色。

更新:

如果您希望通过查询撤销权限,您可以运行:

-- Grant privileges to whitelisted user:
GRANT ALL PRIVILEGES ON [database name] TO [good_user];

-- Revoke privileges for other users:
REVOKE ALL PRIVILEGES ON [database name] FROM [bad_user];

【讨论】:

  • 嗯,我想我应该说架构而不是数据库,抱歉。 (我编辑了问题)
  • 我更新了我的答案,向您展示如何通过查询撤销权限
  • 再次更新以显示如何将允许的用户列入白名单
  • 谢谢@Gab。这是否意味着当我创建新的bad_user 时,我基本上必须手动将每个bad_user 列入黑名单?
  • 您必须为每个用户手动设置权限。如果您希望user_a 拥有新权限,而user_b 拥有撤销权限,则必须手动完成
猜你喜欢
  • 1970-01-01
  • 2019-02-12
  • 2020-11-25
  • 2021-08-08
  • 2020-06-17
  • 1970-01-01
  • 2020-03-30
  • 2018-12-24
  • 2021-03-12
相关资源
最近更新 更多