Pregunta

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 adjuntar a cada base de datos.

Esto presenta un problema de auditoría. Usando disparadores, queremos almacenar cada actualización, insertarla y eliminarla y atribuirla a un usuario en particular. Una posible solución es agregar un " actualizado por el usuario " columna a cada tabla y actualícelo cada vez. Esto significa una nueva columna en cada tabla y un nuevo parámetro en cada procedimiento almacenado. También significa que solo puede hacer eliminaciones suaves.

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

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

¿Fue útil?

Solución

Utilizo SET CONTEXT_INFO para esto. Es justo lo que necesitas.

Otros consejos

Ciertamente parece una solución factible, aunque deberá inyectar el nombre de usuario en la cadena de conexión cada vez que se cargue su 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 provocar grandes problemas de agrupación de conexiones.

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

No necesitaría necesariamente un nuevo parámetro en cada procedimiento almacenado, ya que puede modificar cada procedimiento almacenado (o el desencadenante) 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_aplicación personalizado, y se quedará con " Microsoft Management Studio " como el usuario

Usamos la propiedad Nombre de la aplicación para controlar los disparadores 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 estamos auditando ciertas aplicaciones, por lo que es difícil medir cuánto tiempo lleva no hacer algo :))

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top