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.