Professional Documents
Culture Documents
En este artículo quiero presentar un prototipo básico que atenderá a dar respuesta a todos estos aspectos. De
ninguna manera pretendo aquí plantear una solución definitiva. Por el contrario, mi objetivo es proponer un
punto de partida que podrá ser aumentado y enriquecido en cada situación y entorno particular.
A priori la respuesta parecería ser que debemos mantener todo en un mismo esquema; si los separamos
estaríamos contrariando los conceptos de encapsulamiento. Y además estaríamos agregando tareas
administrativas para el manejo de esquemas y privilegios.
Sin embargo, si analizamos un poco más, comenzaremos a encontrar varias ventajas de la opción de
separación de esquemas:
Mayor seguridad: el acceso a los objetos deberá ser solicitado y justificado. Adicionalmente los privilegios
quedarán documentados automáticamente en el diccionario de datos.
Separación de roles: los programas serán accedidos por los desarrolladores, los objetos serán administrados y
mantenidos por un “Administrador de datos” o por el DBA.
Disminución de riesgos: los programas no podrán truncar, ni eliminar tablas, vistas, índices, etc. De ser
necesario hacer operaciones de este tipo, se podrá analizar el caso particular y asignar el privilegio necesario
pudiendo administrarlo con un alto nivel de granularidad.
Consult
Inserción
Actualización
Eliminación
Supongamos que acabamos de crear la tabla CASOS en el esquema CRMOBJ. Luego ejecutaremos el
siguiente código SQL:
Uso de la aplicación
Dependiendo de la arquitectura de la aplicación habrá al menos dos posibles tipos de conexión a la base de
datos:
Cuenta de usuario genérico en caso de aplicaciones web o de tres capas (crearíamos un usuario CRMAPP en
nuestro ejemplo)
Cuentas personalizadas para el caso de aplicaciones cliente/servidor
Estas cuentas sólo pueden modificar datos a través de la ejecución de los programas creados por la cuenta de
programas, asegurando las reglas de negocio definidas en los procedimientos almacenados, funciones y
paquetes. Para las ejecución de consultas SQL, estás cuentas disponen de privilegios de SELECT sobre los
objetos pertenecientes al esquema de objetos. Para facilitar la administración, los privilegios de ejecución y de
consulta se asignan a través de roles.
El usuario de aplicación no dispone de objetos propios. Cuenta pura y exclusivamente con privilegios de
ejecución y consulta.
La aplicación accede a la base con una cuenta de usuario que será genérica (web) o personalizada
(cliente/servidor)
La cuenta de usuario para la aplicación solamente puede:
o Ejecutar los procedimientos, funciones y paquetes creados con la cuenta de programas
o Consultar los objetos de la cuenta de objetos
La cuenta de usuario para los programas solamente puede:
o Crear procedimientos, funciones y paquetes
o Modificar los datos pertenecientes a la cuenta de objetos
La cuenta de usuario creada para objetos:
o Es dueña de las tablas, vistas, secuencias, índices, etc.
Sinónimos
Al separar los esquemas se plantea la necesidad de definir como referenciar a los objetos. ¿Los referenciamos
anteponiendo el esquema? ¿Utilizamos sinónimos privados? ¿Utilizamos sinónimos públicos? Cada elección
tiene sus ventajas y desventajas, en cada situación particular habrá que ponerlas en la balanza y elegir la mejor
opción:
Los sinónimos públicos pueden ser problemáticos si tenemos varias aplicaciones en la misma base y se
repiten los nombres de objeto.
Anteponer el nombre del owner de los objetos dentro de los programas puede resultar complicado en
situaciones en que utilicemos una misma base de datos para varias versiones de la misma aplicación (por
ejemplo desarrollo y test)
Los sinónimos privados podrían no ser deseables en aplicaciones cliente servidor donde es necesario crear
muchas cuentas de usuario de aplicación.
Vistas
En este artículo hemos optado por considerar las vistas como objetos similares a las tablas y, por lo tanto, las
hemos incluido en el esquema de objetos. También es cierto que las vistas, en definitiva, son código SQL y
por lo tanto también es válido incluirlas en el esquema de programas. Y, en el último de los casos, tampoco
sería incorrecto optar por un esquema híbrido con vistas en ambos esquemas.
Ejemplo
Creación del usuario de objetos
create user CRMOBJ identified by PWDCRMOBJ
default tablespace CRMOBJ_DATA
temporary tablespace TEMP
/
Creación de usuario de programas