用于管理访问 PostgreSQL 数据库的桌面应用程序的数万用户的最佳解决方案

Optimal solution for managing tens of thousands users of a desktop app accessing a PostgreSQL database

我想开发一个特定的应用程序,可用于访问在 PostgreSQL 中开发的数据库。该应用程序执行计算并从数据库服务器请求所需的数据。

如果用户已经注册,则可以从网站下载该应用程序。启动应用程序后,用户必须登录才能使用它。 现在的问题是: 这个例子中最明智的解决方案是什么? 老实说,我不想为每个用户创建一个单独的角色。 我的想法是该应用程序仅通过一般角色访问数据库,例如名称为“usership”。使用此角色,用户仅具有明确定义的读取权限。有可能用户也应该能够在某些表格中以他们的用户名保存他们自己的设置或测量值。然后只有使用正确的用户名和密码才能访问,这些用户名和密码是在相关表上的每个操作中指定的(但是,对于具有一般数据的其他表的只读访问则不需要这种努力)。

问题是有多少应用程序可以通过相同的数据库连接/用户名“usership”同时与数据库通信是否有任何限制。

我不想为每个客户创建单独的数据库角色。不知何故,这对我来说似乎不对,只是因为添加新员工或删除他们意味着对数据库模式(创建/删除角色)进行重大干预。基本上,该应用程序应该只做一个多个用户同时登录的网站,唯一的区别是该应用程序不会在浏览器中 运行 并且一切都在应用程序的客户端运行级别或在数据库服务器上。

我不知道在 postgres 中共享用户名和密码有任何限制。您可以使用相同的用户名 + 密码进行成百上千个并发连接。

根据您的数据库硬件,尤其是 ram,可能 存在成百上千个并发连接的问题。

虽然 Postgres 理论上支持数千个并发连接,但实际上我 运行 随着打开连接数的增加而出现内存问题。如果这是一个问题,并且您的大部分连接在任何时候都处于空闲状态,您可以添加一层连接池,如 pgbouncer,但请记住,这会添加另一个要监视的进程。

不过,一般来说,我不推荐这种方法。您将提供对共享数据库的直接、本质上匿名的访问。我预计在客户端中保护您的数据库凭据将很困难,并且通过直接访问,构建 SQL 查询将关闭您的数据库服务器应该相当容易。这将很难监控或防止,因为所有用户都是相同的,并且您无法在滥用情况下撤销访问权限(无需更改有权访问的每个人的密码)。

从安全的角度来看,我绝对建议能够识别您的用户,分别监控他们的使用情况并分别撤销访问权限。我不知道有成千上万个单独的 postgres users/credentials.

有任何性能问题

-- 可扩展性--

使用带有只读副本和负载平衡的 postgres 集群(例如 https://aws.amazon.com/premiumsupport/knowledge-center/requests-rds-read-replicas/),如果需要的话,您应该能够很容易地水平扩展它。