Evitar drop y deletes en tablas Oracle (Blockchain Tables)

En la versión 19c Oracle introdujo una característica muy interesante, dotando al administrador de la posibilidad de crear tablas donde sólo se permiten las operaciones de inserción, donde la eliminación de filas está prohibida o puede ser restringida por un tiempo establecido, así como también es posible restringir el borrado de una tabla.

Es importante añadir que para poder disfrutar de esta característica es necesario que la base de datos esté en versión 19.10, el parche 32431413 aplicado y el parámetro COMPATIBLE de la base de datos esté establecido en versión 19.10.0 o superior. A partir de la versión 19.11 el parche no es necesario, si el cambio en el parámetro COMPATIBLE.

Si estás realizando pruebas sobre esta nueva característica, tenga cuidado en no establecer un periodo de tiempo de retención muy largos, ya que no será posible eliminar las pruebas que esté realizando hasta que el periodo establecido finalice.

Existen una serie de cláusulas que pueden ser añadidas al comando y que determinan el estado final de nuestras tablas «Blockchain».

Cláusulas CREATE BLOCKCHAIN TABLE:

* NO DROP determina el tiempo está protegida contra la sentencia de borrado «drop» nuestra tabla.

NO DROP [ UNTIL number DAYS IDLE ]

*NO DROP : La tabla no puede ser borrada.
*NO DROP UNTIL number DAYS IDLE : No se puede eliminar la tabla hasta que se hayan insertado nuevas filas durante el número de días especificados.

* NO DELETE determina el periodo de tiempo en que las filas no pueden ser borradas.

NO DELETE { [ LOCKED ] | (UNTIL number DAYS AFTER INSERT [ LOCKED ]) }

*NO DELETE  O DELETE LOCKED: Las filas no pueden ser borradas.
*NO DELETE UNTIL number DAYS AFTER INSERT: Las filas no pueden ser borradas hasta X número de días en las que las filas fueron insertadas, es posible cambiar la retención con el comando ALTER TABLE.
*NO DELETE UNTIL x DAYS AFTER INSERT LOCKED: Las filas no pueden ser borradas hasta X número de días en las que las filas fueron insertadas, y no es posible cambiar la retención con el comando ALTER TABLE. El número de días mínimo son 16, en caso contrario recibirás un error al ejecutar el comando.

*HASHING USING sha2_512 VERSION v1

Cláusula de formato algoritmo hash.

Ejemplo:
Creamos una tabla de prueba según las especificaciones explicadas anteriormente:


En nuestro caso hemos creado la tabla «oracleconraul», la hemos dejado para que pueda ser borrada ya que se trata de un entorno de pruebas y le hemos indicado que tienen que pasar 16 días para podamos borrar datos de la tabla, el mínimo valor posible.

Insertamos valores de prueba.


Comprobamos que los registros se han insertado correctamente:


Al intentar realizar el borrado de datos, recibimos el mensaje que indica que en nuestra tabla no es posible borrar datos.



ALTER sobre una tabla BLOCKCHAIN

En nuestro ejemplo, podríamos realizar eldrop sobre la tabla que hemos creado como veremos a continuación, ya que la tabla fue creada con la cláusula «NO DROP UNTIL 0 DAYS IDLE», que para un entorno de prueba podría ser lo más sensato.

Ejecución del comando sobre nuestra tabla con los valores actuales:


En nuestro caso para evitar el borrado de la tabla ejecutamos el siguiente comando:


Realizamos las comprobaciones para verificar que todo funciona según lo establecido. Vamos a intentar borrar registros que no debería de estar permitido, vamos a insertar nuevos datos en la tabla, que no deberíamos de tener ningún problema e intentaremos como comprobación final intentar borrar la tabla que después del alter, no debería de ser posible.

Ejecuciones:

insert into raul.oracleconraul values(200,’RAUL’);
1 row created.
commit;


SQL> delete raul.oracleconraul where test_id=200;
delete raul.oracleconraul where test_id=200
*
ERROR at line 1:
ORA-05715: operation not allowed on the blockchain or immutable table

SQL> drop table raul.oracleconraul;
drop table raul.oracleconraul
*
ERROR at line 1:
ORA-05723: drop blockchain or immutable table ORACLECONRAUL not allowed

Para comprobar que todo es correcto, podemos lanzar la siguiente consulta:
En ella podemos identificar qué tablas tenemos creadas cómo «blockchain» tables y sus características.


En definitiva, Oracle ofrece a partir de la versión 19.10 una nueva funcionalidad que permite implementar aplicaciones blockchain, o permiten al administrador disponer de una herramienta de seguridad adicional para evitar problemas de borrados o distorsión de auditorías sobre alguna de las tablas «cores» que no pueden ser alteradas en Base de datos. Es muy importante antes de aplicar esta funcionalidad, pensar en su correcta aplicación, ya que tal y como se indicó es posible que la tabla que inicialmente fue concebida para no ser borrada/alterada, por evolución de aplicativo, recursos, etc tenga que serlo posteriormente y sea imposible realizar la acción.

YouTube
LinkedIn