web-dev-qa-db-fra.com

Rôles PostgreSQL versus utilisateurs, accorder des autorisations

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 lecture d'une réponse ici, j'ai remarqué que role semble être utilisé en groupe. Avec MySQL, j'ai deux utilisateurs, essentiellement publics (DELETE, INSERT, SELECT et UPDATE autorisations) et un utilisateur administrateur avec quelques 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 peu 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 de GRANT ou REVOKE pour les autorisations utilisateur?
31
John

Un rôle est une entité qui peut fonctionner en tant qu'utilisateur et/ou en tant que groupe. Un rôle WITH LOGIN peut ê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'usage prévu 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 USER dit:

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

Accorder tout ... voir le manuel pour GRANT . Vous souhaitez probablement accorder des droits à ALL TABLES IN SCHEMA public plutôt que toutes les tables de la base de données.

Accorder certains droits ... même chose, mais au lieu de GRANT ALL utilisation GRANT SELECT, INSERT par 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.

53
Craig Ringer