====== 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]]