Академический Документы
Профессиональный Документы
Культура Документы
Para ocultar información, debemos: crear un objeto llamado wallet dentro de la base de datos, crear o modificar la tabla donde se
almacenara la columna que deseamos ocultar (declarándola como ECRYPT O SALT), nos aseguramos de que el archivo sqlnet.ora
dentro del servidor de la base de datos cuente con la línea que señala la localización del wallet.
1.- En el archivo sqlnet.ora, incluir la siguiente línea que señala la localización del wallet dentro del Servidor de la Base de
Datos: ENCRYPTION_WALLET_LOCATION=
(SOURCE=(METHOD=FILE)(METHOD_DATA=
(DIRECTORY=/oraclemgr/admin/bd/wallet)))
2.- Conectarse vía sqlplus como "/ as sysdba" a la base de datos, para crear la llave de ocultamiento.
3.- Cuando la base de datos se cierra (se baja), el wallet se cierra, por lo que hay que abrirlo con:
Si por el contrario se desea cerrar el wallet, sin bajar la base de datos, lo logramos con:
sqlplus usuario@db
n rows inserted
1 select *
2* from alu_crypt
from alu_crypt
*
ERROR at line 2:
ORA-28365: wallet is not open
Para guardar información de forma oculta, podemos emplear un paquete de Oracle, llamado DBMS_CRYPTO, en versiones anteriores
a la 10g, se aplicaba un paquete denominado DBMS_OBFUSCATIO_TOOLKIT que si bien permite almacenar datos encriptados
como varchar2, tiene sin embargo el inconveniente de que no siempre puede obtenerse la información original, al existir la posibilidad
de pérdida de caracteres, según la nota: 270919.1 de Oracle.
A continuación se muestra el código de un bloque anónimo que ejemplifica el empleo de dbms_crypto, para criptografiar información.
-- crypt6.sql
-- Código para demostrar la utilidad de dbms_crypto
DECLARE
input_string VARCHAR2 (200) := 'Secret Message';
output_string VARCHAR2 (200);
encrypted_raw RAW (2000); -- stores encrypted binary text
decrypted_raw RAW (2000); -- stores decrypted binary text
num_key_bytes NUMBER := 256/8; -- key length 256 bits (32 bytes)
key_bytes_raw RAW (32); -- stores 256-bit encryption key
encryption_type PLS_INTEGER := -- total encryption type
DBMS_CRYPTO.ENCRYPT_AES256
+ DBMS_CRYPTO.CHAIN_CBC
+ DBMS_CRYPTO.PAD_PKCS5;
vrfc varchar2(10);
vdecryp raw(2000);
BEGIN
-- key_bytes_raw := DBMS_CRYPTO.RANDOMBYTES (num_key_bytes);
-- Si lo deseáramos, podríamos generar la llave de forma
-- aleatoria, en nuestro caso, líneas adelante se define.
select rfc
into vrfc
from ealucryp
where expediente =35859 ;
input_string:=vrfc ;
key_bytes_raw := UTL_I18N.STRING_TO_RAW('LLAVE123LLAVE123LLAVE123LLAVE123','AL32UTF8') ;
encrypted_raw := DBMS_CRYPTO.ENCRYPT
( src => UTL_I18N.STRING_TO_RAW (input_string, 'AL32UTF8'),
typ => encryption_type,
key => key_bytes_raw );
END;
/
Podrá advertirse que se deberá guardar el resultado en tipo de dato raw (de requerirse), para evitar la pérdida de información. Debe
también, tener una llave que le permita encriptar los datos. Dicha llave no se está almacenando, por lo que se deberá implementar una
forma de “recordarla”. Para poder emplear la llave, debe convertirse a Hexadecimal con UTL_I18N.STRING_TO_RAW, del mismo
modo en que debe llevarse de raw a string, las cadenas criptografiadas con UTL_I18N. RAW_TO_STRING