Inhaltsverzeichnis
Transparent Database Encryption TDE
11g/12c
1. Regel Niemals den Wallet verlieren! Gut auf einen USB Stick sichern und im Safe lagern!
Einsatz Database Vault
Stichwort: Duties Separation SoD ⇒ see https://en.wikipedia.org/wiki/Separation_of_duties
.. Separation of duties (SoD)(Also known as Segregation of Duties) is the concept of having more than one person required to complete a task. ..
⇒ http://www.oracle.com/technetwork/database/options/database-vault/overview/index.html
Lizenz
Für TDE wird die EE Edition + Oracle Advanced Security Option benötigt!
1. Pfad zur Wallet angeben
in der sqlnet.ora unter dem $ORACLE_HOME/network/admin Pfad zur Wallet angeben
ENCRYPTION_WALLET_LOCATION= (SOURCE=(METHOD=FILE)(METHOD_DATA= (DIRECTORY=/home/oracle/wallet/)))
2. Wallet erzeugen und Passwort setzen
ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY "DASSICHEREPASSWORT"
!Wird das Passwort ohne „“ eingegeben wird das Passwort in Grossbuchstaben angelegt!
3. Beim Start der Datenbank das Wallet öffnen
-- nach dem Start der DB -- Zugriff auf eine Tabelle im verschlüsselten Tablespace FEHLER IN Zeile 1: ORA-28365: Wallet ist nicht geoffnet ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "DASSICHEREPASSWORT"
4. Tablespace verschlüsseln
CREATE TABLESPACE "SECUDATA" DATAFILE '/opt/oracle/oradata/EXEC01/sedudata01.dbf' SIZE 100M AUTOEXTEND ON NEXT 10M MAXSIZE 8000M LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO ENCRYPTION USING 'AES256' DEFAULT STORAGE (ENCRYPT);
Überwachen mit:
sqlplus>SELECT TABLESPACE_NAME,ENCRYPTED FROM dba_tablespaces; Tablespace ENCRYPTED ---------- --- SYSTEM NO SYSAUX NO ..... SECUDATA YES DATA YES
Daten in einer existierenden Tabelle verschlüsseln
Beispiel:
ALTER TABLE scott.emp MODIFY ( ENAME VARCHAR2(10) ENCRYPT);
Die Wallet anschauen
mit dem Befehl mkstore kann die Wallet in der Kommandozeile geöffnet werden:
cd /opt/oracle/wallet mkstore -wrl . -list Enter wallet password: ORACLE.SECURITY.DB.ENCRYPTION.AV7BL7Db2U/tv9IHcRgqyPcAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ORACLE.SECURITY.DB.ENCRYPTION.MASTERKEY ORACLE.SECURITY.ID.ENCRYPTION. ORACLE.SECURITY.KB.ENCRYPTION. #einfacher mkstore -wrl . -viewEntry ORACLE.SECURITY.DB.ENCRYPTION.MASTERKEY ORACLE.SECURITY.DB.ENCRYPTION.MASTERKEY = AV7BL7Db2U/tv9IHcRgqyPcAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Den Master Key in der DB anschauen
Den Master Key findet man in der DB für Tabellen in der enc$, für den Controlfile in der x$kcbdbk, für Tablespaces in der x$kcbtek .
Siehe dazu auch die Node Doc ID 1541818.1 für die SQL's.
Zusammengefasst, inkl. Path zur Wallet:
- wallet.sql
ttitle LEFT "The Path to the Wallet" skip 2 COLUMN WRL_TYPE format a10 heading "WRL|Type" COLUMN WRL_PARAMETER format a20 heading "Wallet|Params" COLUMN STATUS format a10 heading "Status" COLUMN WALLET_TYPE format a10 heading "Wallet|type" COLUMN WALLET_ORDER format a9 heading "Status" COLUMN FULLY_BACKED_UP format a9 heading "Backup" COLUMN CON_ID format 999 heading "Con|ID" COLUMN inst_id format 999 heading "Inst|ID" SELECT inst_id , WRL_TYPE ,WRL_PARAMETER ,STATUS ,WALLET_TYPE ,WALLET_ORDER ,FULLY_BACKED_UP ,CON_ID FROM gv$encryption_wallet / COLUMN name format a40 COLUMN masterkeyid_base64 format a60 ttitle LEFT "Get the Master Key for Tablespaces" skip 2 SELECT name ,utl_raw.cast_to_varchar2( utl_encode.base64_encode('01'||substr(mkeyid,1,4))) || utl_raw.cast_to_varchar2( utl_encode.base64_encode(substr(mkeyid,5,LENGTH(mkeyid)))) masterkeyid_base64 FROM (SELECT t.name, RAWTOHEX(x.mkid) mkeyid FROM v$tablespace t , x$kcbtek x WHERE t.ts#=x.ts#) / ttitle LEFT "Get the Master Key for the Controlfile" skip 2 SELECT utl_raw.cast_to_varchar2( utl_encode.base64_encode('01'||substr(mkeyid,1,4))) || utl_raw.cast_to_varchar2( utl_encode.base64_encode(substr(mkeyid,5,LENGTH(mkeyid)))) masterkeyid_base64 FROM (SELECT RAWTOHEX(mkid) mkeyid FROM x$kcbdbk) / ttitle LEFT "Get the Master Key for Tables" skip 2 SELECT mkeyid FROM enc$; ttitle LEFT "Witch Columns are encrypted?" skip 2 COLUMN owner format a15 heading "Owner" COLUMN TABLE_NAME format a15 heading "Table|Name" COLUMN column_name format a15 heading "Column|Name" COLUMN ENCRYPTION_ALG format a35 heading "Encryption|Algo" SELECT owner ,TABLE_NAME ,column_name ,ENCRYPTION_ALG FROM dba_encrypted_columns / ttitle off
Backup verschlüssen
Um nun nur das Backup zu verschlüsseln, muss nur der Parameter „CONFIGURE ENCRYPTION FOR DATABASE“ auf ON gesetzt werden.
CONFIGURE ENCRYPTION FOR DATABASE ON;
Alle nun folgenden Backups werden verschlüsselt.
Wallet geht verloren
Um ein Backup wieder einzuspielen, muss die Wallet mit dem richtigen Passwort geöffnet werden.
Aber wass passiert wenn die Wallet verloren geht?
Entsteht dadurch ein neuer Masterkey?
Neuanlegen einer Wallet mit 12c
Wallet löschen und neu anlegen mit dem alten Passwort
sqlplus>shutdown IMMEDIATE cd /home/oracle/wallet rm * sqlplus>startup sqlplus>ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY "DASSICHEREPASSWORT"; ERROR at line 1: ORA-28374: typed master KEY NOT found IN wallet ???? sqlplus>startup force sqlplus>ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "DASSICHEREPASSWORT"; System altered.
Wallet wird angelegt und kann beim nächsten Start auch wieder mit dem obigen Passwort geöffent werden
Hat sich der Key verändert? testen:
mkstore -wrl . -viewEntry ORACLE.SECURITY.DB.ENCRYPTION.MASTERKEY Enter wallet password: ORACLE.SECURITY.DB.ENCRYPTION.MASTERKEY = AZAZUSZj3k/kv8XeJcT4ZdMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Der alte Key war „AV7BL7Db2U/tv9IHcRgqyPcAAAAAAAAAAAAAAAAAAAAAAAAAAAAA“, damit ist der Schlüssel für die Verschlüsselung wohl weg .-( .
Das alte Backup kann dann aber NICHT mehr wiederhergestellt werden, RMAN funktioniert und kann die Wallet öffnen, aber:
ORA-19913: unable TO decrypt backup
Quellen
Support:
11g
- NOTE:1240824.1 - The Impact of the Sqlnet Settings on Database Security (sqlnet.ora Security Parameters and Wallet Location)
- Step by Step Troubleshooting Guide for TDE Error ORA-28374 (Doc ID 1541818.1)
12c
- Getting Started With Transparent Data Encryption in Oracle 12c (non pluggable database ) (Doc ID 1964158.1)
Oracle:
Netz:
Interessante Links zum Thema: Intel-Securing the Enterprise with Intel AES-NI