2011-10-24 20 views
6

Necesito una forma de auditar cuando alguien intenta HABILITAR o DESACTIVAR un desencadenador en nuestra base de datos. La alternativa DDL gatillo funciona muy bien, pero sólo bajo la condición para que cuando el usuario utilizaAuditoría para DISABLE/ENABLE Disparadores EN SQL

ALTER TABLE <tableName> ENABLE TRIGGER <triggerName> 

O

ALTER TABLE <tableName> DISABLE TRIGGER <triggerName> 

comunicado. Por lo que he determinado, el método DDL hace inútil si el usuario ejecuta las siguientes afirmaciones que no utilizan el comando ALTER:

DISABLE TRIGGER <triggerName> ON <tableName> 
ENABLE TRIGGER <triggerName> ON <tableName> 

he tenido varios pensamientos en la captura de estos eventos ninguno de ellos funciona. Uno de los cuales era si podía acceder a la tabla subyacente a la vista sys.triggers, podría colocar un disparador de inserción/actualización en esa tabla y filtrar el nombre del disparador para adquirir la auditoría; pero mi sospecha es que probablemente conduciría a una recursión infinita incluso si fuera posible.

¿Alguien aquí tiene alguna sugerencia posible para soluciones alternativas a este problema? No entiendo por qué MS permitiría versiones mejoradas de declaraciones para escapar del alcance de las auditorías. Es decir, auditar desde los métodos más simples; el uso del perfilador de SQL parece ser innecesario para esto.

+0

Wow, ¿está diciendo que la sintaxis ENABLE TRIGGER ... ON ... pasa por alto a SQL 2008 DDL Audit? http://msdn.microsoft.com/en-us/library/dd392015(v=sql.100).aspx – StuartLC

+0

Just DML se desencadena presumiblemente como si alguien pudiera deshabilitar los desencadenadores DDL; también pueden deshabilitar su desencadenante de auditoría. Esto está registrado en la traza predeterminada, creo. –

+0

Sí, si alguien desactivó mi desencadenador DML con la sintaxis DISABLE TRIGGER ON , entonces no tendría forma de capturar ese evento mediante un desencadenador DDL. – Mark

Respuesta

5

En primer lugar abordaría esto a través de permisos. Nadie, excepto algunos dbas, debe tener permisos de tabla de modificación en prod y, por lo tanto, no puede usar enable o disable trigger. Si una aplicación lo está usando, eso debería detenerlo. No hay excusa para que ningún usuario tenga que modificar las tablas. Si quieres hacer eso, probablemente tienes un defecto de diseño. Si tienes personas que realmente desactivan los desencadenantes, definitivamente tienes un defecto de diseño. Cualquier código con un activador de desactivación debe ser una gran bandera roja durante la revisión del código. Debería ser inaceptable desactivar un desencadenador en el código de la aplicación. Esto es algo que solo debe hacer dbas que tenga la experiencia para saber cuándo hacerlo. Si está escribiendo un código de aplicación y parece necesitar deshabilitar un desencadenante para que funcione su código, entonces su código es incorrecto o el desencadenador necesita ser reescrito, deshabilitar desencadenadores debería ocurrir solo en los casos más raros.

+0

Ojalá pudiera volver a votar. SQL no está roto porque no se puede auditar a las personas que desactivan los desencadenantes, la política se rompe porque las personas que no son de confianza tienen demasiado poder. –

+0

Si bien todos tienen derecho a sus propias opiniones y también estoy de acuerdo en que la gobernanza del sistema es igualmente importante; Estoy totalmente en desacuerdo con la imposibilidad de auditar este tipo de evento como un defecto. Decir eso implicaría que la capacidad de auditar el evento idéntico, aunque con una sintaxis diferente, es un lujo en comparación con una herramienta de seguridad. De lo contrario, ¿por qué no simplemente eliminar por completo la auditoría de desencadenantes del modelo DDL? Otro aspecto secundario de esto es que sea un defecto de las políticas de gobernanza o no; saber quién está ejecutando eventos en su sistema es un imperativo. – Mark

+0

Estoy de acuerdo en que es un defecto, pero permitir que las personas tengan los derechos de hacer tales cosas es un defecto mayor. – HLGEM

Cuestiones relacionadas