Documentation PostgreSQL 9.3.25 > Administration du serveur > Rôles de la base de données > Supprimer des rôles | |
Appartenance d'un rôle | Sécurité des fonctions |
Comme les rôles peuvent posséder des objets dans une base de données et peuvent détenir des droits pour accéder à d'autres objets, supprimer un rôle n'est généralement pas la seule exécution d'un DROP ROLE(7). Tout objet appartenant à un rôle doit d'abord être supprimé ou réaffecté à d'autres propriétaires ; et tout droit donné à un rôle doit être révoqué.
L'appartenance des objets doit être transférée, un à la fois, en utilisant des commandes ALTER, par exemple :
ALTER TABLE table_de_bob OWNER TO alice;
Il est aussi possible d'utiliser la commande REASSIGN OWNED(7) pour réaffecter tous les objets du rôle à supprimer à un autre rôle. Comme REASSIGN OWNED ne peut pas accéder aux objets dans les autres bases, il est nécessaire de l'exécuter dans chaque base qui contient des objets possédés par le rôle. (Notez que la première exécution de REASSIGN OWNED changera le propriétaire de tous les objets partagés entre bases de données, donc les bases et les tablespaces, qui appartiennent au rôle à supprimer.)
Une fois que tous les objets importants ont été transférés aux nouveaux propriétaires, tout objet restant possédé par le rôle à supprimer peut être supprimé avec la commande DROP OWNED(7). Encore une fois, cette commande ne peut pas accéder aux objets des autres bases de données, donc il est nécessaire de l'exécuter sur chaque base qui contient des objets dont le propriétaire correspond au rôle à supprimer. De plus, DROP OWNED ne supprimera pas des bases ou tablespaces entiers, donc il est nécessaire de le faire manuellement si le rôle possède des bases et/ou des tablespaces qui n'auraient pas été transférés à d'autres rôles.
DROP OWNED fait aussi attention à supprimer tout droit donné au rôle cible pour les objets qui ne lui appartiennent pas. Comme REASSIGN OWNED ne touche pas à ces objets, il est souvent nécessaire d'exécuter à la fois REASSIGN OWNED et DROP OWNED (dans cet ordre !) pour supprimer complètement les dépendances d'un rôle à supprimer.
En bref, les actions de suppression d'un rôle propriétaire d'objets sont :
REASSIGN OWNED BY role_a_supprimer TO role_remplacant; DROP OWNED BY role_a_supprimer; -- répétez les commandes ci-dessus pour chaque base de données de l'instance DROP ROLE role_a_supprimer;
Lorsque les objets ne sont pas tous transférés au même rôle, il est préférable de gérer les exceptions manuellement, puis de réaliser les étapes ci-dessus pour le reste.
Si DROP ROLE est tenté alors que des objets dépendants sont toujours présents, il enverra des messages identifiant les objets à réaffecter ou supprimer.