Je suis un peu confus quant à la définition des autorisations dans PostgreSQL.
J'ai ces rôles:
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}
et bases de données:
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
---------------------+--------+----------+-------------+-------------+-------------------
myapp_production | Rails | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
...
l'utilisateur myapp
n'a aucun problème à interroger le myapp_production
base de données ajoutant et supprimant des enregistrements. J'aimerais que meltemi
puisse également interroger la même base de données. J'ai donc créé un rôle Rails
qui possède la base de données et j'ai fait à la fois meltemi
et myapp
membres de Rails
. Mais je reçois toujours permission denied for relation
les erreurs. Meltemi
peut afficher le schéma mais ne peut pas interroger la base de données.
Je viens de remarquer (avec \dt
commande) que myapp
est le propriétaire des tables:
List of relations
Schema | Name | Type | Owner
--------+-------------------+-------+-------
public | events | table | myapp
public | schema_migrations | table | myapp
...
public | users | table | myapp
...
Les tables ont été créées via un ORM (migrations ActiveRecord de Rails).
Je sais que l'autorisation est très différente dans PostgreSQL (par opposition à MySQL et autres que j'ai utilisés). Comment dois-je configurer ma base de données pour que différents utilisateurs puissent y accéder. Certains devraient être capables de CRUD mais d'autres peuvent seulement lire, etc ...
Merci pour toute aide. Désolé, je sais que c'est une question très basique mais je n'ai pas pu trouver la réponse moi-même.
Je viens d'écrire à ce sujet dans ma réponse à Octroi de droits sur la base de données postgresql à un autre utilisateur sur ServerFault.
Fondamentalement, la meilleure solution lorsque vous avez un seul utilisateur et que vous souhaitez accorder les mêmes droits à d'autres utilisateurs est de transformer cet utilisateur en groupe, de créer un nouvel utilisateur avec le même nom que celui d'origine qui est membre du groupe, et accorder ce groupe à d'autres utilisateurs également.
Dans votre cas, Rails
est renommé pour dire myapp_users
, puis vous créez un nouveau rôle de connexion (utilisateur) nommé Rails
et GRANT myapp_users TO Rails
. Vous êtes maintenant un GRANT myapp_users TO meltemi
. Le nouveau compte Rails
et l'utilisateur meltemi
ont désormais les droits de l'ancien compte Rails
.
Pour un contrôle plus fin, je vous conseille généralement d'éviter de donner aux utilisateurs de connexion au jour le jour ou à leurs groupes la propriété des tables. Donnez-leur accès via un groupe NOINHERIT
qu'ils doivent explicitement SET GROUP
pour, ou mieux, utiliser un utilisateur complètement différent pour des opérations privilégiées comme DDL et GRANT
s. Malheureusement, cela ne fonctionne pas avec Rails, car Rails aime appliquer les migrations chaque fois qu'il le souhaite et AFAIK ne vous donne pas la possibilité de spécifier un utilisateur différent et plus privilégié pour exécuter le migrations comme.