Я трохи розгублений щодо налаштування дозволів у 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
знову створити проблему заново?!?