Tengo un trigger para impedir la inyección en una tabla concreta y en una columna completa, pero me gustaría extenderlo a todas las tablas y a todas las columnas. También tengo un procedimiento para recorrer todas las tablas y columnas y me gustaría unir ambas cosas, es decir, crear un procedimiento que aplique un trigger a todas las tablas y columnas.
Por un lado el trigger de filtro:
Código:
Y por otro el procedimiento para recorrerlo todo:LTER TRIGGER DISP_una_de_las_tablas
ON una_de_las_tablas
AFTER INSERT, DELETE, UPDATE
AS
BEGIN
IF @@ROWCOUNT=0
BEGIN
RETURN
END
DECLARE @headline varchar(350)
SET @headline = (SELECT una_de_las_columnas FROM inserted)
IF(CHARINDEX('<iframe',@headline))>0
BEGIN
ROLLBACK TRANSACTION
END
IF(CHARINDEX('<script',@headline))>0
BEGIN
ROLLBACK TRANSACTION
END
END
Código:
La idea es sustituir la línea remarcada por la creación del disparador para esa table concreta y verificando todas las columnas de la misma.ALTER PROCEDURE PA_RecorreTablasColumnas
AS
DECLARE @T VARCHAR(255),@C VARCHAR(255)
DECLARE Table_Cursor CURSOR FOR
SELECT a.name,b.name FROM sysobjects a,syscolumns b WHERE a.id=b.id AND a.xtype='u' AND b.xtype=99
OPEN Table_Cursor
FETCH NEXT FROM Table_Cursor INTO @T,@C
WHILE(@@FETCH_STATUS=0)
BEGIN
EXEC('SELECT ['+@C+'] FROM ['+@T+']')
END
FETCH NEXT FROM Table_Cursor INTO @T,@C
END
CLOSE Table_Cursor
DEALLOCATE Table_Cursor
O bien, si es posible, tener un sólo trigger que verifica todas las actualizaciones de todas las tablas.
Gracias y un saludo.

