我有一个远程数据库(运行Postgres)并且想要设置一个用户方案。
注册使用该软件的每个设施最初都会收到管理员的登录凭据,然后管理员将为其设施创建用户。每个用户都对软件的某些区域具有某些访问权限(例如,某些菜单不适用于较低级别的用户)。
此外,每个设施将被许可与数据库同时连接数量有限(在我看来,这意味着每个设施将收到一个具有最大连接数的Postgres用户名/密码)。
我可以看到几个选项,没有一个是最佳选择。
每个用户都必须使用四个字段登录 - 设施的用户名/密码和用户的用户名/密码。 (似乎有四个登录字段过多)
每个用户都将使用用户名/密码登录,并使用硬件编码到程序中的设施的用户名/密码(导致每个设施必须拥有不同版本软件的头痛,但添加了安全性,他们无法使用他们的程序访问其他设施的数据。
将数据写入计算机上的某个文件,该文件包含在启动时读取的一部分登录信息(需要加密,我猜)(即使加密也似乎有些不安全)。 / p>
这通常是如何构建的?
答案 0 :(得分:1)
到目前为止,您最好的选择是避免对客户端数量设置严格限制。允许一些弹性,并针对pg_stat_activity
定期报告查询,以查看是否有人一直超出其限制。如果是的话,通过非技术手段处理它。您可以使用pg_has_role
等按公司角色对登录用户进行分组,以监控每家公司的连接限制。
这样,您的客户端不必在机器崩溃时发生混乱,并且在重用连接之前必须等待很长时间才能进行TCP / IP超时。等
PostgreSQL不支持对非登录角色的成员强制实施连接限制。因此,您无法创建角色,设置连接限制以及将该角色授予用户,以限制该角色成员的总连接数。它也没有ON LOGIN触发器。
如果您必须强制执行每组登录计数,我认为您必须使用C级触发器来实现连接限制。
如果您可以限制SET ROLE
或SET SESSION AUTHORIZATION
因此需要用户提供密码,则可以为公司提供一个具有连接限制的LOGIN
角色。该帐户除登录外没有访问权限。然后,您将拥有每个用户SET ROLE
到他们的个人帐户。但是,由于PostgreSQL没有提供密码限制SET ROLE
/ SET SESSION AUTHORIZATION
的任何方式,除非您信任您的用户,否则这不会起作用,在这种情况下您通常不会有单独的用户/密码无论如何,在这种情况下。
你问“这通常是如何构建的......”但通常根本没有完成。最多,您使用每用户限制。所以你试图做一些有点不寻常的事情,而且支持得很差。