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 myappnão tem nenhum problema ao consultar o myapp_productionbanco de dados, adicionando e excluindo registros. Eu gostaria de meltemipoder também consultar o mesmo banco de dados. Então, criei uma função railsque é proprietária do banco de dados e composta por ambos meltemie myappmembros rails. Mas ainda recebo permission denied for relationerros. Meltemipode visualizar o esquema, mas não pode consultar o banco de dados.
Acabei de notar (com \dtcomando) 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.
myappvez derailsacima? Porquemyapppossui as tabelas (nunca especifiquei isso, a migração deve ter). De qualquer forma, seria sorta faz sentido se eu renomeadomyappparamyapp_groupe, em seguida, fez um novo usuáriomyappque o aplicativo trilhos usaria para se conectar ao DB. Makemyappe existentemeltemi, ambos membros damyapp_groupfunção. Mas o que acontece quando eu executo a próxima migração. não será possuído pormyapprecriar o problema novamente?!?