2011-10-11 23 views
5

Necesito ayuda de los expertos de Oracle/Seguridad.¿Cuál es la forma recomendada de encriptar en Oracle?

Voy a hacer funciones para el cifrado/descifrado en nuestro Oracle DB. Tengo la intención de usar dbms_crypto con AES256. Entiendo que debo guardar el archivo de clave en el O/S y leerlo usando utl_file.

¿Es esta una buena idea? ¿Hay algún problema con este enfoque? P.ej. ¿Puede utl_file tener problemas si 10 usuarios de la función leen el archivo de la clave al mismo tiempo? ¿Se recomienda algo más en su lugar?

Estoy seguro de que esto es algo muy común. ¿Alguien sabe dónde puedo encontrar una buena muestra que hace esto?

Dado que esto está relacionado con la seguridad, preferiría seguir algunos estándares que otros están siguiendo.

Respuesta

3

Si tiene Oracle Advanced Security en su base de datos Oracle Enterprise Edition, ya tiene el cifrado de datos transparente (TDE) de los datos almacenados en el database.Take un vistazo:

http://download.oracle.com/docs/cd/B19306_01/network.102/b14268/asotrans.htm

Se puede extraer también este enlace:

http://www.oracle-base.com/articles/10g/TransparentDataEncryption_10gR2.php

Resumiendo la última página:

  • Configuración: crear un archivo de base de datos y un usuario.

    CONN sys/contraseña AS SYSDBA

    CREATE TABLESPACE tde_test DATAFILE /u01/oradata/DB10G/tde_test.dbf 'TAMAÑO 128K AUTOEXTEND EN LA PROXIMA 64K;

    CREAR prueba de USUARIO IDENTIFICADA POR test DEFAULT TABLESPACE tde_test; ALTERAR prueba de usuario CUOTA SIN LÍMITES EN tde_test; GRANT CONNECT TO test; GRANT CREATE TABLE TO test;

  • Datos cifrados: cómo crear una columna cifrada. Debe crear una cartera para mantener la clave de cifrado. Agregue la siguiente entrada en el archivo sqlnet.ora en el servidor y asegúrese de que se haya creado el directorio especificado.

    ENCRYPTION_WALLET_LOCATION = (FUENTE = (METHOD = ARCHIVO) (METHOD_DATA = (directorio =/u01/app/oracle/admin/DB10G/encryption_wallet /)))

Debe crear y opne la cartera:

CONN sys/password AS SYSDBA 
ALTER SYSTEM SET ENCRYPTION KEY AUTHENTICATED BY "myPassword"; 

continuación, puede crear sus tablas con las columnas deseadas codificadas o no:

CREATE TABLE tde_test (
    id NUMBER(10), 
    data VARCHAR2(50) ENCRYPT 
) 
TABLESPACE tde_test; 

Espero que esto te ayude.

+0

+1 Gracias. Esa fue información útil, sin embargo, lo que necesito es un par de funciones de cifrado/descifrado. Debo poder cifrar/descifrar sobre la marcha. Los datos no necesariamente residen en una tabla. – Zesty

+1

De nada;) ... mmm, y ¿qué hay de DBMS_OBFUSCATION_TOOLKIT? Contiene funciones para encriptar/desencriptar datos usando el Estándar de Encriptación de Datos (DES) o los algoritmos Triple DES. – Aitor

+0

Según lo que entiendo, se recomienda DBMS_CRYPTO. DBMS_OBFUSCATION_TOOLKIT es para DB más antiguas. Además, necesito proteger la llave guardándola en el O/S. – Zesty

1

Dado que debe poder encriptar/desencriptar sobre la marcha, vea mi respuesta para las funciones de encriptado y desencriptado here.

Solo una opción, estoy seguro de que otros tienen enlaces a funciones similares, pero esto funcionó para mí.

+0

Según lo que entiendo, se recomienda DBMS_CRYPTO. DBMS_OBFUSCATION_TOOLKIT es para DB más antiguas. Además, necesito proteger la llave guardándola en el O/S. – Zesty

+0

@Zesty, sí, dbms_crypto es el paquete más nuevo, así que haga su parte para analizarlo también. Puede elegir cualquier método para almacenar/proteger sus claves elegidas, pero generalmente almaceno solo los valores encriptados en el db. – tbone

Cuestiones relacionadas