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

Closed
2 tasks done
alhyss opened this issue Nov 7, 2023 · 2 comments
Closed
2 tasks done

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

alhyss opened this issue Nov 7, 2023 · 2 comments
Assignees
Labels
enhancement New feature or request
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
@alhyss alhyss self-assigned this Sep 17, 2024
@alhyss alhyss added the enhancement New feature or request label Sep 17, 2024
alhyss added a commit that referenced this issue Sep 20, 2024
Script de déploiement d'Asgard v1.4.1 et mise à jour depuis la v1.4.0 :
- amendement de asgard_on_modify_gestion_schema_before pour
  éviter l'échec de la restauration de la table de gestion lorsque des
  extensions qui créent des schémas sont actives sur la base.
- changement du mot de passe initial de consult.defaut.
- ajout d'une contrainte sur gestion_schema et d'un contrôle dans
  asgard_on_modify_gestion_schema_before pour assurer que les
  schémas système ne puissent pas être référencés.
- ajout des fonctions utilitaires asgard_nettoyage_oids,
  asgard_cherche_lecteur, asgard_cherche_editeur et
  asgard_restaure_editeurs_lecteurs.

Mise à jour du README et des métadonnées du paquet Debian.

Refs: #13 #14 #15 #17
@alhyss alhyss mentioned this issue Sep 20, 2024
@alhyss
Copy link
Collaborator Author

alhyss commented Sep 20, 2024

La contrainte sur gestion_schema et le contrôle dans z_asgard_admin.asgard_on_modify_gestion_schema_before() ont tous deux été implémentés dans la v1.4.1.

@alhyss alhyss closed this as completed Sep 20, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

1 participant