trigger logon for after sql-server triggers connection-string audit

sql-server - for - trigger logon sql



Servidor SQL: modificación de la propiedad "Nombre de la aplicación" para fines de auditoría (3)

Sin duda, parece una solución viable, aunque necesitará inyectar el nombre de usuario en la cadena de conexión cada vez que se cargue la aplicación. Tenga en cuenta que esta solución probablemente no funcionaría con una aplicación web, ya que su cadena de conexión será diferente cada vez, lo que podría ocasionar enormes problemas de agrupación de conexiones.

Otra opción es recuperar el nombre de host / dirección IP (SELECT host_name ()) y almacenar eso en su lugar.

No necesitaría necesariamente un nuevo parámetro en cada procedimiento almacenado, ya que puede modificar cada procedimiento almacenado (o el desencadenador) para insertar automáticamente el nombre de aplicación / nombre de host.

Un posible inconveniente es que cualquier modificación realizada a través de Management Studio no tendrá el nombre de aplicación personalizado, y se le dejará "Microsoft Management Studio" como usuario.

Como no implementamos a los usuarios de nuestras aplicaciones como usuarios en el servidor SQL, cuando el servidor de aplicaciones se conecta a una base de datos, cada aplicación siempre usa las mismas credenciales para adjuntarlas a cada base de datos.

Esto presenta un problema de auditoría. Mediante el uso de desencadenantes, queremos almacenar cada actualización, insertar y eliminar, y atribuir cada una a un usuario en particular. Una posible solución es agregar una columna "actualizado por usuario" a cada tabla y actualizar esto cada vez. Esto significa una nueva columna en cada tabla y un nuevo parámetro en cada procedimiento almacenado. También significa que solo puedes hacer eliminaciones suaves.

En lugar de esto, propongo usar la propiedad Nombre de la aplicación de la cadena de conexión y leer esto con la propiedad App_Name () dentro del desencadenador. Probé esto con una aplicación simple y parece funcionar (el formato podría ser así: App = MyApp | User = 100).

La pregunta para ustedes es: ¿es esta una mala idea y tienen una mejor?


Usamos la propiedad Nombre de aplicación para controlar los desencadenantes de auditoría y no hemos visto ningún problema al usarla, y no hemos notado ningún problema de velocidad (aunque en nuestro caso, específicamente no auditamos para ciertas aplicaciones, por lo que es difícil medir cuánto el tiempo que no hace algo lleva :))