Retrofit une application existante à utiliser une approche multi-locataire. Il doit être possible de créer des locataires et la session de chaque utilisateur doit référencer exactement un locataire actif. Chaque locataire ne devrait pouvoir voir et mettre à jour sa partition du schéma de base de données.
approche
- Créer un contexte d'application Oracle qui contient l'identifiant du locataire
- Ajouter une colonne id locataire à une table qui devrait être SCOPED
- créer une fonction sous-jacente qui retourne « tenant_id = sys_context ('tenant_context', 'tenant_id') "pour SELECT, INSERT, UPDATE et supprimer
- Ajouter une politique appropriée via dbms_rls pour enregistrer la fonction de prédicat
Cela fonctionne comme un charme sans toucher l'application existante pour SELECT, UPDATE et DELETE
Question
Lors de l'insertion de la colonne de tenant_id ne se fixe pas et une exception de sécurité arrive. Existe-t-il un moyen aussi élégant que la fonction de prédicat de toujours définir les champs liés à la sécurité? Je préfère ne pas ajouter de triggers à plus de 300 tables.