Funcționalitatea Transparent Data Encryption (TDE) face parte din opțiunea Oracle Advanced Security (licențiată ca o componentă separată) și a fost introdusă pentru prima dată în versiunea 10g Release 2 pentru a preveni accesul asupra datelor la nivelul sistemului de operare. Transparent data encryption permite alegerea algoritmului de criptare dintre Triple DES (Data Encryption Standard) cu cheie de 168 bits sau AES (Advanced Encryption Standard) cu cheie de 128, 192 (implicit) sau 256 bits. Pentru a activa opțiunea Oracle Advanced Security este nevoie de Enterprise Edition.
Tablespace encryption extinde această tehnologie oferind posibilitatea de a cripta întreg conținutul unui tablespace.
Pentru criptare avem nevoie de un wallet care poate fi stocat cu ajutorul unui dispozitiv HSM (Hardware Security Module) ori într-un fișier pe file system-ul sistemului de operare iar în acest caz avem software wallet. Prima dată se specifică directorul în care va fi stocată cheia prin editarea fișierului sqlnet.ora din $TNS_ADMIN
ENCRYPTION_WALLET_LOCATION= (SOURCE= (METHOD=FILE) (METHOD_DATA= (DIRECTORY=/opt/oracle/admin/orcl/wallet)))
Dacă avem un dispozitiv HSM atunci se înlocuiește METHOD=FILE cu METHOD=HSM.
In acest moment la interogarea bazei de date putem verifica directorul indicat în sqlnet.ora cat și status-ul wallet-ului:
SQL> select * from v$encryption_wallet; WRL_TYPE WRL_PARAMETER STATUS -------------------- ------------------------------------------------------------ ------------------ file /opt/oracle/admin/orcl/wallet CLOSED
Cu ajutorul următoarei comenzi se va crea și deschide walletul:
SQL> ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY oracle; System altered. $ ls -ltr /opt/oracle/admin/orcl/wallet total 4 -rw-r--r--. 1 oracle oinstall 2845 Mar 21 04:34 ewallet.p12 SQL>select * from v$encryption_wallet;SQL> SQL> WRL_TYPE WRL_PARAMETER STATUS -------------------- ------------------------------------------------------------ ------------------ file /opt/oracle/admin/orcl/wallet OPEN
Acum după ce am creat walletul trebuie creat un nou tablespace care va fi criptat cu cheia generată mai devreme. In versiunea 11g nu există posibilitatea de a converti tablespace-ul prin urmare dacă vrem să criptăm date existente din alt tablespace atunci acestea vor trebui migrate.
SQL> select a.name, b.TS#, b.ENCRYPTEDTS, b.ENCRYPTIONALG from V$TABLESPACE A, V$ENCRYPTED_TABLESPACES B where A.ts# = B.ts#; 2 no rows selected SQL> select dbms_metadata.get_ddl('TABLESPACE','USERS') from dual; DBMS_METADATA.GET_DDL('TABLESPACE','USERS') -------------------------------------------------------------------------------- CREATE TABLESPACE "USERS" DATAFILE '/opt/oracle/oradata/orcl/users01.dbf' SIZE 5242880 AUTOEXTEND ON NEXT 1310720 MAXSIZE 32767M LOGGING ONLINE PERMANENT BLOCKSIZE 8192 EXTENT MANAGEMENT LOCAL AUTOALLOCATE DEFAULT NOCOMPRESS SEGMENT SPACE MANAGEMENT AUTO SQL> select dbms_metadata.get_ddl('TABLESPACE','EXAMPLE') from dual; CREATE TABLESPACE "EXAMPLE" DATAFILE '/opt/oracle/oradata/orcl/example01.dbf' SIZE 104857600 AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M NOLOGGING ONLINE PERMANENT BLOCKSIZE 8192 EXTENT MANAGEMENT LOCAL AUTOALLOCATE DEFAULT NOCOMPRESS SEGMENT SPACE MANAGEMENT AUTO ALTER DATABASE DATAFILE '/opt/oracle/oradata/orcl/example01.dbf' RESIZE 328335360 SQL> CREATE TABLESPACE "ENCRYPTED_USERS" DATAFILE '/opt/oracle/oradata/orcl/encrypted_users01.dbf' SIZE 150M AUTOEXTEND ON NEXT 1310720 MAXSIZE 32767M ENCRYPTION USING 'AES256' DEFAULT STORAGE(ENCRYPT); Tablespace created. SQL> CREATE TABLESPACE "ENCRYPTED_EXAMPLE" DATAFILE '/opt/oracle/oradata/orcl/encrypted_example01.dbf' SIZE 350M AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M ENCRYPTION USING 'AES256' DEFAULT STORAGE(ENCRYPT); Tablespace created. SQL> select a.name, b.TS#, b.ENCRYPTEDTS, b.ENCRYPTIONALG from V$TABLESPACE A, V$ENCRYPTED_TABLESPACES B where A.ts# = B.ts#; 2 NAME TS# ENC ENCRYPT ------------------------------ ---------- --- ------- ENCRYPTED_USERS 7 YES AES256 ENCRYPTED_EXAMPLE 8 YES AES256
Scopul este de a migra toate datele din tablespace-urile ‘USERS’ si ‘EXAMPLE’ în noile tablespace-uri ‘ENCRYPTED_USERS’ și ‘ENCRYPTED_EXAMPLE’
SQL> select distinct owner from dba_segments where tablespace_name in ('USERS','EXAMPLE'); OWNER ------------------------------ HR SCOTT PM OE SH IX 6 rows selected.
Export schemele din cele două tablespace-uri după care le șterg și le import în tablespace-urile criptate:
expdp \"/ as sysdba \" DIRECTORY=DATA_PUMP_DIR DUMPFILE=expdp_scott_oe.dmp LOGFILE=expdp_scott_oe.log SCHEMAS=HR,SCOTT,PM,OE,SH,IX SQL> drop user SCOTT cascade; User dropped. SQL> drop user OE cascade; User dropped. SQL> drop user SH cascade; User dropped. SQL> drop user HR cascade; User dropped. SQL> drop user PM cascade; User dropped. SQL> drop user IX cascade; User dropped. impdp \"/ as sysdba \" DIRECTORY=DATA_PUMP_DIR DUMPFILE=expdp_scott_oe.dmp logfile=impdp_scott_oe.log REMAP_TABLESPACE=USERS:ENCRYPTED_USERS REMAP_TABLESPACE=EXAMPLE:ENCRYPTED_EXAMPLE EXCLUDE=STATISTICS SQL> select distinct tablespace_name from dba_segments; TABLESPACE_NAME ------------------------------ SYSAUX ENCRYPTED_USERS UNDOTBS1 ENCRYPTED_EXAMPLE SYSTEM
In urma interogării de mai sus rezultă că nu mai sunt date în tablespace-urile USERS si EXAMPLE (cele necriptate).
Să verificăm dacă walletul funcționează:
SQL> ALTER SYSTEM SET ENCRYPTION WALLET CLOSE IDENTIFIED BY oracle; System altered. SQL> select count(*) from "SH"."SALES"; select count(*) from "SH"."SALES" * ERROR at line 1: ORA-28365: wallet is not open SQL> ALTER SYSTEM SET ENCRYPTION WALLET open IDENTIFIED BY oracle; System altered. SQL> select count(*) from "SH"."SALES"; COUNT(*) ---------- 918843
La fiecare pornire a bazei de date wallet-ul va trebui deschis. Există câteva restricții de care trebuie ținut cont: tablespace-urile SYSTEM, SYSAUX, UNDO si TEMP nu se pot cripta iar indecșii dacă nu sunt ținuti în tablespace-uri criptate vor returna date chiar dacă wallet-ul este închis.
1 comentariu