Revista Electrónica Granma Ciencia. Vol.10, No.2, Mayo - Agosto de 2006 ISSN 1027-975X TÍTULO: El Control de Transacciones como mecanismo de seguridad en Bases de Datos Oracle. AUTORES: Osmani Miranda Escalona Javier Miranda Escalona INSTIUCIÓN: Universidad de Granma. Carretera de Granma, Cuba Manzanillo, km 17½. Bayamo, E-MAIL: miranda@udg.co.cu RESUMEN Todos los Sistemas de Gestión de Bases de Datos, tienen una alta responsabilidad en la seguridad de la información que almacenan y procesan. En muchas ocasiones son datos sensibles con un impacto importante en el desempeño de las entidades. El control de transacciones juega un papel importante en los mecanismos de seguridad que garantizan la disponibilidad de la información. Oracle posee estructuras tales como los REDOLOG y sentencias SQL orientadas al control de transacciones que garantizan el buen funcionamiento de este necesario mecanismo. INTRODUCCIÓN Todos los Sistemas de Gestión de Bases de Datos, tienen una alta responsabilidad en la disponibilidad y seguridad de la información que almacenan y procesan. En muchas ocasiones son datos sensibles con un impacto importante en el desempeño de las entidades. El diseño de la seguridad de una Base de Datos tiene dos objetivos fundamentales: garantizar el acceso compartimentado según niveles de autorización y lograr una alta disponibilidad de la información, es decir, que no se pierdan los datos. Para alcanzar el primer objetivo se crean usuarios, roles, contraseñas, permisos y privilegios; un eficaz control de transacciones permite garantizar el segundo. Para adentrarnos en sus mecanismos, es necesario conocer de antemano los siguientes conceptos. TRANSACCIÓN: Conjunto de programas destinados a la ejecución de una tarea, en general en tiempo real, destinada a producir una acción concreta so bre un fichero o una Base de Datos. Una transacción produce o bien una consulta o bien una actualización del fichero o Base de Datos. Se denomina también transacción al hecho de efectuar la tarea de actualización o consulta a la Base de Datos. Puede definirse también como una unidad
lógica de trabajo que contiene uno o más sentencias SQL. La agrupación de sentencias en una transacción indica que todas deben realizarse para que la Base de Datos permanezca consistente. OPERACIÓN TRANSACCIONAL: Tarea ejecutada en tiempo real, resultante de la ejecución de una transacción sobre una Base de Datos. Puede suponer una actualiza ción o una consulta a la Base de Datos. REDOLOG FILE (REDOLOG): Es un fichero físico con un formato binario, en el que ORACLE va registrando todos los cambios de manera ordenada que sufren los datos, preparándose para una posible reconstrucción ante cualquier fallo. DDL: (Lenguaje de Definición de datos) CREATE, ALTER, DROP... DML: (Lenguaje de Manipulación de datos) INSERT, UPDATE, DELETE COMMIT: Ejecutar los cambios producto de las sentencias SQL. ROLL BACK: Deshacer los cambios no ejecutados por COMMIT. Transacciones Una transacción comienza con la primera sentencia SQL ejecutable. Una transacción finaliza con un COMMIT o un ROLL BACK explícitamente o implícitamente con una sentencia DDL. Un usuario tiene que expresar explícitamente que ha concluido la transacción o implícitamente ante la ocurrencia de una DDL. En este se ejecuta un COMMIT antes de la ejecución de la DDL y luego otro. Si durante la ejecución de cualquier sentencia SQL causa un error por sintaxis, todos los efectos de la sentencia son ROLL BACK. Además una simple sentencia SQL puede ROLLBACK para resolver DEADLOCKS (competencia por el mismo dato). Por eso, una sentencia SQL que falla causa solamente la pérdida del trabajo ejecutado por la propia sentencia, esto no causa la pérdida de algún trabajo que preceda a la transacción actual.
Las sentencias SQL COMMIT y ROLLBACK tienen las siguientes sintaxis: Algunos ejemplos de sentencias COMMIT: INSERT INTO dept VALUES (50, 'MARKETING', 'TAMPA'); COMMIT WORK; COMMIT FORCE '22.57.53'; Ejemplos de ROLLBACK ROLLBACK; ROLLBACK TO SAVEPOINT sp5; ROLLBACK WORK FORCE '25.32.87'; La sentencia SAVEPOINT permite fijar un punto dentro de un conjunto de sentencias SQL, de manera que se puede hacer ROLLBACK para uno o varios intermedios de una transacción previamente marcados con SAVEPOINT. Ejemplo: UPDATE emp SET sal = 2000 WHERE ename = 'BLAKE'; SAVEPOINT blake_sal; UPDATE emp SET sal = 1500 WHERE ename = 'CLARK'; SAVEPOINT clark_sal; SELECT SUM(sal) FROM emp; ROLLBACK TO SAVEPOINT blake_sal; UPDATE emp SET sal = 1200 WHERE ename = 'CLARK';
Existe la sentencia SET TRANSACTION que permite personalizar el control de transacciones de acuerdo a la situación específica. Su sintaxis es como sigue: Ejemplo # 1: Ejemplo # 2: SET TRANSACTION READ ONLY; SELECT COUNT(*) FROM ship; SELECT COUNT(*) FROM container; SET TRANSACTION USE ROLLBACK SEGMENT oltp_5; Control de transacciones en Oracle Una transacción se inicia o finaliza en los siguientes casos: Cuando se ejecuta una sentencia COMMIT o ROLLBACK explícitamente. Cuando se ejecuta una sentencia DDL.(COMMIT) Cuando se desconecta un usuario de Oracle (COMMIT) Cuando finaliza un proceso anormalmente (ROLLBACK) Cuando una transacción finaliza la próxima sentencia SQL ejecutable inicializa una nueva. Las aplicaciones deben finalizar explícitamente las transacciones antes de concluir su ejecución. Antes que una transacción que haya modificado datos finalice debe ocurrir lo siguiente: Oracle genera registros del segmento de ROLLBACK en los buffers de ROLLBACK de la SGA. El segmento de ROLLBACK contiene los valores viejos de los datos modificados en la transacción. Oracle genera entradas de REDOLOG en los buffers de REDOLOG de la SGA. Después de ejecutar una transacción ocurre lo siguiente. Las tablas de transición interna de los registros del segmento de ROLLBACK registran que la transición ha sido ejecutada y el correspondiente número único de cambio de sistema (SCN) es asignado y registrado en la tabla.
LGWR escribe las entradas del buffer de REDOLOG en el ON LINE REDOLOG FILE (OLRF). Escribe además el SCN en el OLRF. Este es el evento atómico que constituye la ejecución de la transición. Oracle libera el bloqueo aplicado a filas y tablas, y marca la transición como completada. CONCLUSIONES Oracle, como Sistema de Gestión de Base de Datos relacional, posee sentencias SQL que garantizan una personalización apropiada del control de transacciones lo que permite afirmar que no solo es una herramienta eficiente sino también segura. En este trabajo solo tenemos espacio para introducir el tema por lo que invitamos a todos los que opten por diseñar una Base de Datos Oracle a estudiar más detenidamente el control de transacciones como parte del diseño de la seguridad de su Base de Datos. Es necesario aclarar que para otros SGBDR tales como SQLServer y MySQL, que implementan igualmente SQL como lenguaje estándar, son en general válidas las sintaxis presentadas para las sentencias orientadas al control de transacciones. BIBLIOGRAFÍA Greenwald, Rick. Robert Stackowiack y Jonathan Stern. Oracle esentials: Oracle 9i, Oracle 8i y Oracle 8, Second Edition. O Reilly and Associates, Inc. Sebastopol, 2001. 364p. Loney, Kevin. George Koch: Oracle 9i: The Complete Reference. KcGraw-Hill/Osborne. 2003. 1214 p. Oracle 9i Online Documentation, Oracle Corporation 2001.