Jesús Lucas Flores Seguridad en Oracle y Autenticación de Usuarios Seguridad en Oracle y A utenticación de Usuarios 1 BBDD Jesús Lucas Flores Seguridad en Oracle y Autenticación de Usuarios BBDD INDICE 1. Introducción: Autenticación en Oracle. Pág. 2 2. Almacenamiento de las Passwords en Oracle. Pág. 3 3. Vulnerabilidad de contraseñas en ORACLE. Pág. 5 4. Autenticación por medio del SO Linux XE / Windows. Pág. 8 5. Funciones de verificación de contraseñas. Pág. 11 6. Oracle Internet Directory. OID. Pág. 13 7. ¿Por qué no se puede autenticar por medio de OpenLDAP o variantes solo OID? Pág. 14 Webgrafía Pág. 17 2 Jesús Lucas Flores Seguridad en Oracle y Autenticación de Usuarios BBDD 1. Introducción: Autenticación en Oracle Cuando los usuarios desean conectarse a la base de datos Oracle para realizar sus funciones, esta se asegura de que están autorizados a acceder, por medio del proceso de autenticación. La autenticación puede ser realizada de varias maneras, podemos definir el usuario en la base de datos y autenticarlo, o definirlo en otro lugar, como por el ejemplo el sistema operativo o un servidor LDAP como Oracle Internet Directory, y pasarle los credenciales como validos a la base de datos. Hay dos maneras por las cuales las base de datos autentica usuarios: • Por contraseña. • Por autenticación por parte del sistema operativo (OS authentication). Veamos las diferencias entre estos dos tipos de autenticación. – Autenticación por medio de contraseña: create user scott identified by tiger; Con esta instrucción creamos el usuarios “scott” autenticado el nuestra base de datos por medio de la contraseña “tiger”. Esto nos crea la entrada de este usuario en el diccionario de datos en la tabla USERS$ propiedad del usuario SYS. Cuando el usuario se conecta por medio de alguna aplicación cliente este comprobara en el diccionario de datos si los datos introducidos son correctos. Luego hablaremos sobre como se guardan estas contraseñas en la base de datos. – Autenticación por medio del Sistema Operativo: La autenticación por medio de sistema operativo son realizadas por las que en Oracle se denominan cuentas de usuarios OPS$. Create user ops$jesus Identified externally; Con esta instrucción creamos en Oracle el usuario “jesus” y le indicamos a la base de datos de que este usuario se autenticará por parte del sistema operativo. Este usuario se conectara a la base de datos usando la siguiente sentencia: connect / Ahora Oracle comprobará si el usuario “jesus” se encuentra autenticado en el sistema operativo y por lo tanto podrá conectarse al a base de datos sin necesidad de que se le pida la contraseña. Hablaremos luego sobre cómo activar la autenticación por medio de sistema operativo tanto en entornos Linux como en entornos Windows. 3 Jesús Lucas Flores Seguridad en Oracle y Autenticación de Usuarios BBDD 2. Almacenamiento de las Passwords en Oracle: Las contraseñas en Oracle son almacenadas por defecto en el tablespace SYSTEM de nuestra base de datos. Estas contraseñas se almacenan encriptadas con un algoritmo SHA-1 (Contraseña ||Semilla). Lo mas lógico es pensar que haciendo un SELECT password FROM dba_users podríamos ver la versión encriptada de las contraseñas , pero esto dejo de ser posible en la versión 11g. Oracle 11g ofrece la posibilidad de usar password de hasta 50 caracteres distinguiendo mayúsculas de minúsculas. En Oracle 11g los passwords son encriptados con DES en la (columna password) y usando SHA-1 (columna spare4). En la nueva versión 11g el hash de la contraseña no es accesible vía dba_users ahora hay que hacerlo mediante el usuario SYS con la siguiente SELECT: SYS.USER$ : SELECT name,spare4 FROM SYS.USER$ WHERE password is not null; Donde spare4 es el hash de la contraseña. NAME SPARE4 SCOTT S:C67079C45E2703C6E4C5FBF4EAF0A48876227E142C58E3C60D1C4055C82D La encriptación SHA-1 y DES a día de hoy no se ha roto aunque ya se aconseja usar cifrado TRIPLE-DES, por lo que se considera bastante segura aunque no evitamos así ataques de diccionario o mediante fuerza bruta. 4 Jesús Lucas Flores Seguridad en Oracle y Autenticación de Usuarios BBDD 3. Vulnerabilidad de contraseñas en ORACLE. Oracle pese a ser un sistema con amplias opciones de seguridad presenta algunas vulnerabilidades que podemos corregir. Como vimos anteriormente el cifrado de las contraseñas de Oracle es SHA-1 con semilla, este algoritmo es bastante seguro a día de hoy ya que no se ha roto, pero esto no impide a los atacantes realizar ataques de fuerza bruta o de diccionario. Hay numerosas herramientas que encriptan el usuario y el password y lo comparan con el hash. Si el hash es idéntico al almacenado en la base de datos ya sabremos cual es el password . Desde simples herramientas basadas en SQL ( menos de 500 password por segundo) a programas especiales realizados en C como chepwd. La herramienta más rápida calcula 1.100.000 de passwords por segundo. En un Pentium 4 con 3GHz toma el siguiente tiempo: • • • • • • 10 segundos para calcular todas las combinaciones de 5 caracteres ascii. 5 minutos para calcular todas las combinaciones de 6 caracteres ascii. 2 horas para calcular todas las combinaciones de 7 caracteres ascii. 2,1 días para calcular todas las combinaciones de 8 caracteres ascii. 57 días para calcular todas las combinaciones de 9 caracteres ascii. 4 años para calcular todas las combinaciones de 10 caracteres ascii. Como podemos ver nuestra base de datos esta expuesta a estos tipos de ataques y debemos intentar mitigar sus efectos con algunas de las siguientes medidas. – Crear una función de verificación de contraseñas lo suficientemente estricta. Esta función deberá verificar que la longitud sea lo suficientemente amplia y que contenta caracteres especiales, así como que no la contraseña no sea demasiado simple o palabras que se encuentren en algún diccionario y otras muchas opciones que podemos programar con PL/SQL. – Configurar en los perfiles las siguientes opciones de PASSWORD: PASSWORD_LIFE_TIME → Tiempo de Vida del Password PASSWORD_GRACE_TIME → Número de días disponibles para cambiar el password antes de que se bloque la cuenta. PASSWORD_REUSE_TIME → Número de días hasta volver poder utilizar el mismo password. PASSWORD_REUSE_MAX → Número de veces que se puede reusar el mismo password. Las dos siguientes declaraciones son muy importantes para evitar los ataques con fuerza bruta o de diccionario: FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 10 Estableciendo un número determinado de veces que el login del usuario puede fallar limitamos al atacante a que tenga que esperar que la cuenta se desbloquee después de 5 Jesús Lucas Flores Seguridad en Oracle y Autenticación de Usuarios BBDD realizar 3 intentos de ataques con diccionario o fuerza bruta, lo que provoca que no pueda realizar mas ataques a dicho usuario mientras su cuenta este bloqueada. – Baneo de direcciones Ip que intenten excesivas conexiones fallidas con la BD. En la red disponemos de varias herramientas para el crackeo y hacking de bases de datos Oracle. Podemos ver una lista de estas herramientas y sus ventajas e inconvenientes en el siguiente sitio web: http://www.red-database-security.com/whitepaper/oracle_password_cracker.html La autentificación contra bases de datos Oracle también posee de otras vulnerabilidades que el administrador debe controlar después de la instalación de una base de datos Oracle: • Autenticación como SYSDBA sin contraseña. Algunos administradores después de instalar una base de datos Oracle en sistemas Windows se olvidan de que en la instalación se crea el grupo ora_dba y se añade automáticamente el usuario que creo la base de datos. Esto provoca que el usuario del sistema operativo que creo la base de datos pueda tener acceso a todos los datos entrando como SYSDBA y sin necesidad de introducir contraseña alguna. Para evitar esto debemos sacar del grupo ora_dba al usuario correspondiente. • Usuarios y contraseñas por defecto Oracle trae por defecto numerosos usuarios por defecto con contraseñas ya establecidas que se pueden encontrar por toda la red. Para ver los usuarios con password por defecto podemos usar la vista del diccionario de datos siguiente: SELECT * FROM dba_users_with_defpwd; Debemos desactivar aquellas cuentas que no usemos y que se encuentren habilitadas y cambiar el password de aquellas que aparecen en la vista. • Si hay acceso físico estas vendido. Si el atacante tiene acceso directo físico a nuestro servidor de base de datos o logro entrar remotamente puede atacarnos de diferente manera usando la aplicación cliente de nuestros usuarios. Un atacante podría modificar el fichero %ORACLE_HOME%\sqlplus\admin\glogin.sql o %ORACLE_HOME%\sqlplus\admin\login.sql y insertar código SQL o comandos de la consola de SQL * Plus que le permita obtener datos y copiarlos a una base de datos remota o como veremos a continuación crearse un usuario automáticamente. Si el atacante accede y nos modifica el fichero glogin.sql de la siguiente manera: CREATE USER hacker identified by hackchack1; grant connect to hacker; grant dba to hacker; CLEAR SCREEN 6 Jesús Lucas Flores Seguridad en Oracle y Autenticación de Usuarios BBDD Esto provocará la creación de un usuario para el atacante en el momento en el que algún usuario con los privilegios correspondientes se loguee en Sql*plus sin que se de cuenta aparentemente. • Contraseñas en claro por los clientes y servicios. Una vulnerabilidad no propia de Oracle pero igualmente importante es que las contraseñas de nuestros usuarios se manden en claro o permanezcan en claro en ficheros de configuración o ficheros de código fuente de sus aplicaciones. Por ejemplo para realizar una conexión desde una aplicación PHP a Oracle la contraseña y el usuario debe estar indicado en el código PHP de la aplicación. Por lo tanto debemos proteger y adecuar los permisos correspondientes a ficheros que contengan datos de identificación contra la base de datos. Otros métodos para proteger nuestra base de datos seria cifrar todo el contenido de la BD, el uso de identificación biométrica vía reconocimiento facial, dactilar, vocal y otros métodos. Si tenemos en cuenta todas estas vulnerabilidades y seguimos todos los pasos necesarios para corregirlas e impedir al atacante el acceso del sistema tendremos nuestros datos más seguros. 7 Jesús Lucas Flores Seguridad en Oracle y Autenticación de Usuarios BBDD 4. Autenticación por medio del SO Linux XE / Windows. A)En Linux con Oracle XE: 1. Creamos el usuario en el sistema operativo # useradd lucas # passwd lucas Changing password for lucas. 2. Configuramos los parámetros siguientes: La autenticación por sistema operativo no esta activada por defecto en Oracle XE. Para permitir el uso de usuarios del sistema operativo, llamados por Oracle OPS$ users, abrimos SQL Plus o algún cliente SQL y ejecutamos el siguiente comando: alter system set os_authent_prefix=OPS$ scope=spfile; Nos modifica el fichero binario: cat /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/dbs/spfileXE.ora Este contiene parámetros de configuración de la instancia que se esta ejecutando. Reiniciamos la DB: shutdown immediate Startup Creamos el usuario en nuestra base de datos: CREATE USER OPS$lucas IDENTIFIED EXTERNALLY DEFAULT; Le aplicamos los roles y privilegios como cualquier otro usuario: GRANT CONNECT, RESOURCE TO lucas; 3. Reiniciamos la base de datos: /etc/init.d/oracle-xe restart 4.- A continuación, tratamos de conectarnos a Oracle como un usuario del sistema operativo autenticado. Esperamos que falle! Quizás sea necesario configurar algunas variable de entorno para que SQL * PLUS funcione correctamente. - Vemos la configuración actual de SQL * PLUS #cat /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/config/scripts/sqlplus.sh # su - tim_hall 8 Jesús Lucas Flores $ $ $ $ Seguridad en Oracle y Autenticación de Usuarios BBDD export ORACLE_HOME=”Dato Obtenido del cat enterior” export PATH=”Dato Obtenido del cat enterior” export ORACLE_SID=”Dato Obtenido del cat enterior” , XE sqlplus / En el ejemplo: $export:ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server $export PATH=$PATH:$ORACLE_HOME/bin:$PATH $export ORACLE_SID=XE $sqlplus / Para que se coloquen automáticamente al iniciar sesion un usuario, editar el archivo /home/lucas/.bashrc y añadir las lineas 1, 2 y 3. y para que esta configuración la tengan usuario que creemos en el sistema las añadimos al fichero /etc/skel/.bashrc . B) En Windows: 1. Creamos un usuario en el sistema operativo. 2. Configuramos los parámetros siguientes: alter system set os_authent_prefix =OPS$ scope=spfile; Nota: El valor por defecto es “OPS$” Si el usuario del sistema operativo es miembro de un grupo de dominio entonces también configuramos el siguiente parámetro: alter system set remote_os_authent=TRUE scope=spfile; Nota: El valor por defecto del parámetro es FALSE, 3. Editamos el fichero sqlnet.ora y cambiamos el valor de la siguiente linea a NTS: Sqlnet.authentication_services=(NTS) 4. Reiniciamos la base de datos: shutdown immediate startup Vemos que los parámetros se hayan modificado correctamente usando : SQL> show parameter authen NAME TYPE VALUE ----------------------- ----------- ------------os_authent_prefix string OPS$ remote_os_authent boolean TRUE 5. Creamos un usuario Oracle para autenticación mediante OS. 9 Jesús Lucas Flores Seguridad en Oracle y Autenticación de Usuarios BBDD Primero comprobamos el nombre del usuario del sistema operativo. SQL> select UPPER(sys_context('userenv','os_user')) from dual; ------------------------------------------------------------------NOMBREDELAMAQUINA\LUCAS Ahora creamos el usuario con el mismo nombre que vimos con la sentencia anterior, incluido el nombre de la máquina, añadiendo la clausula identified by EXTERNALLY. create user OPS$NOMBREDELAMAQUINA\LUCAS identified EXTERNALLY; Nota: El nombre del usuario de Oracle debe tener obligatoriamente el mismo nombre que el usuario y el nombre de máquina del sistema operativo y al crearlo debe comenzar con “OPS$”. Damos privilegios como a cualquier otro usuario : SQL> grant dba to "OPS$MACHINENAME\TOM"; 6. Testeamos la conexión a través del usuario del sistema operativo. Sqlplus / SQL> show user; USER is "OPS$NOMBREDELAMAQUINA\LUCAS" 10 Jesús Lucas Flores Seguridad en Oracle y Autenticación de Usuarios BBDD 5. Funciones de verificación de contraseñas. Una de las medidas de seguridad que podemos tomar en para proteger nuestra base de datos Oracle es asignarle una función de verificación a las contraseñas de nuestros usuario para requerirles una contraseña lo suficientemente segura; como por ejemplo de una longitud determinada, que contenga caracteres especiales, números, que no sea igual que el nombre de usuario, etc. En Oracle 11g podemos definir una función de verificación de contraseñas a los perfiles para ello primero debemos crear una función de verificación de contraseñas, aunque Oracle trae esta funcionalidad en el archivo $ORACLE_HOME/rbms/admin/utlpwdmg.sql Debemos ejecutar dicho script SQL con SQLplus como sysdba, esto nos creara la función verify_function_11G y nos alterara el perfil por defecto de la siguiente manera: ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME 180 PASSWORD_GRACE_TIME 7 PASSWORD_REUSE_TIME UNLIMITED PASSWORD_REUSE_MAX UNLIMITED FAILED_LOGIN_ATTEMPTS 10 PASSWORD_LOCK_TIME 1 PASSWORD_VERIFY_FUNCTION verify_function_11G; La función verify_function_11G comprobará que el password cumpla los siguientes requisitos: - Comprueba que el password no es igual que el nombre de usuario - Comprueba que el password tenga una longitud mínima de 4 caracteres. - Comprueba que el password no sea una palabra simple de las dadas en una lista de palabras. - Comprueba que el password contenga al menos una letra, un dígito y un signo de puntuación. - Comprueba que el nuevo password se diferencie del anterior al menos en tres caracteres. Esta función proporcionada por Oracle ya nos proporciona que nuestros passwords sean lo suficientemente seguros, aunque también podemos crear nuestra propia función de verificación. A continuación crearemos una función de verificación personalizada verifica_contra para que los passwords cumplan las siguientes condiciones: – Password diferente al nombre de usuario. – Password de al menos 8 caracteres. – Password fuera de la lista de passwords simples. 11 Jesús Lucas Flores Seguridad en Oracle y Autenticación de Usuarios BBDD Script SQL: create or replace FUNCTION verifica_contra (nombreusuario varchar2, passwordnuevo varchar2, passwordviejo varchar2) RETURN BOOLEAN IS BEGIN /*Comprueba que el password no sea igual que el nombre de usuario La función NLS_LOWER pasa a minúsculas la variable dada raise_application_error lanza una excepción personalizado*/ IF NLS_LOWER(passwordnuevo) = NLS_LOWER(nombreusuario) THEN raise_application_error(-20001, 'Password Igual que el usuario'); END IF; /*Comprueba que la longitud mínima sea 8 caracteres */ IF length(passwordnuevo) < 8 THEN raise_application_error(-20002, 'Password menor de 8 caracteres'); END IF; /*Comprobación para que el password no este en la lista de passwords simples*/ IF NLS_LOWER(passwordnuevo) IN ('welcome', 'database', 'account', 'user', 'password', 'oracle', 'computer', 'abcd', 'admin', '1234', '123456', 'tiger', 'administrador', 'asdasd', 'abc123abc' ,'contraseña') THEN raise_application_error(-20003, 'Password demasiado simple'); END IF; /*Si no ha habido errores devuelve TRUE*/ RETURN(TRUE); END; / /*Creamos un perfil personalizado */ CREATE OR REPLACE PROFILE contra_dura LIMIT PASSWORD_LIFE_TIME 30 PASSWORD_GRACE_TIME 7 FAILED_LOGIN_ATTEMPTS 4 PASSWORD_LOCK_TIME 1 PASSWORD_VERIFY_FUNCTION verifica_contra; Con este script ejecutado como SYS crearemos la función y el perfil correspondiente que podremos asignar a los usuarios de la base de datos. Las ventajas de limitar los password a ciertas condiciones supondrá para los atacantes un mayor esfuerzo para poder encontrar el HASH que corresponde con el password mediante ataque de diccionario, a su vez aplicando FAILED_LOGIN_ATTEMPTS 4 evitamos los ataques de fuerza bruta sobre nuestros usuarios aunque se les bloquerá la cuenta si se intentan realizar dicho ataque, pero eso no supondrá un problema ya que nosotros como DBA podremos desbloquear la cuenta. 12 Jesús Lucas Flores Seguridad en Oracle y Autenticación de Usuarios BBDD 6. Oracle Internet Directory. OID. Oracle Internet Directory es un LDAP versión 3 que abarca numerosas ventajas como son escalabilidad, alta disponibilidad y funciones de seguridad para bases de datos de Oracle. Oracle Internet Directory sirve como repositorio centralizado para Oracle Identity Management, simplificando la administración de usuarios en entornos Oracle y proveyendo una aplicación base estándar para diferentes aplicaciones. Adicionalmente, Oracle Direcory Synchronizacion permite a Oracle Identity Management integrarse adecuadamente con otros servicios de directorio y repositorios de usuarios, permitiendo a estos disponer de su información de identificación en cualquier lugar donde está este colocada. OID es el único servicio de directorios soportado por Oracle Database Enterprise User Security (EUS) para centralizar usuario y administrar roles, y es el único directorio que provee de completa integración automática con sistemas operativos Unix y Linux para centralizar la administración de las cuentas de usuario de estos sistemas Oracle Authentication Services for Operating Systems). Esta es una de las razones de porque no podemos usar otro servidor LDAP para la autenticación en Oracle. Podemos observar en la siguiente imagen la arquitectura de una estructura basada en OID: Con Oracle Directory Integration Server podemos integrar el uso de otros servidores LDAP como OpenLDAP con Oracle Internet Directory sincronizando sus datos. Las ventajas más importantes que se pueden destacar de Oracle Internet Directory con respecto a otros servicios LDAP son la siguientes: – Alta Disponibilidad – Sistema de seguridad basado en listas de control de acceso ACL. – Alta escalabilidad para entornos empresariales muy amplios. – Interfaz de administración vía web con Oracle Directory Services Manager (ODSM). 13 Jesús Lucas Flores Seguridad en Oracle y Autenticación de Usuarios BBDD – Integración con bases de datos Oracle. – Autenticación a OID usando otros LDAP de terceros externos. – Administración y monitorización integrada con ODSM y Oracle Enterprise Manager (OEM). Después de comprobar las distintas ventajas de OID, e intentar realizar su instalación bajo un sistema Windows con 3GB de memoria RAM, sin éxito, puedo decir que tiene numerosas desventajas: Curva de aprendizaje media. Instalación muy compleja. Consumo requerido de CPU y memoria RAM muy elevado. Dependencia de otros componentes de Oracle Middleware como son: – Weblogic – Repository Creation Utility – Oracle Enterprise Manager. – Documentación no muy clara en cuanto a la instalación de versiones nuevas. – – – – Más información oficial de Oracle Sobre OID en: http://www.oracle.com/technology/products/oid/pdf/oid_wp_11g.pdf 14 Jesús Lucas Flores Seguridad en Oracle y Autenticación de Usuarios BBDD 7. ¿Por qué no se puede autenticar por medio de OpenLDAP o variantes solo OID? Para autenticar Oracle por medio de OpenLDAP después de solicitar información por parte de algunos DBAs expertos he llegado a la conclusión de que no es posible realizarlo directamente. Para poder autenticar usuarios almacenados en OpenLDAP debemos tener instalado el LDAP de Oracle, Oracle Internet Directory (OID), y montar alguna estructura con módulos y complementos que nos permita sincronizar las entradas de OpenLDAP en la dirección hacia OID. Según la información obtenida por parte de gurús DBA también podría ser posible utilizar los datos de otros LDAP usando la aplicación Middleware de Oracle OVD (Oracle Virtual Directory). Oracle Virtual Directory unifica datos de identificación ya existentes sin fusionarlos y reusa los datos de identificación ya existentes sin copiarlos. Esto acelera el despliegue de aplicaciones y simplifica la infraestructura de identificación. Podemos leer el DataSheet de OVD aquí: Oracle OVD. 15 Jesús Lucas Flores Seguridad en Oracle y Autenticación de Usuarios BBDD Una estructura a utilizar para centralizar usuarios OpenLDAP con bases de datos y todo un sistema Oracle seria la siguiente: La implementación de esta tarea se escapa del tiempo de realización e investigación de este proyecto. Después de consultar a Jesus Gordillo Gonzalez, profesor Técnico Informático Superior de la Universidad de Cádiz, nos dió la siguiente respuesta a nuestro problema: “La única solución. Consiste en tener instalado un Openldap (que funcionaría como maestro) y un OID que funcionaría como esclavo. Hay que sincronizar openldap y OID mediante un modulo que trae incorporado oracle. La sincronización puede ser en una sola dirección o en ambas direcciones. En nuestro caso la sincronización es unidireccional y en el sentido Openldap -> OID, es decir, todos los cambios que se producen en el Openldap se reflejarían en el OID pero no a la inversa (la razón es que OID mete mucha información para la gestión propia que no nos interesa que esté en el Openldap). Respecto a la gestión de claves, puedes decidir pasar todas las claves del Openldap al OID o por el contrario dejar las claves en el openldap y el OID las consultará cuando lo necesite. Por último le dices a tu SGDB que la autenticación de usuario será a través del OID. Es un poco engorroso pero funciona perfectamente. El modulo de sincronización está muy bien desarrollado y no da ningún problema. El gran inconveniente es tener que gestionar 2 ldap (openldap y oid). Además OID necesita tener su propia bd oracle donde almacena su información (aunque esto es una perogrullada porque todos los ldap necesitan tener una bd donde guardar su información), pero claro una bd oracle es más difícil de instalar, configurar y mantener que una Berkeley DB.” 16 Jesús Lucas Flores Seguridad en Oracle y Autenticación de Usuarios BBDD WEBGRAFIA • http://www.oracle.com ◦ http://www.oracle.com/technology/products/oid/index.html • http://download-west.oracle.com/docs/cd/B10501_01/server.920/a96521/secure.htm#2232 • http://www.dba-oracle.com/ ◦ http://www.dba-oracle.com/t_password_security.htm ◦ http://www.dba-oracle.com/t_windows_external_user_authentication.htm • http://www.dbasupport.com/oracle/ora11g/11gSecurityGuide08.shtml • http://www.red-database-security.com • http://www.petefinnigan.com/orasec.htm • http://www.orafaq.com/ ◦ http://www.orafaq.com/node/1027 ◦ http://www.orafaq.com/forum/t/154584/149564/ • http://www.infor.uva.es/~jvegas/cursos/bd/oraseg/oraseg.html • http://www.oraclerant.com/?p=23 • http://www.oracle-base.com 17