Durch die Transparent Data Encryption (TDE) Tablespace Live Conversion haben Sie nun die Möglichkeit, existierende Tablespaces zu verschlüsseln [ENCRYPT], zu entschlüsseln [DECRYPT] und neu zu verschlüsseln [REKEY]. Diese Funktion führt eine TDE-Tablespace-Verschlüsselung auf den Tablespace-Daten im Hintergrund aus, so dass der Tablespace weiterhin für SQL-Anweisungen zur Verfügung steht (SELECT, INSERT, UPDATE, DELETE, usw.).
Grundsätzlich gilt, der COMPATIBLE Parameter muss auf >= 12.2.0.0 stehen. Um Tablespaces verschlüsseln zu können, bedarf es für normale Tablespaces
der SYSKM Rolle. Um hingegen die Tablespaces SYSTEM und SYSAUX zu verschlüsseln, benötigen Sie das SYSDBA Privileg.
COMPATIBLE >= 12.2.0.0
SYSTEM, SYSAUX TBS SYSDBA
Andere Tablespaces SYSKM
TDE verwendet Wallets bzw. Keystores, um den Master Encryption Key zu speichern.
Obwohl das Default Database Wallet verwendet werden kann, empfiehlt Oracle die Verwendung eines eigenen Keystores für TDE unter Verwendung des ENCRYPTION_WALLET_LOCATION Parameters in der sqlnet.ora Datei.
Neben einem Passwort-basiertem Wallet haben Sie auch noch die Möglichkeit unter Verwendung eines [Local] Auto-Login Wallets bei einem Neustart der Datenbank das Wallet automatisch zu öffnen.
Abbildung 1: Encryption Key Architecture
Das nachfolgende Beispiel dient zur Demonstration einer Passwort-basierten Online Verschlüsselung eines Tablespaces. Die weiteren Möglichkeiten der Entschlüsselung (Decrypt), bzw. einer Schlüsselerneuerung (Rekey) werden hier nicht betrachtet.
Lesen Sie nun zunächst aus, in welchem Verzeichnis per Default das Wallet / der Keystore erwartet wird.
SQL> SELECT wrl_type, wrl_parameter, status, wallet_type
FROM v$encryption_wallet;
WRL_TYPE WRL_PARAMETER STATUS
WALLET_TYPE
---------- ----------------------------------- ------------------------------ --------------------
FILE /u01/app/oracle/admin/o12c/wallet NOT_AVAILABLE UNKNOWN
Legen Sie das gewünschte Wallet-/ Keystore-Verzeichnis in der SQLNET.ORA Datei fest.
Beispiel SQLNET.ORA
ENCRYPTION_WALLET_LOCATION=
(SOURCE=
(METHOD=FILE)
(METHOD_DATA=
(DIRECTORY=/u01/app/oracle/admin/o12c/wallet)))
Erzeugen Sie nun den Software-Keystore. Um diesen Schritt durchführen zu können, benötigen Sie das SYSKM Privileg, bzw. das Recht ADMINISTER KEY MANAGEMENT.
Syntax für Passwort-basierten Keystore
SQL> ADMINISTER KEY MANAGEMENT CREATE KEYSTORE '<keystore_location>' IDENTIFIED BY <software_keystore_password>;
Beispiel für Passwort-basierten Keystore
SQL> ADMINISTER KEY MANAGEMENT CREATE KEYSTORE '/u01/app/oracle/admin/o12c/wallet' IDENTIFIED BY strenggeheim;
Keystore geändert.
Durch diesen Schritt wurde nun im Keystore-Verzeichnis eine Datei, der Keystore, angelegt mit dem Namen ewallet.p12. Die Verschlüsselung ist zum jetzigen Zeitpunkt noch nicht wirksam.
Erst durch das Öffnen des Keystores selbst, wird die Verschlüsselung aktiviert. V$ENCRYPTION_WALLET gibt Ihnen Auskunft, ob das Wallet / der Keystore geöffnet oder geschlossen ist.
SQL> SELECT wrl_type, wrl_parameter, status, wallet_type
FROM v$encryption_wallet;
WRL_TYPE WRL_PARAMETER STATUS WALLET_TYPE
---------- --------------------------- ---------- -----------
FILE /u01/app/oracle/admin/o12c/wallet CLOSED UNKNOWN
Öffnen Sie nun den Software-Keystore.
Syntax zum Öffnen des Passwort-basierten Keystore
SQL> ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY <software_keystore_password>;
Beispiel zum Öffnen des Passwort-basierten Keystore
SQL> ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY strenggeheim;
Hinweis: Das Passwort kann auch in Anführungszeichen " " eingeschlossen angegeben werden.
V$ENCRYPTION_WALLET gibt Ihnen nun erneut wieder Auskunft, dass das Wallet / der Keystore zwar geöffnet wurde, aber noch kein Master Key erzeugt wurde. Ebenso können Sie hier den jeweiligen Wallet Typ entnehmen (password_based, auto_login bzw. local auto_login].
SQL> SELECT wrl_type, wrl_parameter, status, wallet_type
FROM v$encryption_wallet;
WRL_TYPE WRL_PARAMETER STATUS WALLET_TYPE
-------- ---------------------------------- ---------------- -----------
FILE /u01/app/oracle/admin/o12c/wallet/ OPEN_NO_MASTER_KEY PASSWORD
Der Master Encryption Key wird ebenso im Oracle Wallet gespeichert und dient zum Schutz der Column Encryption Keys. Standardmäßig ist der Master Encryption Key ein zufälliger Schlüssel, der durch TDE erzeugt wird. Es kann auch ein bestehendes Schlüsselpaar aus einem PKI-Zertifikat sein, das für die Verschlüsselung bestimmt ist. Um den TDE Master Encryption Key setzen zu können, muss der Passwort-basierte Software Keystore geöffnet sein. Um bei Multitenant Datenbanken den TDE Master Encryption Key zu setzen, loggen Sie sich in der CDB$ROOT oder einer PDB ein. [Benutzer braucht SYSKM Privileg und die Datenbank muss READ WRITE sein].
Syntax
SQL> ADMINISTER KEY MANAGEMENT SET KEY [USING TAG 'tag'] IDENTIFIED BY keystore-password WITH BACKUP USING 'backup_identifier' [CONTAINER=ALL | CURRENT];
Beispiel
SQL> ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY strenggeheim WITH BACKUP USING 'backup MENCKey';
Keystore geändert.
USING TAG 'tag' erlaubt eigene Informationen zu hinterlegen
WITH BACKUP Die Klausel ist bei Passwort-basierten Keystores verpflichtend, sonst kommt es zu nachfolgender Fehlermeldung:
ORA-46631: Backup von Keystore muss angefertigt werden
Oracle legt daraufhin im Keystore-Verzeichnis (/u01/app/oracle/admin/o12c/wallet/) die Backupdatei mit dem gewünschten Namen an.
[root@xxx wallet]# ls
ewallet_2017030114492434_backup MENCKey.p12
ewallet.p12
Verschlüsselung der Daten am Beispiel des TESTTBS Tablespace
SQL> ALTER TABLESPACE testtbs ENCRYPTION ONLINE ENCRYPT file_name_convert = ('/u01/app/oracle/oradata/o12c/testtbs01.dbf',
'/u01/app/oracle/oradata/o12c/testtbs01enc.dbf')
SQL> SELECT ts#, encryptionalg, encryptedts, encryptedkey,
masterkeyid, blocks_encrypted, con_id
FROM v$encrypted_tablespaces;
TS# ENCRYPT ENC ENCRYPTEDKEY MASTERKEYID BLOCKS_ENCRYPTED CON_ID
--- ------- --- ----------------------------------------- -------------------------------- ---------------- -------
7 AES128 YES 7F9968F4FE9287E244CF37D39B2ACDE8 F473DC8689644FA3BF1D7EF3D3412817 12925 1
Das mit Oracle 12.2 neu Einzug erhaltene Feature stellt meiner Meinung nach, eine interessante und einfache Möglichkeit dar, existierende Tablespaces ohne Ausfallzeiten zu verschlüsseln.
Hier geht es zum PDF des Artikels.
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.