Я трохи розгублений щодо налаштування дозволів у PostgreSQL.
У мене такі ролі:
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}
та бази даних:
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
---------------------+--------+----------+-------------+-------------+-------------------
myapp_production | rails | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
...
Користувач myappне має проблем із запитом у myapp_productionбазі даних, додаючи та видаляючи записи. Я хотів би, meltemiщоб я також міг запитувати ту саму базу даних. Отже, я створив роль, railsяка є власником бази даних, і зробила її meltemiі myappчленів rails. Але я все одно отримую permission denied for relationпомилки. Meltemiможе переглядати схему, але не може запитувати БД.
Я щойно помітив (з \dtкомандою), що myappє власником таблиць:
List of relations
Schema | Name | Type | Owner
--------+-------------------+-------+-------
public | events | table | myapp
public | schema_migrations | table | myapp
...
public | users | table | myapp
...
Таблиці були створені за допомогою ORM (міграції ActiveRecord Rails).
Я знаю, що авторизація сильно відрізняється в PostgreSQL (на відміну від MySQL та інших, якими я користувався). Як я повинен налаштувати свою базу даних, щоб різні користувачі мали доступ до неї. Деякі повинні мати можливість CRUD, але інші можуть читати тощо.
Дякуємо за будь-яку допомогу. Вибачте, я знаю, що це дуже основне питання, але я так і не змогла знайти відповідь.
myappзамістьrailsвище? Тому щоmyappволодіє таблицями (я ніколи цього не вказував, міграція повинна мати). У будь-якому разі, це має сенс мати сенс, якби я перейменувавсяmyappна нього,myapp_groupа потім зробив нового користувача,myappякий додаток рейки використовував би для підключення до БД. Складітьmyappі існуючіmeltemi, і обидва учасникиmyapp_groupролі. Але що відбувається, коли я запускаю наступну міграцію. чи не належить йомуmyappзнову створити проблему заново?!?