Estou usando o Postgres 9.5 no Ubuntu 14.04. Gostaria de criar uma função (usuário) que tenha todos os mesmos privilégios e acesso a um banco de dados que uma função existente em meu sistema. Eu pensei que poderia fazer isso criando aquele usuário e, em seguida, concedendo a outra função a ele…
postgres=# create role myuser;
CREATE ROLE
postgres=# GRANT rails TO myuser;
GRANT ROLE
mas quando eu faço login nesse usuário, descobri que nem tenho privilégios de login.
myuser@myproject:~$ psql mydb_production
psql: FATAL: role "myuser" is not permitted to log in
Qual é a maneira correta de clonar uma função para outro usuário (por exemplo, copiar os privilégios)?
A resposta é simples, mas pode ser muito surpreendente:
Portanto, use
CREATE USER
em vez deCREATE ROLE
.Há mais um aspecto igualmente complicado disso. Mesmo que a função que você concede à nova função (no seu exemplo,
rails
) tenha aLOGIN
opção,myuser
não a herdará. O motivo é queGRANT
só dá permissions , whileLOGIN
é um atributo do usuário/role:Observação: se você estiver usando um dos métodos de autenticação
trust
e em , talvez seja uma boa ideia repensar isso. Se você estiver usando LDAP (a última ideia que tenho, já que você não especifica uma senha), ignore isso.peer
pg_hba.conf