如何将对 PostgreSQL 模式的访问列入白名单?
How do I whitelist access to a PostgreSQL schema?
我在 PG 数据库中有一个特定的模式,其中包含一些非常敏感的数据。我想阻止除一个角色之外的每个角色访问它,但我无法从权限文档中弄清楚。
首先,我认为我只会授予 CONNECT
对那个特殊角色的访问权限,但随后所有其他角色都可以连接到架构。更糟糕的是,每个角色还可以 CREATE
、DROP
,并执行其他所有操作。
我错过了什么?
附带问题:及时,此架构将成为来自另一个 postgresql 实例的流式传输目的地。简而言之,我们有一个支持实时网站的主数据库服务器,我们需要它在另一台机器上的二级只读副本,以执行一些计算密集型查询。我们认为流媒体就是答案。这有意义吗?是否仍然可以保护对它的访问?
我们使用的是 9.5 版,以防相关。
您可以编辑文件 /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
。
in time, this database will be a streaming destination from another instance of 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];
我在 PG 数据库中有一个特定的模式,其中包含一些非常敏感的数据。我想阻止除一个角色之外的每个角色访问它,但我无法从权限文档中弄清楚。
首先,我认为我只会授予 CONNECT
对那个特殊角色的访问权限,但随后所有其他角色都可以连接到架构。更糟糕的是,每个角色还可以 CREATE
、DROP
,并执行其他所有操作。
我错过了什么?
附带问题:及时,此架构将成为来自另一个 postgresql 实例的流式传输目的地。简而言之,我们有一个支持实时网站的主数据库服务器,我们需要它在另一台机器上的二级只读副本,以执行一些计算密集型查询。我们认为流媒体就是答案。这有意义吗?是否仍然可以保护对它的访问?
我们使用的是 9.5 版,以防相关。
您可以编辑文件 /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
。
in time, this database will be a streaming destination from another instance of 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];