使用远程数据库设置用户

时间:2014-03-22 01:14:44

标签: sql postgresql login

我有一个远程数据库(运行Postgres)并且想要设置一个用户方案。

注册使用该软件的每个设施最初都会收到管理员的登录凭据,然后管理员将为其设施创建用户。每个用户都对软件的某些区域具有某些访问权限(例如,某些菜单不适用于较低级别的用户)。

此外,每个设施将被许可与数据库同时连接数量有限(在我看来,这意味着每个设施将收到一个具有最大连接数的Postgres用户名/密码)。

我可以看到几个选项,没有一个是最佳选择。

  1. 每个用户都必须使用四个字段登录 - 设施的用户名/密码和用户的用户名/密码。 (似乎有四个登录字段过多)

  2. 每个用户都将使用用户名/密码登录,并使用硬件编码到程序中的设施的用户名/密码(导致每个设施必须拥有不同版本软件的头痛,但添加了安全性,他们无法使用他们的程序访问其他设施的数据。

  3. 将数据写入计算机上的某个文件,该文件包含在启动时读取的一部分登录信息(需要加密,我猜)(即使加密也似乎有些不安全)。 / p>

  4. 这通常是如何构建的?

1 个答案:

答案 0 :(得分:1)

到目前为止,您最好的选择是避免对客户端数量设置严格限制。允许一些弹性,并针对pg_stat_activity定期报告查询,以查看是否有人一直超出其限制。如果是的话,通过非技术手段处理它。您可以使用pg_has_role等按公司角色对登录用户进行分组,以监控每家公司的连接限制。

这样,您的客户端不必在机器崩溃时发生混乱,并且在重用连接之前必须等待很长时间才能进行TCP / IP超时。等

PostgreSQL不支持对非登录角色的成员强制实施连接限制。因此,您无法创建角色,设置连接限制以及将该角色授予用户,以限制该角色成员的总连接数。它也没有ON LOGIN触发器。

如果您必须强制执行每组登录计数,我认为您必须使用C级触发器来实现连接限制。

如果您可以限制SET ROLESET SESSION AUTHORIZATION因此需要用户提供密码,则可以为公司提供一个具有连接限制的LOGIN角色。该帐户除登录外没有访问权限。然后,您将拥有每个用户SET ROLE到他们的个人帐户。但是,由于PostgreSQL没有提供密码限制SET ROLE / SET SESSION AUTHORIZATION的任何方式,除非您信任您的用户,否则这不会起作用,在这种情况下您通常不会有单独的用户/密码无论如何,在这种情况下。

你问“这通常是如何构建的......”但通常根本没有完成。最多,您使用每用户限制。所以你试图做一些有点不寻常的事情,而且支持得很差。

相关问题