Introduction
Imaginez une situation où vous avez une base de données très sécurisée : règles de Firewall briquées, authentification par clé en SSH, limitation des privilèges par utilisateur etc… LA TOTALE !
Et là subitement, vous vous faites voler votre serveur, ou le stagiaire que vous avez embauché cet été copie vos datafiles et les mis à disposition sur Internet.
Tout le monde peut voir vos données ! Il suffit simplement d’aller jeter un coup d’oeil dans vos datafiles et une bonne partie de vos données apparaîtront en clair dedans.
Comment pallier à ça ? Oracle a mis en place une fonctionnalité dont il a largement fait la publicité pour Oracle Database : La Transparent Encryption (Chiffrement transparent pour les anglophones).
Grâce à ceci, nous allons pouvoir nous éviter ce genre de catastrophes !
Créer vos répertoires nécessaires
Tout d’abord, il va vous falloir créer vos répertoires pour implémenter votre porte-feuille. Vous pouvez le créer là où vous le désirez.
Avec l’utilisateur Oracle :
mkdir $ORACLE_HOME/network/wallet chmod -R 0700 $ORACLE_HOME/network/wallet
Créer votre porte-feuille
Une fois que vous avez créé votre répertoire pour mettre votre porte-feuille, il vous faudra créer votre porte-feuille.
Pour cela, toujours ouvrir un terminal en tant que l’utilisateur Oracle :
cd $ORACLE_HOME/network/wallet $ORACLE_HOME/bin/mkstore -wrl . -create
Vérifiez que des fichiers viennent d’être créé
Intégrer votre porte-feuille dans votre instance
Après, il va falloir intégrer ce fameux porte-feuille dans votre base de données. Pour cela, il vous faudra modifier le fichier sqlnet.ora . Toujours en tant que l’utilisateur Oracle :
vi $ORACLE_HOME/network/admin/sqlnet.ora
Et vous rajoutez cette ligne à la fin du fichier :
ENCRYPTION_WALLET_LOCATION= (SOURCE= (METHOD=FILE)(METHOD_DATA= (DIRECTORY=VotreOracleHome/network/wallet/) ) )
Fermez et sauvegardez le fichier.
Mettre en oeuvre le chiffrement
Maintenant, connectez-vous sur votre base de données en tant que sys avec les privilèges SYSDBA :
$ORACLE_HOME/bin/sqlplus / as sysdba SQL > ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY "votremotdepasse" SQL > ALTER SYSTEM SET ENCRYPTION WALLET OPEN AUTHENTICATED BY "votremotdepasse"
Création de votre premier tablespace chiffré
Vous êtes donc maintenant prêt à créer votre premier tablespace chiffré. Pour ceci, il suffit de rajouter une clause ENCRYPTION dans votre création de tablespace comme ci-dessous :
SQL > CREATE TABLESPACE crypted DATAFILE '/u01/app/oracle/oradata/orcl/crypted01.dbf' size 50m ENCRYPTION DEFAULT STORAGE ( ENCRYPT );
Et voilà ! Toutes les données qui seront contenues dans ce tablespace seront chiffrées et ne seront pas lisibles si on a accès à vos datafiles.
Vérifier le chiffrement
C’est pas le tout d’être arrivé à configuret tout ça, maintenant il faut le vérifier que nous avons bien chiffré notre Tablespace.
Pour cela, nous allons créer un autre tablespace non chiffré et comparer les datafiles de nos deux tablespaces.
SQL > CREATE TABLESPACE noncrypted
DATAFILE '/u01/app/oracle/oradata/orcl/noncrypted01.dbf' size 50m
SQL > CREATE TABLE users TABLESPACE noncrypted
(username VARCHAR2(50), password VARCHAR2(50));
SQL > INSERT INTO users VALUES ('guireg', 'secret');
SQL > INSERT INTO users VALUES ('capitaine','azerty123');
SQL > COMMIT;
SQL > ALTER SYSTEM CHECKPOINT;
Une fois notre table enregistrée, nous allons regarder dans les datafiles ce qui se casse :
$ strings /u01/app/oracle/oradata/orcl/noncrypted01.dbf | grep -i guireg guireg $ strings /u01/app/oracle/oradata/orcl/noncrypted01.dbf | grep -i capitaine capitaine
Grep , nous trouve bien nos deux lignes dans les datafiles. Ce n’est donc pas chiffré. Nous déplacons notre table dans notre tablespace chiffré et comparons la différence
SQL > ALTER TABLE users MOVE TABLESPACE crypted; SQL > ALTER SYSTEM CHECKPOINT; $ strings /u01/app/oracle/oradata/orcl/crypted01.dbf | grep -i guireg $ strings /u01/app/oracle/oradata/orcl/crypted01.dbf | grep -i capitaine
Grep ne trouve pas nos lignes. Nos datafiles sont bien chiffrées et donc illisibles au niveau du système sans notre clé.
