Oracle Data Pump und Datenverschlüsselung
von Heinz-Wilhelm Fabry, ORACLE Deutschland B.V. & Co. KG
Im Rahmen der DBA Community ist das
Arbeiten mit Oracle Data Pump bereits in einem Artikel aus dem August 2010
beschrieben worden. Inzwischen gehört der Umgang mit dem Werkzeug zur
Alltagsroutine der DBAs. Aber gerade im Zusammenhang mit der Datenverschlüsselung
zeigen sich immer wieder und immer noch gewisse Unsicherheiten. Dieser Tipp will
versuchen, diese Unsicherheiten zu beseitigen.
Vorweg zwei Hinweise. Der erste Hinweis betrifft die Lizenzierung: Voraussetzung zum Arbeiten mit verschlüsselten Daten ist die kostenpflichtige Lizenzierung der Advanced Security Option (ASO). Diese ist zwar Bestandteil jeder Installation einer Enterprise Edition der Datenbank - muss also nicht nachträglich installiert werden. Genutzt werden darf sie aber nur, wenn die entsprechende Lizenz vorliegt. Diese Lizenz vorausgesetzt können dann einerseits über das Feature Transparent Data Encryption (TDE) Daten in der Datenbank verschlüsselt gespeichert werden (der Tipp dazu findet sich hier), andererseits erlaubt die ASO Lizenz aber auch, die Verschlüsselungsmöglichkeiten von Data Pump zu nutzen. Der zweite Hinweis betrifft die Voraussetzungen, die vorliegen sollten, um diesem Tipp folgen zu können: Man sollte ein Grundverständnis sowohl vom Arbeiten mit Data Pump als auch von TDE haben. Vielleicht genügt ja dazu auch die abermalige Lektüre der beiden zuvor genannten Tipps. Szenarien
Die Datenbank, aus der exportiert wird, wird im Tipp als Quelldatenbank bezeichnet,
die Datenbank, in die importiert wird, als Zieldatenbank. Es wird hier nicht mit
verschlüsselten Spalten gearbeitet, da diese Form der Verschlüsselung insgesamt
zu vielen Einschränkungen unterliegt. Die bevorzugte Speicherung von verschlüsselten
Daten in der Datenbank sollte die Verschlüsselung auf der Ebene der Tablespaces sein.
Man kann Daten in der Datenbank verschlüsselt oder unverschlüsselt speichern. Für welche Form der Speicherung man sich entscheidet, hängt in der Regel davon ab, wie man die eigene Bedrohungslage einschätzt. Gleiches gilt für das dump file set: Will man etwa die Dateien des Sets über ein unverschlüsseltes Netzwerk auf einen anderen Rechner übertragen, ist eine Verschlüsselung des sets vermutlich immer angebracht. Ein Beispiel dafür, dass es sinnvoll oder sogar zwingend ist, verschlüsselte Originaldaten in ein unverschlüsseltes dump file set zu exportieren, ist der Fall, dass der Export in einer Datenbank importiert werden sollen, die nicht für die Verwendung der ASO lizenziert ist. Für diesen Tipp sollen nun solche Szenarien aber KEINE Rolle spielen, in denen jeweils beide Ausgangskomponenten (Daten in der Quell- oder Zieldatenbank und dump file set) unverschlüsselt sind. Diese Szenarien sind in dem oben genannten Tipp zu Data Pump abgedeckt. Damit bleiben nur folgende sechs Szenarien Gegenstand des Tipps - jeweils drei für den Export und drei für den Import. Diese Auflistung von Szenarien dient ausschliesslich der Systematik und hört sich viel komplizierter an als das Arbeiten mit Data Pump im Alltag tatsächlich ist. Deshalb wird jeweils nach Abschluss der Informationen zum Export und Import ein kurzes Fazit gezogen.
Exportieren unverschlüsselter Daten in ein verschlüsseltes dump file set
Die bekannte Beispielinstallation des Schema SCOTT bildet wieder den
Ausgangspunkt. Die Daten sind unverschlüsselt gespeichert. Der Benutzer
SCOTT soll die Objekte seines Schemas nun verschlüsselt exportieren. Wie im
oben erwähnten
Tipp zu Data Pump
beschrieben, sind dazu zunächst für SCOTT die Voraussetzungen zu schaffen:
Es wird ein Verzeichnis angelegt und der Zugriff auf dieses Verzeichnis
freigegeben.
CREATE OR REPLACE DIRECTORY expdir AS '/home/oracle' / GRANT read, write ON DIRECTORY expdir TO scott /Zunächst wird zur Kontrolle ein unverschlüsselter Export durchgeführt. Durchsucht man diesen zum Beispiel nach dem Tabellennamen EMP oder dem Namen MILLER, findet man problemlos den Tabellennamen EMP einige Male und den Namen MILLER einmal. Nun startet SCOTT den verschlüsselten Export mit folgendem Aufruf von Data Pump (das Passwort für SCOTT wird nach dem Passwort Prompt von Data Pump eingegeben). expdp scott parfile=encrex.parDie Parameterdatei encrex.par hat nur folgende Einträge: DIRECTORY=expdir DUMPFILE=szenario1.dmp LOGFILE=szenario1.log ENCRYPTION=ALL -- Alternativ DATA_ONLY, ENCRYPTED_COLUMNS_ONLY, METADATA_ONLY, NONE] ENCRYPTION_ALGORITHM=AES192 -- Alternativ AES128 (Default) und AES 256 ENCRYPTION_MODE=PASSWORD -- Alternativ DUAL und TRANSPARENT ENCRYPTION_PASSWORD=einpasswortDie Log Datei gibt keine Auskunft darüber, ob der Export verschlüsselt durchgeführt wurde oder nicht. Allerdings ist ein Durchsuchen des Exports nach den Zeichenketten EMP und MILLER erfolglos. Das soll als Beleg dafür genügen, dass das dump file set in der Tat verschüsselt ist. Nun zu den verwendeten Parametern zur Steuerung der Verschlüsselung: Es bestehen Abhängigkeiten zwischen den Parametern ENCRYPTION, ENCRYPTION_MODE und ENCRYPTION_PASSWORD. So ist es sicherlich logisch, dass nach dem Setzen des Parameters ENCRYPTION_MODE auf PASSWORD der Parameter ENCRYPTION_PASSWORD ebenfalls besetzt werden muss. Aber auch andere Abhängigkeiten bestehen, deren Erläuterung jedoch den Rahmen dieses Tipps überschreitet. Stattdessen sei dazu auf die Seiten des Utility Guide verwiesen, auf denen alle Parameter und ihre Abhängigkeiten untereinander detailliert beschrieben werden. Während die alternativen Werte, die die Parameter ENCRYPTION und ENCRYPTION_ALGORITHM annehmen können, weitestgehend selbsterklärend sind und der Parameter ENCRYPTION_PASSWORD eindeutig sein dürfte, müssen die Werte DUAL und TRANSPARENT für ENCRYPTION_MODE erläutert werden.
Exportieren verschlüsselter Daten in ein verschlüsseltes dump file set
Der Einfachheit halber legen wir ein verschlüsseltes Tablespace mit dem Namen
ENCRYPTEDUSERS an, auf das SCOTT Zugriff erhält. Eine Abfrage auf die View
USER_TABLESPACES bestätigt, dass das Tablespace tatsächlich verschlüsselt
angelegt ist.
SQL orcl> SELECT tablespace_name, encrypted 2 FROM dba_tablespaces; TABLESPACE_NAME ENCRYPTED ------------------------------ --------- SYSTEM NO ... ENCRYPTEDUSERS YES 7 rows selected.In diesem verschlüsselten Tablespace legt SCOTT über ein CREATE TABLE AS SELECT eine Kopie der Tabelle EMP namens ANGESTELLTE an. Diese Tabelle wird selbstverständlich bei einem Schema Export ebenfalls exportiert. Es ist zu beachten, dass dazu das Wallet geöffnet sein muss! Das Vorgehen bei dieser Variante unterscheidet sich im Weiteren in keiner Weise von der vorangegangenen Vorgehensweise. Das bedeutet also, dass der Export mit der identischen Parameterdatei durchgeführt werden kann. Der Ausschnitt aus der Log Datei zeigt, dass das Schema SCOTT einschließlich der Tabelle ANGESTELLTE aus dem verschlüsselten Tablespace exportiert wurde. Export: Release 11.2.0.3.0 - Production on Sun Jan 6 16:44:30 2013 ... Starting "SCOTT"."SYS_EXPORT_SCHEMA_01": scott/******** parfile=encrex.par ... . . exported "SCOTT"."ANGESTELLTE" 8.578 KB 14 rows . . exported "SCOTT"."DEPT" 5.937 KB 4 rows . . exported "SCOTT"."EMP" 8.570 KB 14 rows ... Job "SCOTT"."SYS_EXPORT_SCHEMA_01" successfully completed at 16:45:04 Exportieren verschlüsselter Daten in ein unverschlüsseltes dump file set
Um zu zeigen, wie der Export verschlüsselter Daten in ein unverschlüsseltes
dump file set durchzuführen ist, wird die Parameterdatei bearbeitet: Alle
Parameter, die die Verschlüsselung steuern, werden aus der Datei gelöscht. Dann
wird der Export durchgeführt wie zuvor.
Der Inhalt der Log Datei unterscheidet sich nicht von der, die im vorangegangenen Abschnitt zu sehen ist. Es wird daher wie oben das dump file set nach dem Namen MILLER durchsucht, um einen Hinweis darauf zu finden, ob verschlüsselt wurde oder nicht. Wie erwartet findet sich der Name zweimal: Einmal aus der Tabelle EMP und einmal aus der Tabelle ANGESTELLTE.
Daten können in einer Quelldatenbank verschlüsselt oder unverschlüsselt abgelegt
sein. Data Pump Export kann beide Formen exportieren. Man kann mit Fug und Recht
behaupten, dass es für das Arbeiten mit Data Pump Export völlig unerheblich ist,
ob die Daten der Quelldatenbank verschlüsselt sind oder nicht. Die Bezeichnung
Transparent Data Encryption trifft also nicht nur für das Verschlüsseln
von Daten in der Datenbank selbst, sondern auch für das Exportieren dieser Daten zu.
Wichtig ist hier ausschliesslich, dass im Rahmen des Arbeitens mit Data Pump
Export gesteuert wird, ob das Ergebnis des Exports, das dump file set,
verschlüsselt ist oder nicht.
Importieren eines verschlüsselten dump file set in unverschlüsselte Datenstrukturen
Dieses Szenario wird in mehreren Schritten getestet. Zunächst wird das
verschlüsselte dump file set aus dem Szenario in Abschnitt 1 verwendet.
In diesem Szenario gab es das verschlüsselte Tablespace ENCRYPTEDUSERS sowie
die Tabelle ANGESTELLTE noch nicht. Um das Gelingen des Imports nachweisen zu
können wird die Tabelle EMP mit DROP gelöscht. Die Parameter Datei encimp.par
enthält folgende Einträge:
DIRECTORY=expdir DUMPFILE=szenario1.dmp LOGFILE=impscott1.log ENCRYPTION_PASSWORD=einpasswortAufgerufen wird der Import mit impdp scott parfile=encimp.parAuch Data Pump Import verlangt zunächst nach dem Passwort von SCOTT. Der Import gelingt erwartungsgemäß, die Tabelle EMP ist wieder verfügbar. Der Parameter ENCRYPTION_PASSWORD ist der einzige verschlüsselungsrelevante Parameter, den Data Pump Import kennt. Seine Bedeutung ist eindeutig: Es muss das Passwort angegeben werden, das auch beim Export angegeben wurde. Im nächsten Schritt soll der Export aus dem Szenario 3 importiert werden. Dieser Export enthält auch Definition und Daten der Tabelle ANGESTELLTE. Weil diese Tabelle aus dem Tablespace ENCRYPTEDUSERS exportiert wurde, muss dieses Tablespace vor dem Import mit ausreichender Quote für SCOTT angelegt werden. Es wird hier allerdings als unverschlüsseltes Tablespace angelegt! Nachdem die Tabelle EMP mit DROP TABLE gelöscht wurde, wird der Import mit folgenden Parametern durchgeführt: DIRECTORY=expdir DUMPFILE=szenario3.dmp LOGFILE=impscott3.log ENCRYPTION_PASSWORD=einpasswortAuch dieser Import gelingt, wie die Abfragen auf die Tabellen EMP und ANGESTELLTE belegen. Bemerkenswert ist natürlich, dass die Tabelle ANGESTELLTE zwar aus einem verschlüsselten Tablespace in ein verschlüsseltes dump file set exportiert wurde, aber offensichtlich auch in ein unverschlüsseltes Tablespace gleichen Namens importiert werden kann.
Zur Vorbereitung wird die Tabelle EMP mit DROP TABLE wieder gelöscht.
Ausserdem wird das im vorangegangenen Abschnitt angelegte unverschlüsselte
Tablespace ENCRYPTEDUSERS zunächst mit DROP TABLESPACE ... INCLUDING CONTENTS
AND DATAFILES gelöscht und nach den notwendigen Vorbereitungsschritten
(sqlnet.ora anpassen, Wallet anlegen) wieder neu, aber als
verschlüsseltes Tablespace angelegt.
Data Pump Import wird nun genauso aufgerufen wie im letzten Abschnitt (Abschnitt 5). Auch hier zeigen SELECTs auf EMP und ANGESTELLTE, dass die Tabellen importiert worden. Ausserdem zeigt ein SELECT auf USER_TABLES erneut, dass die Tabelle ANGESTELLTE im verschlüsselten Tablespace ENCRYPTED_USERS liegt SQL orcl> SELECT table_name, tablespace_name 2 FROM user_tables 3* WHERE table_name like 'ANG%' TABLE_NAME TABLESPACE_NAME ------------------------------ ------------------------------ ANGESTELLTE ENCRYPTEDUSERSEs macht hier im Übrigen keinen Unterschied, ob das vorliegende dump file set verschlüsselt ist oder nicht. Deshalb wird an dieser Stelle auf eine detailliertere Beschreibung verzichtet.
Erwartungsgemäß bereitet das Importieren verschlüsselter oder unverschlüsselter
dump file sets in verschlüsselte oder unverschlüsselte Datenstrukturen
keinerlei Probleme. Das Format der ursprünglichen Datenspeicherung -
verschlüsselt oder unverschlüsselt - und des dump file sets
- verschlüsselt oder unverschlüsselt - spielt für den Erfolg des
Imports keine Rolle. Sollen die Daten nach dem Import auf jeden Fall verschlüsselt
sein, müssen die Tablespaces, in die diese Daten geladen werden, zum Zeitpunkt
des Imports bereits als verschlüsselte Tablespaces existieren.
Ergänzung: Exportieren und Importieren unter Verwendung des Wallet
Wir führen nun als Ergänzung einen Export aus, für den die Parameter Datei
des Exports aus Abschnitt 1 modifiziert wird: Der Eintrag ENCRYPTION_PASSWORD
wird gelöscht und ENCRYPTION_MODE auf TRANSPARENT gesetzt. Nach erfolgreichem Export
werden erneut die Tabellen EMP und ANGESTELLTE mit DROP TABLE gelöscht.
Der Import wird nun ohne Angabe eines Passwortes durchgeführt. Erneut wird mit SELECTs auf die zuvor gelöschten Tabellen und die View USER_TABLES verifiziert, dass die Aktion gelungen ist. Oracle Data Pump und Enterprise Manager Database Control (EM)
Dieser Tipp ersetzt nicht die Beschäftigung mit den relevanten Kapiteln aus
dem
Utility Guide
und dem Handbuch
Packages and Types.
|