Nenhum resultado encontrado

Sua pesquisa não corresponde a nenhum resultado.

Sugerimos que você tente o seguinte para ajudar a encontrar o que procura:

  • Verifique a ortografia da sua pesquisa por palavra-chave.
  • Use sinônimos para a palavra-chave digitada; por exemplo, tente “aplicativo” em vez de “software.”
  • Tente uma das pesquisas populares mostradas abaixo.
  • Inicie uma nova pesquisa.
Perguntas Frequentes

"The Wrap Utility", criptografando o nosso código

Por Tércio Silva Costa,
Postado em Outubro 2016

Revisado por Marcelo Pivovar - Solution Architect

Hoje, uma das coisas de maior valor existe é a propriedade intelectual. Não devemos nos esquecer que o nosso código fonte também está dentro dessa propriedade. Podemos e devemos proteger o nosso código no banco de dados Oracle. Seja de uma outra empresa que compete no mesmo setor ou de usuários mal intencionados ou que façam um mal uso desse código.

Esta proteção pode ser feita no nosso código, isso é chamado de wrap. Dessa forma criptografamos o nosso código, tornando ele ilegível para outra pessoa. Claro que a recuperação de um código com wrap não é impossível, mas com certeza dificulta muito esse processo.

Pode-se fazer essa proteção tanto aos scripts que são salvos em extensão .sql como o nosso código executado no banco de dados Oracle, assim ninguém poderá ver detalhes, pelo menos de uma maneira legível, do texto SQL ao consultar views como a USER_SOURCE.

Há duas maneiras de se fazer esse processo de wrap. A primeira, é um utilitário de linha de comando, wrap. A segunda maneira é um package, chamado DBMS_DDL, no qual existe uma procedure e uma function com o nome CREATE_WRAPPED.

Uma regra e observação que sempre devemos seguir, é que devemos esconder apenas os detalhes da implementação e não da especificação. Um exemplo seria fazer o wrap apenas do package body, mas na especificação não realizar o wrap. Desta maneira, a pessoa que for utilizar algo do package poderá saber detalhes, como parâmetros e retornos. Mas a maneira como é realizada ficará escondida, como uma caixa preta, protegendo assim o nosso código fonte.

Vejamos primeiro como utilizar o utilitário de linha de comando. Esse utilitário do Oracle é bem simples. Executamos diretamente do console do Linux ou então do prompt de comando do Windows. Nos meus exemplos estarei utilizando o Oracle Enterprise Linux, mas poderão fazer da mesma maneira no Windows sem problemas.

Este utilitário trabalho com arquivos com extensão .sql ou .ext e a saída será um arquivo com a extensão .plb ou .ext. Este utilitário utiliza dois argumentos. O primeiro, que é obrigatório, é o nome do arquivo que sofrerá o wrap. O segundo, que é opcional, é o nome do arquivo que será gerado com wrap. Caso não seja utilizado o segundo argumento, o arquivo gerado terá o mesmo nome que o arquivo utilizado, mas com a extensão .plb. A sintaxe deste utilitário é a seguinte:

  
wrap iname=input_file [ oname=output_file ]
 
 

O uso é bem simples mesmo, veja o conteúdo de um arquivo para testes na Listagem 1.

Listagem 1. Conteúdo do arquivo teste.sql.

  
CREATE OR REPLACE FUNCTION teste RETURN  NUMBER IS
BEGIN
RETURN 1;
END teste;
/
 
 

é o comando para a criação de uma function bem simples, apenas para teste. Vamos agora realizar o processo de wrap utilizando a utilitário da linha de comando.. Veja a listagem 2.

Listagem 2. Processo de WRAP

  
wrap iname=teste.sql

PL/SQL Wrapper: Release 12.1.0.2.0- 64bit Production on Tue Oct 04 08:38:19  2016

Copyright (c) 1993, 2009, Oracle. All rights reserved.

Processing teste.sql to teste.plb
 
 

Após o comando de WARP, o Oracle retorna algumas mensagens, informando no final o nome do arquivo de saída, o arquivo que sofreu o WARP.

Agora veja o conteúdo do arquivo teste.plb na Listagem 3.

Listagem 3. Conteúdo de um arquivo com WRAP.

  
CREATE OR REPLACE  FUNCTION teste wrapped 
a000000
1
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
8
3d 71
m9n4KQ8rT+C9b7lU4HcO3pDzsUMwg8eZgcfLCNL+XhahYtGhXOfAsr2ym16lmYEywLIJpXSL
wMAy/tKGCamhBKPHvpK+FkZTOQdTo4KmpqsCL3g=

/
 
 

Perceba que podemos verificar a que se refere o código, no caso foi o comando para criar uma function com o nome teste. Todo o resto da implementação é ilegível, que é o nosso objetivo. Podemos agora rodar esse script no SQL*PLUS da seguinte maneira.

  
@/home/oracle/tercio_testes/teste.plb
Function created.
 
 

Após executar o arquivo com wrap, podemos utilizar a function normalmente como qualquer outra. Mas vejamos o que aparece ao consultar a view USER_SOURCE. Veja o conteúdo da coluna text na Listagem 4.

Listagem 4. Conteúdo da coluna TEXT da view USER_SOURCE.

  
SELECT text 
FROM user_source 
WHERE name = ‘TESTE’; 
TEXT 
FUNCTION teste  wrapped 
a000000
1
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
8
3d 71
m9n4KQ8rT+C9b7lU4HcO3pDzsUMwg8eZgcfLCNL+XhahYtGhXOfAsr2ym16lmYEywLIJpXSL
wMAy/tKGCamhBKPHvpK+FkZTOQdTo4KmpqsCL3g=
 
 

Todo o nosso código ficou protegido assim pelo WRAP, mesmo no banco de dados. Isso é uma ótima notícia! Mas nem sempre queremos criar um arquivo no nosso sistema para utilizar o utilitário da linha de comando. Para isto, pode-se usar o package DBMS_DDL. Veja um exemplo do seu uso abaixo na Listagem 5.

Listagem 5. Uso do package DBMS_DDL.

  
DECLARE
texto_sql VARCHAR2(500);
retorno VARCHAR2(500);
BEGIN
texto_sql := 'CREATE FUNCTION  teste_dbms_ddl RETURN NUMBER IS '
|| 'BEGIN '
|| ' RETURN 1;'
|| 'END teste_dbms_ddl;';
retorno := DBMS_DDL.WRAP(texto_sql);
EXECUTE IMMEDIATE retorno;
END; 
 
 

O resto do processo é o mesmo. Se for feita a tentativa de consulta a coluna TEXT na view USER_SOURCE, o resultado será o mesmo da Listagem 4. Outra opção além da uso da function WRAP do package DBMS_DDL é a procedure CREATE_WRAPPED. Que faz o WRAP no código e já executa.

Tércio Costa Formado em Ciências da Computação pela UFPB com experiência em Servidores Windows Server e Linux e banco de dados Oracle desde 2008 juntamente com os seus serviços. Desenvolvimento de Sistemas em Java SE com banco de dados Oracle e MySQL. Certificado Oracle Certified SQL Expert, mantendo o blog https://oraclepress.wordpress.com/ reconhecido pela OTN e articulista no portal http://www.profissionaloracle.com.br/gpo

Este artigo foi revisto pela equipe de produtos Oracle e está em conformidade com as normas e práticas para o uso de produtos Oracle.