Hola a todos.
Tenemos una aplicación a la que no puedo acceder a la que tengo que prohibir
el borrado de registros en una determinada tabla.
He creado un trigger INSTEAD OF DELETE para evitar que, en función del
usuario, se puedan borrar estos registros. Además, si el usuario no está
autorizado a borrar datos, guardo un log de los intentos de borrado.
Hasta aquí todo muy bien, el funcionamiento es correcto si lanzo
instrucciones delete con distintos usuarios y el log se me actualiza sin
ningún problema. Cuando un usuario no autorizado intenta borrar un registro,
lanzo un error (Con RAISERROR) para notificar a la aplicación que el borrado
no se ha podido realizar.
El problema real viene cuando esta aplicación es la que borra registros.
Mediante el Profiler he visto que abre una transacción antes de ejecutar la
instrucción delete, ergo, antes de ejecutarse mi trigger. Al notificar el
error al programa, éste hace un ROLLBACK, y, aunque así consigo que no me
borre el registro, pierdo toda la información de auditoría que he insertado
durante la ejecución del trigger.
¿Alguien puede ayudarme con respecto a esto? En resumen, tengo que poder
hacer insert en una tabla desde un trigger que se ejecuta dentro de una
transacción QUE SÉ que se va a anular. Los datos insertados en la tabla,
dentro de la transacción no deben eliminarse cuando la aplicación haga el
ROLLBACK de su transacción.
Gracias :)
__________ Información de ESET NOD32 Antivirus, versión de la base de firmas de virus 4679 (20091211) __________
ESET NOD32 Antivirus ha comprobado este mensaje.
http://www.eset.com
Leer las respuestas