Jestem trochę zdezorientowany, jeśli chodzi o ustawianie uprawnień w PostgreSQL.
Mam następujące role:
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}
i bazy danych:
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
---------------------+--------+----------+-------------+-------------+-------------------
myapp_production | rails | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
...
użytkownik myappnie ma problemu z zapytaniem do myapp_productionbazy danych o dodawanie i usuwanie rekordów. Chciałbym meltemirównież móc wysłać zapytanie do tej samej bazy danych. Stworzyłem rolę, railsktóra jest właścicielem bazy danych, i stworzyłem zarówno członków, jak meltemii myappczłonków rails. Ale wciąż dostaję permission denied for relationbłędy. Meltemimoże wyświetlić schemat, ale nie może wykonać zapytania do bazy danych.
Właśnie zauważyłem (z \dtpoleceniem), że myappjest właścicielem tabel:
List of relations
Schema | Name | Type | Owner
--------+-------------------+-------+-------
public | events | table | myapp
public | schema_migrations | table | myapp
...
public | users | table | myapp
...
Tabele zostały utworzone za pomocą ORM (migracje ActiveRecord w Railsach).
Wiem, że autoryzacja jest bardzo różna w PostgreSQL (w przeciwieństwie do MySQL i innych, z których korzystałem). Jak powinienem skonfigurować bazę danych, aby różni użytkownicy mieli do niej dostęp? Niektóre powinny być w stanie CRUD, ale inne mogą tylko czytać itp.
Dziękuję za wszelką pomoc. Przepraszam, wiem, że to bardzo podstawowe pytanie, ale sam nie znalazłem odpowiedzi.
myappzamiastrailspowyższego? Ponieważmyappjest właścicielem tabel (nigdy tego nie określiłem, migracja musi mieć). W każdym razie miałoby to sens, gdybym zmienił nazwęmyappna,myapp_groupa następnie stworzyłem nowego użytkownika,myappktórego aplikacja railsowa użyłaby do połączenia z DB. Markamyappi istniejącymeltemi, obaj członkowiemyapp_grouproli. Ale co się stanie, gdy uruchomię następną migrację. czy nie będzie należał do niegomyappponownie, tworząc problem od nowa?!?