TDE Tablespace Live Conversion

27.
September
2017
Veröffentlicht von: Roland Zerfass

Mit steigender Anzahl von Anwendungen, die eine 24/7-Verfügbarkeit erfordern, wird die Minimierung von Ausfallzeiten ein immer wichtigeres Anliegen. Auch Datenbanken in der Oracle Cloud verlangen, dass Produktionsdatenbanken mit Oracle Advanced Security Transparent Data Encryption (TDE) verschlüsselt werden. In diesem Artikel werden einige Aspekte betrachtet, die die neue Funktionalität der Tablespace Live Verschlüsselung mit Zero Downtime aufzeigen. Sie ist damit ein äußerst effektives Mittel zur Reduzierung von Ausfallzeiten.

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.).

Voraussetzungen zur Verwendung der TDE-Tablespace-Verschlüsselung

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.

Schritt für Schritt zur TDE Tablespace Live Conversion

  1. Legen Sie das Keystore-Verzeichnis in der SQLNET.ORA Datei fest
  2. Erzeugen Sie den Software-Keystore
  3. Öffnen Sie den Software-Keystore
  4. Setzen Sie den Software-TDE- Master-Encryption Key
  5. Verschlüsseln Sie Ihre Daten

Schritt 1.

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)))

Schritt 2.

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

Schritt 3.

Ö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

Schritt 4.

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

Schritt 5.

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.

Initiates file downloadHier geht es zum PDF des Artikels.

Jede Menge Know-how für Sie!

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.