如何将访问PostgreSQL架构的白名单?

时间:2017-03-14 17:09:25

标签: postgresql access-control whitelist

我在PG数据库中有一个包含一些非常敏感数据的模式。我希望阻止除了一个角色之外的每个角色都能访问它,但我无法从权限文档中找到它。

首先,我认为我只允许CONNECT访问该特殊角色,但随后每个其他角色都可以连接到架构。更糟糕的是,每个角色也可以CREATEDROP,并执行其他所有操作。

我错过了什么?

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

我们正在使用版本9.5,以防这是相关的。

1 个答案:

答案 0 :(得分:0)

您可以编辑文件/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];