Rôles PostgreSQL versus utilisateurs, accorder des autorisations

27

J'apprends actuellement les différences entre PostgreSQL et MySQL car j'ai un nouveau projet et j'ai également l'intention de migrer mon logiciel existant de MySQL vers PostgreSQL. J'ai en fait commencé à créer un tableau HTML avec une comparaison des commandes (pour les utilisateurs / bases de données / invite de commande, etc.) entre les deux. Après avoir lu une réponse ici, j'ai remarqué que cela rolesemble être utilisé en groupe. Avec MySQL J'ai deux utilisateurs, essentiellement publiques ( DELETE, INSERT, SELECTet UPDATEautorisations) et un utilisateur admin avec deux autorisations supplémentaires.

Donc, fondamentalement, dans l'invite de commande de Windows 7 (développement local uniquement) ...

  • Un rôle est-il un utilisateur, un groupe ou un terme vaguement utilisé spécifique à PostgreSQL?
  • Comment accorder uniquement des autorisations spécifiques à un utilisateur spécifique, pour toutes les tables d'une base de données?
  • Comment accorder toutes les autorisations à un utilisateur spécifique, pour toutes les tables d'une base de données?
  • Comment, le cas échéant, un rôle se compare-t-il à un utilisateur lors de l'utilisation GRANTou REVOKEdes autorisations utilisateur?
John
la source

Réponses:

48

Un rôle est une entité qui peut fonctionner en tant qu'utilisateur et / ou en tant que groupe. Un rôle WITH LOGINpeut être utilisé en tant qu'utilisateur, c'est-à-dire que vous pouvez vous connecter avec lui. Tout rôle peut fonctionner en tant que groupe, y compris les rôles auxquels vous pouvez également vous connecter. Donc, "utilisateur" et "groupe" sont essentiellement des termes qui indiquent l' utilisation prévue d'un rôle, il n'y a pas vraiment de distinction entre eux. Même dans la version PostgreSQL de SQL, les deux sont plus ou moins utilisés comme synonymes. Par exemple, la documentation sur CREATE USERindique:

CREATE USER est désormais un alias de CREATE ROLE.

Tout accorder ... voir le manuel pourGRANT . Vous souhaitez probablement octroyer des droits ALL TABLES IN SCHEMA publicplutôt qu'à toutes les tables de la base de données.

Accorder certains droits ... même chose, mais au lieu d' GRANT ALLutiliser GRANT SELECT, INSERTpar exemple. Encore une fois, consultez le manuel.

Un rôle est un utilisateur et / ou un groupe. Vous ne pouvez accorder que des rôles, car les rôles sont tout ce qu'il y a.

Craig Ringer
la source
Grande explication!
sharadov
Alors ... quelle est la syntaxe pour accorder tous les droits à toutes les tables du schéma public?
AlxVallejo
@AlxVallejo cela devrait aider . Essayez le lien du haut ou lisez la GRANTpage de documentation où il répertorieALL TABLES IN SCHEMA
Craig Ringer