-
DBMS_CRYPTO + nhibernate
Bonjour,
J'utilise nhibernate pour taper dans ma base de données oracle 10g et je souhaiterais mettre en place un système de cryptage des données dans cette base.
Une des solutions proposées par Oracle est DBMS_CRYPTO mais j'ai l'impression qu'il faut passer par des procédures stockées pour l'utiliser (n'ayant rien trouvé avec nhibernate), ce qui n'est pas envisageable.
Confirmez vous que l'on ne peut pas allier Nhibernate et DBMS_CRYPTO ?
Avez vous d'autres idées pour crypter les données dans la base, sachant que plusieurs colonnes seraient impactées?
Merci
-
S'il s'agit de pouvoir crypter certaines colonnes de tables, les UserType sont très faciles à concevoir.
Je les utilise le plus souvent pour stocker des champs de type texte cryptés. Voici un exemple d'utilisation : http://mindlib.wiki.sourceforge.net/EncryptedStringType
La librairie utilisée dans cet exemple peut être téléchargée.
-
Bonjour,
Merci pour ta réponse. La solution que tu propose est une bonne solution, malheureusement, elle ne peut s'appliquer dans mon cas.
En effet, plusieurs applications vont aller taper la base de données et il est nécessaire donc que ce soit une fonction de cryptage de la base....C'est pour cette raison que je me renseignais plus particulièrement sur DBMS_CRYPTO qui est une fonction Oracle.
-
Tu peux toujours exploiter un intercepteur dans NHibernate si à priori ton besoin est constant.
L'intercepteur te permettra entre autres d'agir sur tous les événements possibles lors des interactions entre la session et la DB.
Depuis la 2.0; tu as aussi accès au events; qui te permettent de gérer les événements sur des entités.
Le seul "hic" est que tu devras faire appel à la facotry de la session pour exécuter la sp / fonction.
En revanche, ce qu'il est possible de faire est plutôt d'implémenter une crypto dans ton intercepteur et de la généraliser.
Autre chose qu'il est aussi possible de faire; c'est d'utiliser le poco pour porter des valeurs décryptées dans ton application est utiliser un singleton pour crypter dans une propriété mappée le résultat de la DB.
-
J'ai juste oublié de te préciser que sur l'API tu as accès aux métadatas, donc dans l'intercepteur tu pourras vérifier sans reflection les propriétés qui doivent être cryptées, si tu dois filtrer uniquement les strings par ex.