Transparent Data Encryption (TDE)

02.
Juli
2012
Veröffentlicht von: Stefan Hartsberger

Um Ihnen den Einstieg in die Spaltenverschlüsselung mit der Advanced Security Option (ASO) zu erleichtern, zeige ich Ihnen die wichtigsten Schritte an einem Beispiel.
Folgendes Beispiel bezieht sich auf eine Oracle 10.2.0.5 Enterprise Edition Datenbank.

Um Ihnen den Einstieg in die Spaltenverschlüsselung mit der Advanced Security Option (ASO) zu erleichtern, zeige ich Ihnen die wichtigsten Schritte an einem Beispiel.
Folgendes Beispiel bezieht sich auf eine Oracle 10.2.0.5 Enterprise Edition Datenbank.


Vorbereitungen:

In diesen Verzeichnissen wird der Wallet bzw. dessen Backups gespeichert.

cd /etc
mkdir -pv /etc/oracle/wallets/TEST_DB/backup
chown -R oracle:oinstall oracle
chmod -R 700 oracle


Damit die Datenbank den Wallet findet, tragen wir in der SQLNET.ORA Datei folgendes ein:

ENCRYPTION_WALLET_LOCATION =
 (SOURCE = (METHOD = FILE)
  (METHOD_DATA =
   (DIRECTORY = /etc/oracle/wallets/TEST_DB)))


Wir überprüfen, ob die Datenbank den neuen Pfad bereits angenommen hat:

SQL> select * from v$encryption_wallet;

WRL_TYPE
--------------------
WRL_PARAMETER
--------------------------------------------------------------------------------
STATUS
---------
file
/etc/oracle/wallets/TEST_DB
CLOSED


Encryption Wallet erstellen:

Wir wechseln in das Wallet Verzeichnis, verbinden uns mit der Datenbank und erstellen den ersten Encryption Wallet:

cd /etc/oracle/wallets/TEST_DB
SQL> alter system set encryption key identified by "strongpassword";

System altered.

Überprüfung:

SQL> select * from v$encryption_wallet;

WRL_TYPE
--------------------
WRL_PARAMETER
--------------------------------------------------------------------------------
STATUS
---------
file
/etc/oracle/wallets/TEST_DB
OPEN

/etc/oracle/wallets/TEST_DB> ls -la
total 16
drwx------ 3 oracle oinstall 4096 Jun 15 13:59 .
drwx------ 5 oracle oinstall 4096 Jun 12 09:01 ..
drwx------ 2 oracle oinstall 4096 Jun 15 13:55 backup
-rw------- 1 oracle oinstall 1309 Jun 15 13:59 ewallet.p12


Der Wallet wurde im gewünschten Verzeichnis angelegt und beim Erstellen sofort geöffnet.
Bei der jetzigen Konfiguration muss der Wallet jedes Mal manuell geöffnet werden, nachdem er geschlossen wurde. Dies geschieht zum Beispiel beim Herunterfahren der Datenbank. Somit wären die verschlüsselten Daten nach einem nächtlichen Ausfall der Datenbank erst dann wieder verfügbar, wenn am nächsten Tag ein DBA, welcher das Wallet Passwort kennt, den Wallet mit folgendem Befehl wieder öffnet:

SQL> alter system set encryption wallet open identified by "strongpassword";

 

Auto-Open Wallet:

Wir möchten aber, dass sich der Wallet automatisch öffnet.
Dazu erweitern wir den bereits erstellten Wallet folgendermaßen:

/etc/oracle/wallets/TEST_DB> mkstore -wrl "." -createSSO
Enter wallet password:

/etc/oracle/wallets/TEST_DB> ls -la
total 20
drwx------ 3 oracle oinstall 4096 Jun 15 14:00 .
drwx------ 5 oracle oinstall 4096 Jun 12 09:01 ..
drwx------ 2 oracle oinstall 4096 Jun 15 13:55 backup
-rw------- 1 oracle oinstall 1338 Jun 15 14:00 cwallet.sso
-rw------- 1 oracle oinstall 1309 Jun 15 13:59 ewallet.p12

Eine weitere Datei namens "cwallet.sso" wurde erstellt.

Die Auto-Logon Funktion werden wir zusammen mit der Verschlüsselung der Daten später testen.

Den Inhalt unseres Wallets können wir uns mit folgendem Befehl anzeigen lassen:

/etc/oracle/wallets/TEST_DB> mkstore -wrl "." -list
Enter wallet password:

Oracle Secret Store entries:
ORACLE.SECURITY.DB.ENCRYPTION.AdRAQmjJKU+Pv/F/vkWJD5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
ORACLE.SECURITY.DB.ENCRYPTION.MASTERKEY


Sicherheitshalber sollten die Berechtigungen (erneut) beschränkt werden:

cd /etc/oracle/wallets/TEST_DB
chmod 600 *wallet*


Backup:

Das Wichtigste ist das Backup.
Wenn man den Wallet löscht und nicht wiederherstellen kann, ist es nicht mehr möglich, auf dieser Datenbank TDE einzusetzen!
Ich habe das leider auf meiner Testdatenbank schmerzhaft erfahren müssen.
Grundsätzlich gilt, den Wallet beim Erstellen und jeweils vor und nach jeder Änderung zu sichern. (z. B. Wallet Passwort ändern, Master Key ändern)

/etc/oracle/wallets/TEST_DB> cp *wallet* backup/
/etc/oracle/wallets/TEST_DB> ls -la backup
total 16
drwx------ 2 oracle oinstall 4096 Jun 15 14:03 .
drwx------ 4 oracle oinstall 4096 Jun 15 14:02 ..
-rw------- 1 oracle oinstall 1338 Jun 15 14:03 cwallet.sso
-rw------- 1 oracle oinstall 1309 Jun 15 14:03 ewallet.p12

 

Master Key erneuern:

Nachdem wir uns eine Sicherungskopie des Wallets erstellt haben, können wir das Ändern des Master Keys testen:

SQL> alter system set encryption key identified by "strongpassword";

System altered.

/etc/oracle/wallets/TEST_DB> ls -la
total 24
drwx------ 4 oracle oinstall 4096 Jun 15 14:02 .
drwx------ 5 oracle oinstall 4096 Jun 12 09:01 ..
drwx------ 2 oracle oinstall 4096 Jun 15 14:03 backup
-rw------- 1 oracle oinstall 1601 Jun 15 14:05 cwallet.sso
-rw------- 1 oracle oinstall 1573 Jun 15 14:05 ewallet.p12


Der neue Zeitstempel zeigt uns, dass Änderungen am Wallet durchgeführt wurden. Das schauen wir uns im Detail an mit:

/etc/oracle/wallets/TEST_DB> mkstore -wrl "." -list
Enter wallet password:
Oracle Secret Store entries:
ORACLE.SECURITY.DB.ENCRYPTION.AdRAQmjJKU+Pv/F/vkWJD5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
ORACLE.SECURITY.DB.ENCRYPTION.AWhidD3Mik+uv63fdtNhu1sAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
ORACLE.SECURITY.DB.ENCRYPTION.MASTERKEY


Im Vergleich zu dem vorherigen Output dieses Befehls ist nun eine weitere Zeile vorhanden. Diese kommt vom neuen Master Key.
Normalerweise sollte man nun testen, ob die verschlüsselten Daten weiterhin wie gewohnt entschlüsselt werden können. In unserem Test haben wir jedoch noch nichts verschlüsselt.


Backup:

Nachdem die Entschlüsselung funktioniert, wird der aktuelle Wallet auch gesichert:

/etc/oracle/wallets/TEST_DB> cp cwallet.sso backup/cwallet.sso_2
/etc/oracle/wallets/TEST_DB> cp ewallet.p12 backup/ewallet.p12_2

 

Daten verschlüsseln:

Das Verschlüsseln der Daten erfolgt über die jeweiligen Spalten.
Ich habe in meiner Test-Datenbank eine Tabelle mit folgendem Inhalt angelegt:

SQL> select * from test.emp;

VORNAME
-----------------------------------------------------------
NACHNAME
--------------------------------------------------
Stefan
Hartsberger


Zum nachträglichen Verschlüsseln bestehender Spalten modifiziert man die Tabelle wie folgt:

SQL> alter table test.emp modify (NACHNAME encrypt);

Table altered.


Der Inhalt der Spalte ist nach wie vor abrufbar:

SQL> select * from test.emp;

VORNAME
-----------------------------------------------------------
NACHNAME
--------------------------------------------------
Stefan
Hartsberger


Nun schließen wir den Wallet manuell um die Auswirkungen zu sehen:

SQL> alter system set encryption wallet close;

System altered.

SQL> select * from v$encryption_wallet;

WRL_TYPE
--------------------
WRL_PARAMETER
--------------------------------------------------------------------------------
STATUS
---------
file
/etc/oracle/wallets/$ORACLE_SID
CLOSED

Der Wallet ist nun geschlossen.

Ein erneutes Selektieren der verschlüsselten Spalte führt dazu, dass der Wallet automatisch wieder geöffnet wird.

SQL>  select * from test.emp;

VORNAME
-----------------------------------------------------------
NACHNAME
--------------------------------------------------
Stefan
Hartsberger


SQL> select * from v$encryption_wallet;

WRL_TYPE
--------------------
WRL_PARAMETER
--------------------------------------------------------------------------------
STATUS
---------
file
/etc/oracle/wallets/$ORACLE_SID
OPEN


Hätten wir die Auto-Logon Option nicht aktiviert, würden wir diese Fehlermeldung bekommen:

SQL> select * from test.emp;
select * from test.emp
                     *
ERROR at line 1:
ORA-28365: wallet is not open


Dann müssten wir den Wallet manuell öffnen:

SQL> alter system set encryption wallet open identified by "strongpassword";
System altered.

SQL>  select * from test.emp;
VORNAME
-----------------------------------------------------------
NACHNAME
--------------------------------------------------
Stefan
Hartsberger

 

Fazit:

Wer sich jetzt denkt, dass die Auto-Logon Funktion des Wallets die Sicherheit komplett aushebelt, muss folgendes Bedenken:
Die Datei-Berechtigungen der Wallets wurden beschränkt. Änderungen am Wallet können nur von dem "oracle" User selbst durchgeführt werden.

Wichtig:

Man darf jedoch nie den Auto-Logon Wallet zusammen mit dem Backup der Datenbank auf dasselbe Gerät speichern. Sonst wären sozusagen das Schloss und der Schlüssel am selben Ort, damit hätte man zum Beispiel keine Sicherheit bei gestohlenen Tapes.

DBA Wallet Security

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.