11g/12c
1. Regel Niemals den Wallet verlieren! Gut auf einen USB Stick sichern und im Safe lagern!
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
Für TDE wird die EE Edition + Oracle Advanced Security Option benötigt!
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/)))
ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY "DASSICHEREPASSWORT"
!Wird das Passwort ohne „“ eingegeben wird das Passwort in Grossbuchstaben angelegt!
-- 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"
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
Beispiel:
ALTER TABLE scott.emp MODIFY ( ENAME VARCHAR2(10) ENCRYPT);
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 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
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.
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?
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
Support:
11g
12c
Oracle:
Netz:
Interessante Links zum Thema: Intel-Securing the Enterprise with Intel AES-NI