Um die Inhalte der Datenbank zu entschlüsseln muss dafür gesorgt werden, dass das Wallet offen ist. Dazu muss die Datenbank-Instanz wissen wo das Wallet-File liegt. Den Pfad dazu teilt man der Instanz über die SQLNET.ORA Datei mit.
Über SQL-Befehle kann das Wallet geöffnet und geschlossen werden. Außerdem können darüber noch weitere administrative Operationen wie z.B. das Erneuern des Master-Keys ausgeführt werden.
Seit der Oracle Datenbank Version 12.2.0.1 ist es zudem möglich die bereits vorhandenen Tablespaces SYSTEM und SYSAUX online zu verschlüsseln. Das gibt uns erstmalig die Möglichkeit die gesamte Datenbank zu verschlüsseln.
Bei der Administration der Datenbank - ob komplett verschlüsselt oder nicht - muss jedoch auf ein paar Feinheiten geachtet werden.
Anfangs stellt sich die Frage, wo das Wallet eigentlich liegen soll, denn jede Instanz im RAC benötigt ja Zugriff darauf.
Zuerst dachten wir, dass es am besten wäre, das Wallet ins ASM zu legen. Denn hier haben automatisch alle Instanzen Zugriff und das Wallet ist durch die Redundanz der Diskgroup mehrfach gesichert.
Leider gibt es seit der Datenbank-Version 12.1.0.2 einen Bug, der die Kopie des Wallets korrumpiert, sobald es mit dem Tool „asmcmd“ von ASM auf das lokale Filesystem kopiert wird. Merken wird man das aber leider erst zu spät, denn das Kopieren an sich ist erfolgreich.
Mehr dazu im MOS:
Cannot open wallet from local filesystem after cp from ASM with asmcd (Doc ID 2085607.1)
Stellen Sie sich vor, Sie sichern im Rahmen ihres DR-Konzepts das Wallet außerhalb von ASM, wobei keine Fehler gemeldet werden. Im DR-Fall wollen sie nun das gesicherte Wallet und damit die zurückgespielte Datenbank wieder öffnen und erhalten plötzlich folgende Fehlermeldung:
SQL> ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN identified by <passwd>
ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN identified by <passwd>
*
ERROR at line 1:
ORA-28353: failed to open wallet
Ein Schock für jeden, der das nicht schon bei Tests erkannt hat.
Also legen wir das Wallet lieber doch pro Instanz in das lokale Filesystem des jeweiligen Servers.
Es ist beachten, dass man in diesem Fall zuerst das Wallet auf einer Instanz anlegt und den Master-Key mit der „… SET KEY …“ Option setzt. Danach kann das Wallet auf die übrigen Server verteilt werden. Am Ende gibt es also mehrere identische Kopien des Wallets. Bei allen zukünftigen Änderungen am Wallet muss daran gedacht werden, das Wallet wieder auf die anderen Server zu verteilen.
Der Wallet-Eintrag in der Datei sqlnet.ora könnte wie folgt aussehen:
ENCRYPTION_WALLET_LOCATION=
(SOURCE=
(METHOD=FILE)
(METHOD_DATA=
(DIRECTORY=/u01/app/oracle/admin/$ORACLE_DBNAME/wallet)))
Durch die Variable ORACLE_DBNAME wird das Wallet für jede Datenbank in einem anderen Verzeichnis erstellt/gesucht.
Sollte die gesamte Datenbank verschlüsselt sein ist noch folgendes zu beachten:
Bereits beim Starten der Datenbank muss der SYSTEM Tablespace entschlüsselt werden. Dazu ist es zwingend notwendig, dass die Variable $ORACLE_DBNAME vor dem Instanzstart immer richtig gesetzt ist.
Bei Benutzung von SQLPLUS zum Starten der DB muss sie immer als Umgebungsvariable gesetzt werden. Bei Verwendung von SRVCTL (bei RAC wohl eher üblich) oder einem Clusterstart muss sie in der Cluster-OCR hinterlegt werden:
srvctl setenv database -db testdb -env "ORACLE_DBNAME=testdb"
Es gibt drei verschiedene Wallet-Typen.
Wir verwenden in unserem Fall ein local Auto-Login Wallet.
Sobald das Wallet erstellt wurde und einen Master-Key beinhaltet, kopiert man das Wallet auf die restlichen Server des RACs.
Auf jedem Server muss jetzt zusätzlich noch das local Auto-Login Wallet generiert werden. Dieses ist dann natürlich für jeden Server unterschiedlich.
Beim Erstellen des Wallets (unabhängig ob RAC oder Single Instance) ist noch etwas zu beachten:
Erstellen Sie zuerst den Master-Key und erst danach das Auto-Login Wallet. In der Oracle Dokumentation werden Sie das in der falschen Reihenfolge beschrieben finden. Denn sonst laufen Sie in dieses Problem:
TDE Wallet Problem in 12c: Cannot do a Set Key operation when an auto-login wallet is present (Doc ID 1944507.1)
Die View gv$encryption_wallet ist der zentrale Ort, an dem Sie den Status des Wallets überprüfen können. Auch hier ist Vorsicht geboten, denn Sie dürfen sich nicht auf alle angezeigten Werte verlassen!
Beispielsweise wurde in unseren Tests der Wert von WALLET_TYPE (Mögliche Werte: PASSWORD | AUTOLOGIN | LOCAL_AUTOLOGIN) nie auf allen Servern einheitlich korrekt angezeigt.
Erst nach einem Neustart der gesamten Datenbank wurde der Wert wieder korrekt angezeigt. Allerdings war die Spalte WRL_PARAMETER, welche den Wallet-Pfad anzeigt stets korrekt.
Wenn man die oben beschriebenen Feinheiten beachtet, steht einem verschlüsselten RAC nichts mehr im Wege.
Vor allem im Zusammenspiel mit dem neuen Parameter ENCRYPT_NEW_TABLESPACES, mit dem jeder neu angelegte Tablespace automatisch verschlüsselt wird, erhalten Sie eine dauerhafte und solide Verschlüsselung ihrer sensiblen Datenbanken. Allerdings werden automatisch verschlüsselte Tablespaces nur mit dem Algorithmus AES 128 verschlüsselt. Wer mehr will, muss dies doch explizit angeben.
In unserer Know-How Datenbank finden Sie mehr als 300 ausführliche Beiträge zu den
Oracle-Themen wie DBA, SQL, PL/SQL, APEX und vielem mehr.
Hier erhalten Sie Antworten auf Ihre Fragen.