我很新于rails,所以希望这不是一个愚蠢的问题。
我正在尝试让rails使用一个postgresql数据库和两个不同的用户账户。然而,我想要能够在这些账户之间切换,以便他们对数据库拥有相同的权限(最好不是postgresql超级用户)。
我在postgres中创建了一个NOLOGIN角色,它是数据库的所有者。然后将两个用户账户分配给此角色。但是,每当我执行rake db:migrate时,它都会使用户账户(而不是角色)成为表的所有者。如果我切换用户,则第二个用户将无法对第一个用户创建的表具有正确的权限。
拥有两个账户的原因是为了能够快速切换,例如当我需要更改密码时没有停机时间。
是否有一种方法告诉rails在创建表时使用特定的角色作为所有者?(或者也许有更好的方法可以实现这一点,而不需要在同一个postgresql角色中使用两个账户?)
更新:到目前为止,我发现这个解决方案可以手动运行作为外部脚本并将所有表的所有权更改为NOLOGIN角色,但希望有更优雅或与rails更匹配的解决方案。
我正在尝试让rails使用一个postgresql数据库和两个不同的用户账户。然而,我想要能够在这些账户之间切换,以便他们对数据库拥有相同的权限(最好不是postgresql超级用户)。
我在postgres中创建了一个NOLOGIN角色,它是数据库的所有者。然后将两个用户账户分配给此角色。但是,每当我执行rake db:migrate时,它都会使用户账户(而不是角色)成为表的所有者。如果我切换用户,则第二个用户将无法对第一个用户创建的表具有正确的权限。
拥有两个账户的原因是为了能够快速切换,例如当我需要更改密码时没有停机时间。
是否有一种方法告诉rails在创建表时使用特定的角色作为所有者?(或者也许有更好的方法可以实现这一点,而不需要在同一个postgresql角色中使用两个账户?)
更新:到目前为止,我发现这个解决方案可以手动运行作为外部脚本并将所有表的所有权更改为NOLOGIN角色,但希望有更优雅或与rails更匹配的解决方案。
GRANT user1 TO user2; GRANT user2 TO user1
?这将需要在“切换”之前每次手动执行吗?但是,如果我使用“DEFAULT PRIVILEGES”,我只需执行一次就可以了。对吗? - gingerlimeGRANT
意味着永久授予权限,仅需一次即可。 - Erwin BrandstetterGRANT user1 TO user2
,这样 user2 将拥有与 user1 相同的权限,但反过来则不然。我需要两个用户无论哪个创建了表都具有完全相同的权限。也许我漏看了什么。 - gingerlimeALTER TABLE {table_name}...
命令时,我得到了相同的错误,即使按照上面介绍的方式授予了ALTER DEFAULT PRIVILEGES... GRANT ALL ON TABLES...
。 - gingerlime