我想开发一个特定的应用程序,可用于访问在 PostgreSQL 中开发的数据库。该应用程序执行计算并向数据库服务器请求所需的数据。
如果用户已注册,则可以从网站下载该应用程序。启动应用程序后,用户必须登录才能使用它。 现在的问题是: 在这个例子中最明智的解决方案是什么? 老实说,我不想为每个用户创建单独的角色。 我的想法是该应用程序仅通过一般角色访问数据库,例如使用名称“usership”。通过此角色,用户仅具有明确定义的读取访问权限。用户可能还应该能够在某些表中以用户名保存自己的设置或测量值。然后,只能使用正确的用户名和密码进行访问,这些用户名和密码是在相关表上的每个操作中指定的(但是,对于具有一般数据的其他表的只读访问而言,不需要这样做)。
问题是,有多少个应用程序可以通过相同的数据库凭据/用户名“usership”同时与数据库进行通信是否有任何限制。
我不想为每个客户创建单独的数据库角色。不知何故,这对我来说似乎不太正确,因为添加新员工或删除他们意味着对数据库模式的重大干预(创建/删除角色)。基本上,应用程序除了一个多个用户同时登录的网站之外什么也不应该做,唯一的区别是应用程序不在浏览器中运行,一切都可以在应用程序级别的客户端或在客户端上运行。数据库服务器。
最佳答案
我不知道 postgres 中共享用户名+密码有任何限制。您可以使用相同的用户名+密码拥有数百或数千个并发连接。
数百或数千个并发连接可能出现问题,具体取决于您的数据库硬件,尤其是内存。
虽然 Postgres 理论上支持数千个并发连接,但实际上,随着打开连接数的增加,我遇到了内存问题。如果这是一个问题,并且很大一部分连接在任何时刻都处于空闲状态,则可以添加一层连接池,例如 pgbouncer ,但请记住,这会添加另一个要监视的进程。
但是,一般来说,我不推荐这种方法。您将提供对共享数据库的直接、本质上匿名的访问。我预计在客户端中保护您的数据库凭据会很困难,并且通过直接访问,构建会破坏数据库服务器的 SQL 查询应该相当容易。这将很难监控或防止,因为所有用户都是相同的,并且您无法在滥用情况下撤销访问权限(无需更改每个有权访问权限的人的密码)。
从安全角度来看,我绝对建议能够识别您的用户,单独监控他们的使用情况并单独撤销访问权限。我不知道拥有数千个单独的 postgres 用户/凭据会带来任何性能问题。
-- 可扩展性--
使用具有只读副本和负载平衡的 postgres 集群(例如 https://aws.amazon.com/premiumsupport/knowledge-center/requests-rds-read-replicas/ ),如果需要,您应该能够相当轻松地水平扩展。
关于postgresql - 管理数以万计的桌面应用程序用户访问 PostgreSQL 数据库的最佳解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69021527/