Estou um pouco confuso sobre a definição de permissões no PostgreSQL.
Eu tenho esses papéis:
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------+-----------
admin | Superuser, Create role, Create DB, Replication | {}
meltemi | Create role, Create DB | {rails}
rails | Create DB, Cannot login | {}
myapp | | {rails}
e bancos de dados:
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
---------------------+--------+----------+-------------+-------------+-------------------
myapp_production | rails | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
...
O usuário myapp
não tem nenhum problema ao consultar o myapp_production
banco de dados, adicionando e excluindo registros. Eu gostaria de meltemi
poder também consultar o mesmo banco de dados. Então, criei uma função rails
que é proprietária do banco de dados e composta por ambos meltemi
e myapp
membros rails
. Mas ainda recebo permission denied for relation
erros. Meltemi
pode visualizar o esquema, mas não pode consultar o banco de dados.
Acabei de notar (com \dt
comando) que myapp
é o proprietário das tabelas:
List of relations
Schema | Name | Type | Owner
--------+-------------------+-------+-------
public | events | table | myapp
public | schema_migrations | table | myapp
...
public | users | table | myapp
...
As tabelas foram criadas por meio de um ORM (migrações do ActiveRecord do Rails).
Eu sei que a autorização é muito diferente no PostgreSQL (em oposição ao MySQL e outros que eu usei). Como devo configurar meu banco de dados para que diferentes usuários possam acessá-lo. Alguns devem ser capazes de CRUD, mas outros só podem ler, etc ...
Obrigado por qualquer ajuda. Desculpe, sei que esta é uma pergunta muito básica, mas não consegui encontrar a resposta.
myapp
vez derails
acima? Porquemyapp
possui as tabelas (nunca especifiquei isso, a migração deve ter). De qualquer forma, seria sorta faz sentido se eu renomeadomyapp
paramyapp_group
e, em seguida, fez um novo usuáriomyapp
que o aplicativo trilhos usaria para se conectar ao DB. Makemyapp
e existentemeltemi
, ambos membros damyapp_group
função. Mas o que acontece quando eu executo a próxima migração. não será possuído pormyapp
recriar o problema novamente?!?