Estoy un poco confundido sobre la configuración de permisos en PostgreSQL.
Tengo estos roles:
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}
y bases de datos:
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
---------------------+--------+----------+-------------+-------------+-------------------
myapp_production | rails | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
...
el usuario myappno tiene problemas para consultar la myapp_productionbase de datos agregando y eliminando registros. También me gustaría meltemipoder consultar la misma base de datos. Por lo tanto, he creado un papel railsque posee la base de datos y de hecho tanto meltemiy myappmiembros de rails. Pero sigo teniendo permission denied for relationerrores. Meltemipuede ver el esquema pero no puede consultar la base de datos.
Acabo de notar (con \dtcomando) que myappes el propietario de las tablas:
List of relations
Schema | Name | Type | Owner
--------+-------------------+-------+-------
public | events | table | myapp
public | schema_migrations | table | myapp
...
public | users | table | myapp
...
Las tablas se crearon a través de un ORM (migraciones ActiveRecord de Rails).
Sé que la autorización es muy diferente en PostgreSQL (a diferencia de MySQL y otros que he usado). ¿Cómo debo configurar mi base de datos para que diferentes usuarios puedan acceder a ella? Algunos deberían poder CRUDAR, pero otros solo podrían leer, etc.
Gracias por cualquier ayuda. Lo siento, sé que esta es una pregunta muy básica, pero no he podido encontrar la respuesta yo mismo.
fuente

myapplugar de lorailsanterior? Porquemyappposee las tablas (nunca especifiqué eso, la migración debe tener). De todos modos, sería sortA sentido si Retitulémyappamyapp_groupy luego hice un nuevo usuariomyapp, que los rieles de aplicación sería utilizar para conectarse a DB. Makemyappy el existentemeltemi, ambos miembros delmyapp_grouprol. Pero, ¿qué sucede cuando ejecuto la próxima migración? ¿No será propiedad demyappvolver a crear el problema nuevamente?roles(desde la versión 8.1). Los términosuserygroupse mantienen por razones históricas y de compatibilidad. Básicamente, un "grupo" es un rol sin el privilegio de inicio de sesión. Puede concedermyappameltemiincluso simyappes sólo otro "usuario". Comience leyendo el manual aquí .rolesvsgroupsvsusersseparación en Postgres, al menos creo que sí. Lamento usar la terminología incorrecta (y confusa) anterior. Pero todavía no entiendo cómo configurar mi base de datos, por lo que un rol sin inicio de sesión OWNS la base de datos y dos roles de inicio de sesiónmyappymeltemiambos pueden tener acceso completo. Una de esas funcionesmyappserá ejecutar migraciones de Rails que, inevitablemente, crearán nuevas tablas que, una vez más, pertenecen amyappun usuario de inicio de sesión. ¿Debo hacermemeltemiun 'miembro'myappy terminar con esto? Pero eso solo parece torpe ... ¿no?myappposeemeltemi, entonces eso sería lo correcto. Si deseameltemiobtener solo un subconjunto de privilegios, no lo haría. Luego, cree un rol grupal para mantener el conjunto de privilegios y otórguele esomeltemi. Probablemente le interesará esta pregunta relacionada con SO . Respondí explicandoDEFAULT PRIVILEGESSET ROLEcomando al comienzo de sus migraciones y unRESET ROLEfinal, pero no confiaría en que Rails ejecute todo correctamente en orden. Erwin tiene razón; en este caso, la mejor solución será queGRANTlos rieles del usuario otorguen la propiedad al otro usuario, utilizando el primer usuario como grupo para el segundo.