Benutzer-Werkzeuge

Webseiten-Werkzeuge


sec:oracle_tde

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
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:

Netz:

Interessante Links zum Thema: Intel-Securing the Enterprise with Intel AES-NI

Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
sec/oracle_tde.txt · Zuletzt geändert: 2018/07/08 15:48 von gpipperr