Tipps und Tricks zum Umgang mit Oracle Wallets in Multitenant Umgebungen
Wenn man Objekte in einer Datenbank verschlüsseln will benötigt man ein Wallet, in welchem die entsprechenden KEYs verwaltet werden. Neben der Möglichkeit die Oracle Wallets „manuell“ (mit SQL Befehl) zu öffnen, gibt es seitens Oracle auch eine sogenannten „Auto Login“ Funktionalität, um das Wallet zu öffnen - allerdings nur Read Only (was für viele Tätigkeiten wie Clonen einer PDB nicht ausreicht).
Beim manuellen Weg ist es wichtig, dass der DBA das dafür nötige Passwort NICHT kennt und somit eine Abhängigkeit zum Securityverantworlichen entsteht.
Aus Verfügbarkeitsgründen entscheiden sich die meisten für aus Autologin Wallet, da in diesem Fall die Datenbank ohne dem Wallet Passwort (somit ohne dem Securityverantwortlichen) gestartet werden kann.
Eigenheiten im Umgang mit Oracle Wallets in Multitanten Umgebungen
Wenn eine PDB kopiert/geklont wird, muss ein neuer Key für diese PDB erzeugt und im Wallet abgespeichert werden – das ist aber nicht möglich, wenn das Wallet mittels Auto Login nur Read Only geöffnet ist. Aus diesem Grund sollte man sich bei dieser Kombination für die "manuelle" Variante entscheiden - mit einem Autologin Wallet könnte man solche Tätigkeiten nur in einer Downtime durchführen.
Wenn man Point in Time Recovery für eine PDB (oder einen Tablespace/Table) durchführen möchte, wird dabei automatisiert eine Kopie einer PDB erzeugt, die lediglich lesenden Zugriff auf den Key des Originals braucht (um die Daten bereitstellen zu können).
Diese Funktionalität benötigt somit zwingend ein Auto Login Wallet !!!
Ablauf des Point in Time Recovery anhand eines Beispiels
Restore/Recover PDBs (incomplete)
Voraussetzung:
Temporär ein AUTOLOGIN Wallet dafür anlegen (wird erst nach einem Restart der CDB verwendet)
ADMINISTER KEY MANAGEMENT CREATE AUTO_LOGIN KEYSTORE FROM KEYSTORE '/u01/app/oracle/admin/orcl/wallet' IDENTIFIED by $$$$;
temporäre sqlnet.ora erstellen und TNSADMIN in der aktuellen Session setzen
Grund:
Beim PDB Incomplete Recovery wird ein Clone Container erstellt und da man normalerweise in der sqlnet.ora bei der Wallet Location unter anderem $ORACLE_SID drin stehen hat, wird das Wallet nicht gefunden. Als Workaround wir der komplette Pfad temporär in der Session eingetragen.
vi /temp/orcl_sqlnet/sqlnet.ora
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
SQLNET.EXPIRE_TIME=10
ENCRYPTION_WALLET_LOCATION=
(SOURCE=
(METHOD=FILE)
(METHOD_DATA=
(DIRECTORY=/u01/app/oracle/admin/orcl/wallet)))
export TNS_ADMIN=/temp/orcl_sqlnet
Im nächsten Schritt das Point in Time Recovery durchführen
rman target /
ALTER PLUGGABLE DATABASE orcl CLOSE;
RUN {
SET UNTIL TIME "TO_DATE('24-10-2016 23:00:00','DD-MM-YYYY HH24:MI:SS')";
RESTORE PLUGGABLE DATABASE orcl;
RECOVER PLUGGABLE DATABASE orcl;
}
ALTER PLUGGABLE DATABASE orcl OPEN RESETLOGS;
Jetzt muss man das temporäre AUTOLOGIN Wallet wieder löschen:
rm /u01/app/oracle/admin/orcl/wallet/*.sso
Wallet manuell öffnen:
alter session set container=orcl;
administer key management set keystore open identified by $$$$;
Wichtiger Sicherheitshinweis
Damit es keine Diskussionen gibt, darf der DBA das Passwort für das Wallet nicht kennen! Dieses Passwort muss vom Sicherheitsbeauftragten der Firma jeweils eingegeben werden!