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