我有兴趣禁止 pgAdmin 从服务器以外的任何站点访问我的 PostgreSQL 服务器。可以使用 pg_hba.conf 做到这一点吗? PostgreSQL 服务器应该仍然允许从其他站访问我的应用程序的服务器。
最佳答案
不,这是不可能的。这也不明智,因为客户端(访问模式)不是问题,而是您在连接上执行的操作。
如果用户设法通过 SQL 注入(inject)或其他方式诱使您的应用运行任意 SQL,您将回到相同的位置。
相反,将您的应用程序设置为使用受限用户角色:
- 不是 super 用户
- 不拥有它使用的表
- 只有它需要的最低权限
GRANT
最好还添加诸如触发器之类的保护措施,以保持数据库中的数据一致性。如果有人从应用程序中提取数据库凭据并直接通过 SQL 客户端使用它们,这将有助于减轻可能造成的损害。
您还可以让拥有您应用程序二进制文件等的人更难提取凭据并使用它们直接连接到 postgres,方法是:
- 使用
md5
认证 - 如果您使用在所有用户之间共享的单一数据库角色,要么 (a) 不要这样做,要么 (b) 在配置中不明显的地方存储一份混淆良好的数据库密码副本,最好针对用户的本地凭据
- 使用
sslmode=verify-full
和服务器证书 - 在您的应用程序中嵌入客户端证书并要求提供该证书以便服务器允许连接(参见 client certificates
不过,实际上,如果您不能相信您的使用不是主动恶意的并运行 DELETE FROM customer;
等...您将需要中间件来保护 SQL 连接并进一步应用限制。速率限制访问、禁止批量更新等。
关于postgresql - pgAdmin 对 PostgreSQL 的访问控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44278110/