5 votes

Accorder des droits sur la base de données postgresql à un autre utilisateur

J'essaie de mettre en place un système avec une base de données PostgreSQL par utilisateur, avec un pool de ressources PHP-FPM pour un compte associé. J'ai besoin d'accorder tous les privilèges sur la base de données à l'autre utilisateur, mais il semble que cela ne soit possible que pour les tables.

J'ai essayé

grant all privileges on database username to username\_shadow

mais cela ne donne que des privilèges limités.

J'ai effectué une mise à jour vers PGSQL 9.2, qui a la possibilité d'accorder des privilèges sur le schéma, mais je n'arrive pas à obtenir un résultat utile. Comment puis-je simplement faire en sorte qu'un autre utilisateur ait tous les privilèges du premier sur la même base de données ?

7voto

Bunny Joel Points 43

N'essayez pas de dupliquer des ensembles de droits de cette manière, cela deviendra un cauchemar de gestion. Utilisez les rôles et l'héritage.

Au lieu de cela, créez un ROLE (groupe) et faire des deux utilisateurs des membres du rôle. Accordez au rôle les droits requis et la propriété de tout objet requis, et les utilisateurs hériteront automatiquement de ces droits d'accès.

Pour faire la transition, soit :

  • Transformez l'utilisateur existant en un rôle partagé en le renommant et en supprimant son nom. LOGIN à droite, le transformant d'un rôle de connexion (utilisateur) en un rôle de non-login (groupe), puis créer un nouvel utilisateur avec le nom original ; ou

  • Manuellement GRANT le nouveau rôle tous les droits requis, en utilisant GRANT ... ON DATABASE , GRANT ... ON SCHEMA , GRANT ... ON ALL TABLES IN SCHEMA etc.

Voici une démo de la 1ère approche. Disons que nous avons un utilisateur original nommé test avec la propriété d'une table et quelques autres subventions :

regress=# CREATE USER test WITH PASSWORD 'original user pw';
CREATE ROLE
regress=# CREATE TABLE testtab(x integer);
CREATE TABLE
regress=# ALTER TABLE testtab OWNER TO test;
ALTER TABLE

Nous pouvons le convertir en un rôle partagé et créer un nouvel utilisateur avec le même nom :

regress=# ALTER ROLE test RENAME TO test_group;
NOTICE:  MD5 password cleared because of role rename
ALTER ROLE
regress=# ALTER ROLE test_group NOLOGIN;
ALTER ROLE
regress=# CREATE USER test IN GROUP test_group PASSWORD 'original user pw';
CREATE ROLE

Tant que vous définissez le même mot de passe, l'utilisateur ne remarquera pas la différence.

Vous pouvez maintenant créer un nouvel utilisateur et l'ajouter au même rôle, en lui donnant le même accès que l'utilisateur original. test que l'utilisateur avait avant que vous ne le transformiez en un rôle test_group . Dans ce cas, j'utilise les étapes distinctes de la création d'un utilisateur et de l'attribution d'un rôle ; l'effet est le même que ci-dessus, je vous montre simplement deux façons différentes de le faire :

regress=# CREATE USER newuser PASSWORD 'fred';
CREATE ROLE
regress=# GRANT test_group TO newuser;
GRANT ROLE

Maintenant newuser peut SELECT * FROM testtab même si testtab appartenait à l'utilisateur test et n'avait pas GRANT pour permettre aux autres utilisateurs d'y accéder.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X