Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Interdire le référencement des schémas système #14

Open
2 tasks
alhyss opened this issue Nov 7, 2023 · 1 comment
Open
2 tasks

Interdire le référencement des schémas système #14

alhyss opened this issue Nov 7, 2023 · 1 comment
Milestone

Comments

@alhyss
Copy link
Collaborator

alhyss commented Nov 7, 2023

La documentation indique que les "schémas système" - en pratique les schémas pg_catalog, pg_temp(...), pg_toast(...), public, information_schema et topology - ne peuvent pas être référencés par Asgard. C'est un principe important pour Asgard, car il assure que son système de gestion des droits n'interfèrera pas avec les mécanismes mis en place automatiquement par PostgreSQL et la plupart des extensions (sauf celles qui créent des schémas spécifiques non inclus dans la liste).

En pratique, cela se manifeste par le fait que :

Autrement dit, toutes les fonctions utilitaires s'assurent de ne pas référencer ou interférer avec les schémas système.

Par contre, il reste aujourd'hui possible de forcer manuellement le référencement d'un de ces schémas :

INSERT INTO z_asgard.gestion_schema_usr (nom_schema, producteur, creation) VALUES
    ('public', 'g_admin', True) ;

Messages renvoyés :

NOTICE:  [table de gestion] Le nom du schéma public ne respecte pas la nomenclature.
NOTICE:  (schéma public pré-existant)
NOTICE:  attribution de la propriété du schéma et des objets au rôle producteur du schéma public :
NOTICE:  > ALTER SCHEMA public OWNER TO g_admin
INSERT 0 1

Il serait souhaitable d'interdire strictement cette opération :

  • En ajoutant une contrainte sur z_asgard_admin.gestion_schema.
    CHECK (
        NOT nom_schema ~ ANY(
            ARRAY[
                '^pg_toast', '^pg_temp', '^pg_catalog$', '^public$', 
                '^information_schema$', '^topology$'
            ]
        )
    )
  • En faisant en sorte que z_asgard_admin.asgard_on_modify_gestion_schema_before() émette une erreur lorsque cette contrainte n'est pas respectée, comme elle le fait déjà pour les autres contraintes.
@alhyss
Copy link
Collaborator Author

alhyss commented Nov 7, 2023

Pour mémoire, le problème a été identifié parce qu'un service utilisateur qui se trouvait avoir référencé le schéma public de sa base dans la table de gestion d'Asgard a pour cette raison constaté des erreurs (heureusement bénignes) à la restauration de sa base, et AsgardManager ne fonctionnait plus non plus sur cette base.

@alhyss alhyss added this to the ASGARD v1.4.1 milestone Aug 9, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant