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.

Lasă un răspuns

Completează mai jos detaliile tale sau dă clic pe un icon pentru a te autentifica:

Logo WordPress.com

Comentezi folosind contul tău WordPress.com. Dezautentificare / Schimbă )

Poză Twitter

Comentezi folosind contul tău Twitter. Dezautentificare / Schimbă )

Fotografie Facebook

Comentezi folosind contul tău Facebook. Dezautentificare / Schimbă )

Fotografie Google+

Comentezi folosind contul tău Google+. Dezautentificare / Schimbă )

Conectare la %s