Freitag, 22.06.2018

18c: Keystore pro Pluggable-Database

Keystores werden zur sicheren Speicherung von Krypto-Schlüsseln jeglicher Art verwendet. Auch die Oracle Datenbank verwendet einen Keystore zur Speicherung des externen Schlüssels, sobald Transparent Data Encryption (TDE) zum Verschlüsseln der Oracle Datenbank verwendet wird. Neben der Speicherung des TDE Master Keys, werden weitere Keystores von der Oracle Datenbank verwendet - zum Beispiel zur Speicherung von Passwörtern, Zertifikaten und anderen „Geheimnissen“. Als Standard-Keystore wird das Oracle Wallet verwendet. Bisher war es so, dass jede verschlüsselte Datenbank einen dedizierten Keystore verwenden musste. Das galt auch für eine Multitenant-Umgebung, in der jede Pluggable Database (PDB) den gemeinsamen Keystore der Container Database (CDB) benutzte. Das widersprach der strikten Trennung zwischen den PDBs untereinander aber auch zwischen der CDB und den PDBs. Es war also nicht möglich, dass ein PDB Administrator beziehungsweise der Mandant über seinen eigenen Keystore verfügte. Dabei ist der Zugriff auf Krypto-Schlüssel die "Achillessehne der Datensicherheit".

Derjenige der Zugriff auf die Schlüssel hat, hat auch Zugriff auf die Daten. Mit der Oracle Datenbank 18c wird diese Problematik nun gelöst: Jede PDB kann ihren eigenen Keystore besitzen. Das Feature - Keystore for Each Pluggable Database- ermöglicht es in einer Multitenant-Umgebung, dass jede PDB einen eigenen Keystore verwenden kann. Wird diese Eigenschaft genutzt, erhalten die Administratoren der PDB die volle alleinige Kontrolle über ihren Keystore. Hieraus folgt aber auch Verantwortung: Sollte der PDB Administrator zum Beispiel das Passwort seines Keystores vergessen, gibt es niemanden mehr, der ihm helfen kann.

Um das Feature zu verwenden, wurden zwei neue Parameter und Keystore-Eigenschaften eingeführt, die in den folgenden Abschnitten erklärt werden.

Datenbank Initialisierungsparameter WALLET_ROOT

Mit der 18c wurde der Datenbank-Initialisierungsparameter WALLET_ROOT eingeführt. Dieser Parameter ersetzt den SQLNET.ORA Parameter SQLNET.ENCRYPTION_WALLET_LOCATION, der ab 18c abgekündigt wurde, aber natürlich weiterhin noch eine gewisse Zeit lang funktioniert. Ist der Parameter nicht gesetzt, bezieht die Datenbank das Wallet-Verzeichnis weiterhin über den SQLNET.ENCRYPTION_WALLET_LOCATION Parameter aus der SQLNET.ORA. WALLET_ROOT wird in der CDB gesetzt. Der Parameter beschreibt das Keystore-Basis-Verzeichnis aller der CDB zugeordneten PDBs. Darauf aufbauend, dient die eindeutige -PDB-GUID- als weiteres Verzeichnis zur Trennung der Keystores.

Struktur: /wallet-root/pdb-guid/tde

wallet-root/tde/ewallet.p12
wallet-root/tde/ewallet_2016120918333644.p12
wallet-root/3FD1C95B48205D0FE053C5A0E40AEF8C/tde/ewallet.p12
wallet-root/3FD1C95B48205D0FE053C5A0E40AEF8C/tde/ewallet_2016110918331622.p12
wallet-root/3FD1C95B48205D0FE053C5A0E40AEF8C/tde/ewallet_2016110918332363.p12

Natürlich steht der Parameter WALLET_ROOT auch in der klassischen Oracle Datenbank Betriebsart der sogenannten NON-CDB zur Verfügung. Im Standard ist der Parameter nicht gesetzt und es handelt sich um einen statischen Parameter. Demzufolge muss die Datenbank nach dem Setzen neu gestartet werden.

Im folgenden Beispiel verwende ich das Verzeichnis „/home/oracle/keystore_root“ als Keystore-Basis-Verzeichnis. Für das Beispiel wurde ein Oracle Database Cloud Service Enterprise Edition verwendet.

[oracle@TDE cdb1]$ sqlplus / as sysdba

SQL*Plus: Release 18.0.0.0.0 Production on Thu Apr 5 12:32:16 2018
Version 18.1.0.0.0

Copyright (c) 1982, 2017, Oracle.  All rights reserved.


Connected to:
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
Version 18.1.0.0.0

SQL> ALTER SYSTEM SET WALLET_ROOT="/home/oracle/keystore_root" SCOPE=SPFILE;

System altered.

SQL> SHUTDOWN IMMEDIATE;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> STARTUP
ORACLE instance started.

Total System Global Area 4280905608 bytes
Fixed Size		    8904584 bytes
Variable Size		 2332033024 bytes
Database Buffers	 1593835520 bytes
Redo Buffers		  346132480 bytes
Database mounted.
Database opened.
SQL> show parameter wallet

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
wallet_root			     string	 /home/oracle/keystore_root
SQL>

Datenbank Initialisierungsparameter TDE_CONFIGURATION

Zudem wurde der Datenbank-Initialisierungsparameter TDE_CONFIGURATION eingeführt.

HINWEIS: Dieser Parameter kann nur in einer Oracle Database Enterprise Edition auf Engineered Systems und ab Oracle Database Cloud Service Enterprise Edition aufwärts verwendet werden.

Bevor dieser Parameter gesetzt werden kann, muss das Keystore-Basis-Verzeichnis mittels WALLET_ROOT Parameter gesetzt sein.

TDE_CONFIGURATION sorgt dafür, dass die PDBs wissen, welche Art von Keystore verwendet werden soll.

    Zur Auswahl stehen folgende Typen von Keystores:
  • FILE: das klassische Wallet
  • HSM: Hardware Security Modul
  • OKV: Oracle Key Vault

Gesetzt wird dieser Parameter sowohl in der CDB als auch in jeder PDB. Das folgende Beispiel verwendet den Keystore-Typ FILE, also ein Wallet als Keystore:

SQL> ALTER SYSTEM SET TDE_CONFIGURATION="KEYSTORE_CONFIGURATION=FILE" SCOPE=both;

System altered.


SQL> SHOW PARAMETER TDE_CONFIGURATION

NAME				     TYPE			       VALUE
------------------------------------ --------------------------------- ------------------------------
tde_configuration		     string			       KEYSTORE_CONFIGURATION=FILE

Bei einer Multitenant-Umgebung mit zwei Pluggable-Databases PDB1 und PDB2 (ohne PDB$SEED) sieht es nun wie folgt aus.

SQL> show pdbs

    CON_ID CON_NAME			  OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
	 2 PDB$SEED			  READ ONLY  NO
	 3 PDB1 			  READ WRITE NO
	 4 PDB2 			  READ WRITE NO

SQL> SELECT CON_ID, KEYSTORE_MODE, WRL_PARAMETER, WRL_TYPE, STATUS FROM V$ENCRYPTION_WALLET;

    CON_ID KEYSTORE WRL_PARAMETER			WRL_TYPE	STATUS
---------- -------- --------------------------------- 	--------------- ------------------------------
	 1 NONE     				      	FILE		CLOSED
	 2 UNITED					FILE	 	CLOSED
	 3 UNITED					FILE		CLOSED
	 4 UNITED					FILE		CLOSED 


Die CDB-Root (CON_ID 1) befindet sich zu diesem Zeitpunkt immer im Keystore Modus NONE, und alle weiteren PDBs (CON_ID 3 und 4), inklusive der PDB$SEED (CON_ID 2), sind standardmäßig auf UNITED festgelegt. Die Einstellung UNITED bedeutet, dass momentan alle PDBs einen gemeinsamen Keystore verwenden. Dies ist die Standardeinstellung.

Neu mit 18c ist auch, dass zwei Betriebsvarianten der Keystores möglich sind: Ein United-Modus und ein Isolation-Modus. Im United-Modus, werden alle TDE-Master-Keys wie gewohnt in einem der CDB zugeordneten Keystore gespeichert. Im Isolation Modus hingegen erhält jede PDB einen eigenen Keystore. Der entscheidende Vorteil ist hier, dass ausschließlich der Administrator der PDB das Passwort des Keystores kennt. Wird der Keystore im United Modus für die PDBs verwendet, hat der CDB Administrator im Gegensatz dazu Zugriff auf alle dort gespeicherten TDE Master-Keys.

Um jetzt einzelne PDBs in den Keystore-Isolations-Modus zu bringen ist es notwendig, den bereits beschriebenen Parameter TDE_CONFIGURATION in den entsprechenden PDBs zu setzen.

SQL> alter session set container=pdb1;

Session altered.

SQL> set linesize 1000
SQL> col WRL_PARAMETER FORMAT A70
SQL> col WRL_TYPE FORMAT A15

SQL> SELECT KEYSTORE_MODE, WRL_PARAMETER, WRL_TYPE, STATUS FROM V$ENCRYPTION_WALLET;

KEYSTORE WRL_PARAMETER							      	WRL_TYPE	STATUS
-------- ---------------------------------------------------------------------- -------------	--------------- 
UNITED										FILE		OPEN_NO_MASTER_KEY

SQL> ALTER SYSTEM SET TDE_CONFIGURATION="KEYSTORE_CONFIGURATION=FILE" SCOPE=both;

System altered.

SQL> SELECT KEYSTORE_MODE, WRL_PARAMETER, WRL_TYPE, STATUS FROM V$ENCRYPTION_WALLET;

KEYSTORE WRL_PARAMETER							      	WRL_TYPE	STATUS
-------- ---------------------------------------------------------------------- -------------	--------------- 
ISOLATED /home/oracle/keystore_root/691A1250F7C14EB5E0530201000A7EA2/tde/	FILE		NOT_AVAILABLE


SQL> ADMINISTER KEY MANAGEMENT CREATE KEYSTORE IDENTIFIED BY welcome2;

keystore altered.

SQL> SELECT KEYSTORE_MODE, WRL_PARAMETER, WRL_TYPE, STATUS FROM V$ENCRYPTION_WALLET;

KEYSTORE WRL_PARAMETER							      	WRL_TYPE	STATUS
-------- ---------------------------------------------------------------------- -------------	--------------- 
ISOLATED /home/oracle/keystore_root/691A1250F7C14EB5E0530201000A7EA2/tde/	FILE		OPEN_NO_MASTER_KEY

SQL> ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY "welcome2" WITH BACKUP;

keystore altered.

SQL> SELECT KEYSTORE_MODE, WRL_PARAMETER, WRL_TYPE, STATUS FROM V$ENCRYPTION_WALLET; 

KEYSTORE WRL_PARAMETER							      	WRL_TYPE	STATUS
-------- ---------------------------------------------------------------------- -------------	--------------- 
ISOLATED /home/oracle/keystore_root/691A1250F7C14EB5E0530201000A7EA2/tde/	FILE		OPEN


SQL>

Dies kann bei Bedarf auf anderen PDBs angewandt werden. Es besteht die Möglichkeit, für jede PDB individuell einen anderen Keystore-Typ zu verwenden.

SQL> set linesize 1000
SQL> col WRL_PARAMETER FORMAT A70
SQL> col WRL_TYPE FORMAT A15
SQL> SELECT KEYSTORE_MODE, WRL_PARAMETER, WRL_TYPE, STATUS FROM V$ENCRYPTION_WALLET; 

KEYSTORE WRL_PARAMETER							      	WRL_TYPE	STATUS
-------- ---------------------------------------------------------------------- -------------	--------------- 
NONE	 /home/oracle/keystore_root/tde/					FILE	      	OPEN
UNITED										FILE	      	OPEN
ISOLATED /home/oracle/keystore_root/691A1250F7C14EB5E0530201000A7EA2/tde/    	FILE	      	OPEN
ISOLATED /home/oracle/keystore_root/691A836C2EB06E3AE0530201000AA91E/tde/	FILE	      	OPEN

SQL>

Wie hier zu sehen ist, besitzt jetzt jede PDB ihren eigenen isolierten file-basierenden Keystore.

Im Filesystem sieht das Ganze dann so aus.

[oracle@tde keystore_root]$ pwd
/home/oracle/keystore_root
[oracle@tde keystore_root]$ ll
total 12
drwxr-x--- 3 oracle oinstall 4096  5. Apr 12:47 691A1250F7C14EB5E0530201000A7EA2
drwxr-x--- 3 oracle oinstall 4096  5. Apr 13:04 691A836C2EB06E3AE0530201000AA91E
drwxr-x--- 2 oracle oinstall 4096  5. Apr 13:20 tde
[oracle@tde keystore_root]$

Fazit

Dieses Feature ist ein konsequenter und wichtiger Schritt in Richtung Mandantenfähigkeit. Es erweitert die Fähigkeiten zur Isolierung von PDBs bezüglich des Schlüsselmanagements und ermöglicht dem Mandanten somit eine bessere Zugriffskontrolle auf seine Daten.

Lizenzhinweis

Dieser Parameter kann nur in einer Oracle Database Enterprise Edition auf Engineered Systems und ab Oracle Database Cloud Service Enterprise Edition aufwärts verwendet werden. Licensing Information User Manual

 
Verfügbarkeit und Download

Weitere Informationen

 

Zurück zur Community-Seite
 

Visit the Oracle Blog

 

Contact Us

Oracle

Integrated Cloud Applications & Platform Services