- This topic has 2 replies, 3 voices, and was last updated 7 years, 2 months ago by José Laurindo Chiappa.
-
AuthorPosts
-
25 de agosto de 2017 at 7:50 pm #108941airoospParticipant
Boa tarde,
Temos aqui os bancos 10g e 11g, ambos em Windows. É possível no momento de incluir informação em um campo de uma tabela criptografar o que será gravado, usando recurso do próprio banco?
Seria utilizar uma trigger por exemplo:
.
.
before insert on cadastropeca
declare
v_cripto varchar2(20)
.
.
beginif :new.codalmox is not null then
v_cripto:=criptografar(:new.codalmox);
:new.codalmox:=v_cripto;
end if;
end;
Se alguém tiver alguma dica, agradeço.
Obrigado.
Airton
25 de agosto de 2017 at 8:36 pm #108942spernegaParticipantBoa tarde,
tem o DBMS_OBFUSCATION_TOOLKIT.
A gente usa assim aqui:
CREATE OR REPLACE PACKAGE toolkit AS
FUNCTION encrypt (p_text IN VARCHAR2) RETURN RAW;
FUNCTION decrypt (p_raw IN RAW) RETURN VARCHAR2;
END toolkit;
/CREATE OR REPLACE PACKAGE BODY toolkit AS
g_key RAW(32767) := UTL_RAW.cast_to_raw(‘12345678’);
g_pad_chr VARCHAR2(1) := ‘~’;
PROCEDURE padstring (p_text IN OUT VARCHAR2);
FUNCTION encrypt (p_text IN VARCHAR2) RETURN RAW IS
l_text VARCHAR2(32767) := p_text; l_encrypted RAW(32767);
BEGIN
padstring(l_text);
DBMS_OBFUSCATION_TOOLKIT.desencrypt(input => UTL_RAW.cast_to_raw(l_text),
key => g_key,
encrypted_data => l_encrypted);
RETURN l_encrypted;
END;
FUNCTION decrypt (p_raw IN RAW) RETURN VARCHAR2 IS
l_decrypted VARCHAR2(32767);
BEGIN
DBMS_OBFUSCATION_TOOLKIT.desdecrypt(input => p_raw,
key => g_key,
decrypted_data => l_decrypted);RETURN RTrim(UTL_RAW.cast_to_varchar2(l_decrypted), g_pad_chr);
END;
PROCEDURE padstring (p_text IN OUT VARCHAR2) IS
l_units NUMBER;
BEGIN
IF LENGTH(p_text) MOD 8 > 0 THEN
l_units := TRUNC(LENGTH(p_text)/8) + 1;
p_text := RPAD(p_text, l_units * 8, g_pad_chr);
END IF;
END;
END toolkit;
/Select toolkit.decrypt(‘193BC945CD62FCA3517DCD01378EE317’) from dual;
25 de agosto de 2017 at 9:49 pm #108943José Laurindo ChiappaModeratorBlz ? Então, seja num banco Oracle 10g, 11g ou 12c (e qquer que seja o Release) o modo Recomendado de se fazer isso sem ter que sair escrevendo código é vc comprar o add-on chamado ORACLE TRANSPARENT DATA ENCRYPTION : com esse produto adquirido (ele é vendido á parte) vc passa a ter a encriptação ** E ** a decriptação AUTOMÁTICAS, feitas on-the-fly pelo próprio RDBMS, daí o “Transparent” do nome do produto… Principalmente para aplicações onde vc não tem o fonte e/ou vc vai ter muitas aplicações diferentes acessando o banco (casos em que é IMPOSSÍVEL ou muito difícil vc codificar), o TDE é inestimável…. Veja http://www.oracleflash.com/26/Oracle-10g-Transparent-Data-Encryption-examples.html e http://www.oracle.com/ocom/groups/public/@otn/documents/webcontent/279376.htm além da documentação Oracle para refs sobre o assunto…
CASO porém vc não disponha do TDE (porque não tem verba pra adquirir ele, ou seja por que for), aí vc é que vai ter que ** ESCREVER ** rotinas para criptografar E para decriptografar… Pode ser feito mas o principal senão é que vc passa a ter o acesso aos dados restrito à sua aplicação – com CERTEZA, as eventuais ferramentas outras de relatórios, de BI, de segurança/Auditoria de dados, etc, etc, não vão conseguir decriptografar os dados, pois vc os encriptou com um algoritmo seu…
SE essa restrição não te afeta, ok : o método rotineiramente usado para criptografia faça-você-mesmo é a package DBMS_CRYPTO : dá uma lida nos capítulos ref. Database Security dos manuais Oracle (tanto pro 10g quanto pro 11g, pra pegar as eventuais mínimas diferenças entre versões) pra sintaxes e guias gerais, e como ref/exemplo de uso veja http://www.oracleflash.com/41/Encrypt-or-Decrypt-sensitive-data-using-PLSQL-DBMS_CRYPTO.html#751729369202328132 , http://www.databasejournal.com/features/oracle/article.php/3506421/Oracle-10g-PLSQL-Enhancements-Part-1-DBMSCRYPTO-DBMSMONITOR-and-DBMSSERVERALERT.htm e https://stackoverflow.com/questions/12058356/encrypt-decrypt-password-in-oracle-function …[]s
Chiappa
OBS :
a. antes do banco 10g a opção oferecida era a package DBMS_OBFUSCATION_TOOLKIT, que é ** muito ** mais fraca, usa um algoritmo interno do RDBMS baseado em salts : a vantagem do DBMS_CRYPTO é que ela permite que vc use algoritmos de criptografia IMENSAMENTE MAIS SOFISTICADOS E SEGUROS do que hash+salt, como por exemplo 3DES …
b. é importante dizer que vc está no controle total quando opta por criptografia manual, então ALÉM de escrever as rotinas que encriptam e decriptam E fazer a tua aplicação as chamar quando for ler E quando for gravar dados, OUTRA tarefa que ficará ABSOLUTAMENTE POR SUA CONTA é gerenciar as chaves de criptografia….
-
AuthorPosts
- You must be logged in to reply to this topic.