postgresql - 如何将 PostgreSQL 模式的访问列入白名单?

标签 postgresql access-control whitelist

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

首先,我认为我只会授予该特殊角色的 CONNECT 访问权限,但随后所有其他角色都可以连接到该架构。更糟糕的是,每个角色还可以CREATEDROP以及执行其他所有操作。

我错过了什么?

附带问题:随着时间的推移,这个模式将成为来自另一个 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];

关于postgresql - 如何将 PostgreSQL 模式的访问列入白名单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42792341/

相关文章:

redirect - 使用 mod_rewrite 只允许某些 IP 地址访问站点?

node.js - 如何使用 node.js 在 AWS RDS PostgreSQL 上实现回调

css - 当引用 https 服务器上的 css 文件时,Angular 获取 CORS No Access-Control-Allow Origin

java - 为什么 Tomcat 会报 403 错误?

IIS 动态 IP 限制白名单

azure - Azure DevOps 白名单的 IP 列表

sql - 如何处理postgresql日期字段中的空值

sql - Postgres 中两个日期之间的周数

sql - 计算列组合的出现次数

ruby-on-rails - Access-Control-Allow-Origin 不适用于 Backbone json 请求,Nginx 设置 "wide-open", header 看起来不错