====== 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:
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
Geht die Wallet verloren, ist das Backup wertlos, auch wenn das Passwort der Wallet bekannt ist!
----
===== 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:
* http://www.oracle.com/technetwork/database/security/tde-faq-093689.html#A12015
* http://www.oracle.com/technetwork/database/options/advanced-security/overview/advanced-security-tde-faq-2995212.pdf
* http://www.oracle.com/global/de/community/dbadmin/tipps/tde/index.html
* http://www.oracle.com/technology/obe/10gr2_db_vmware/security/tde/tde.htm
Netz:
* http://www.toadworld.com/platforms/oracle/w/wiki/11140.oracle-database-12c-transparent-data-encryption-tde-and-the-world-of-multitenant-database
Interessante Links zum Thema:
[[http://www.intel.com/Assets/en_US/PDF/whitepaper/323587.pdf|Intel-Securing the Enterprise with Intel AES-NI]]