Criptografia de Tablespace (Tablespace Encryption)
No artigo de hoje falarei sobre criptografia de tablespace.
A definição da palavra criptografia é o estudo dos princípios e técnicas pelas quais a informação pode ser transformada da sua forma original para outra ilegível, de forma que possa ser conhecida apenas por seu destinatário (detentor da “chave secreta”), o que a torna difícil de ser lida por alguém não autorizado. Assim sendo, só o receptor da mensagem pode ver a informação com facilidade.
O conceito é o mesmo para o banco de dados Oracle, entretanto, antes de explorar o tema proposto explicarei o conceito de tablespace.
As tablespaces são estruturas lógicas que armazenam dados no banco de dados. O Oracle é composto por duas estruturas que armazenam dados no banco de dados: estrutura física e estrutura lógica.
Estrutura física é o conjunto de um ou mais arquivos físicos mantidos no servidor de banco de dados. Estes arquivos são chamados de arquivos de dados (em inglês, datafiles).
Estrutura lógica são tablespaces, extensões, segmentos e bloco de dados. Os dados da estrutura lógica são armazenados em arquivos de dados em disco.
Por exemplo, ao executar o comando INSERT e depois COMMIT, estas informações são armazenadas em tablespaces (estrutura lógica) que por sua vez são mantidas no arquivo de dados (estrutura física).
Os tipos de dados que podem ser mantidos nas tablespaces são tabelas, índices, visões, funções, pacotes PL/SQL, procedimentos, entre outros.
TDE (Transparent Data Encryption)
O recurso de criptografia de dados transparente (TDE) surgiu com o Oracle Database 10gr2. Este recurso criptografa os dados (geralmente, confidenciais) armazenados em arquivos de dados.
As vantagens de utilizar a criptografia de dados transparente (TDE) são:
- Os usuários do banco de dados e as aplicações não precisarão gerenciar o armazenamento de chave ou criar tabelas auxiliares, views e triggers.
- Os dados estarão seguros se algum arquivo de dados ou mídia de armazenamento for roubado.
- A descriptografia de dados é transparente para os usuários de banco de dados e aplicações.
- As aplicações não precisam ser modificadas para trabalhar com dados criptografados porque a tarefa de criptografia e descriptografia são gerenciadas pelo banco de dados.
- Operações de gerenciamento de chaves são automatizadas.
- Os dados criptografados são protegidos durante as operações de JOIN e SORT, significa que os dados estarão a salvo quando movidos para a tablespace temporária.
As desvantagens são queda de performance, necessidade de mais espaço em disco, não se aplica às tabelas com chaves estrangeiras, objetos do tipo BFILE (External Large Objects), Materialized View Logs e Transportable Tablespaces.
Criptografia de tablespace
A criptografia de tablespace permite criptografar a tablespace inteira.
Os objetos LOB, BLOB e CLOB também serão criptografados se forem criados nesta tablespace.
No Oracle 10g, por exemplo, é possível criptografar uma ou mais colunas (individualmente) da tabela, porém este processo é trabalhoso e a criptografia de tablespaces veio para facilitar a vida do DBA.
A figura a seguir mostra o processo de criptografia de tablespace:
Passo-a-passo para configuração da tablespace
Criação do WALLET
A wallet (carteira) é responsável por armazenar a chave de criptografia.
O local default dele é $ORACLE_BASE/admin/$ORACLE_SID/wallet.
A Oracle recomenda fortemente criar a wallet em um local diferente do default utilizando o parâmetro ENCRYPTION_WALLET_LOCATION no arquivo sqlnet.ora.
Exemplo:
ENCRYPTION_WALLET_LOCATION= (SOURCE=(METHOD=FILE)(METHOD_DATA= (DIRECTORY=/u01/app/oracle/admin/DB11G/encryption_wallet/)))
Para criar e abrir a wallet:
CONN sys/password@db11g AS SYSDBA
ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY "minhaSenha";
ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "minhaSenha";
Para fechar a wallet:
ALTER SYSTEM SET ENCRYPTION WALLET CLOSE;
Importante:
- A wallet precisa ser reaberta após cada STARTUP.
- Quando é feito um shutdown na instância, a wallet é fechada.
Criação da tablespace
O comando a seguir cria uma tablespace criptografada,
ENCRYPTED_TS.CREATE TABLESPACE encrypted_ts DATAFILE '/u01/app/oracle/oradata/DB11G/encrypted_ts01.dbf' SIZE 128K
AUTOEXTEND ON NEXT 64K ENCRYPTION USING 'AES256' DEFAULT STORAGE(ENCRYPT);
ALTER USER test QUOTA UNLIMITED ON encrypted_ts;
A cláusula ENCRYPTION USING especifica o tipo de algoritmo de criptografia que o Oracle utilizará. Se esta cláusula não for especificada o algoritmo default é AES128.
A cláusula DEFAULT STORAGE (ENCRYPT) deve ser especificado.
Nas views de dicionário DBA_TABLESPACES e USER_TABLESPACES podemos consultar se a tablespace é ou não é criptografada.
SELECT tablespace_name, encrypted
FROM dba_tablespaces;
TABLESPACE_NAME ENC
------------------------------ ---
SYSTEM NO
SYSAUX NO
UNDOTBS1 NO
TEMP NO
USERS NO
ENCRYPTED_TS YES
6 rows selected.
Importante:
- Tablespaces que já existem não podem ser criptografadas.
- É possível mover uma tabela de uma tablespace não-criptografada para uma tablespace criptografada com o comando ALTER TABLE MOVE.
- É possível importar dados na tablespace criptografada usando o Oracle Data Pump.
- Algoritmos permitidos: 3DES168, AES128, AES192, AES256.
Conclusão
Dependendo da regra de negócio do cliente você vai precisar implementar este recurso para a(s) tablespace(s) do banco de dados dele para garantir uma segurança maior dos dados. Por outro lado, haverá degradação na performance que pode ser ou não significativa.
Antes de aplicar na produção, eu recomendo simular várias situações no ambiente de teste; medir o tempo necessário para trabalhar com os objetos armazenados nessas tablespaces, fazer consultas utilizando JOIN e/ou SORT.
Referências
- http://docs.oracle.com/cd/E25178_01/network.1111/e10746/asotrans.htm#autoId4
- http://www.oracle-base.com/articles/11g/tablespace-encryption-11gr1.php
Até o próximo artigo!