我在 Ubuntu 14.04 上使用 Postgres 9.5。我想创建一个角色(用户),该角色(用户)具有与系统中现有角色相同的所有权限和对数据库的访问权限。我想我可以通过创建该用户然后将另一个角色授予他来实现这一目标......
postgres=# create role myuser;
CREATE ROLE
postgres=# GRANT rails TO myuser;
GRANT ROLE
但是当我登录到该用户时,结果发现我什至没有登录权限。
myuser@myproject:~$ psql mydb_production
psql: FATAL: role "myuser" is not permitted to log in
将角色克隆到另一个用户(例如复制权限)的正确方法是什么?
答案很简单,但可能非常令人惊讶:
所以使用
CREATE USER
而不是CREATE ROLE
。这还有一个同样棘手的方面。即使您授予新角色的角色(在您的示例中,
rails
)具有该LOGIN
选项,myuser
也不会继承它。原因是GRANT
只给权限,而是用户/角色LOGIN
的属性:注意:如果您使用
trust
和中的其中一种peer
身份验证方法pg_hba.conf
,重新考虑一下可能是个好主意。如果您使用的是 LDAP(我的最后一个想法,假设您没有指定密码),那么请忽略它。