with tablock sirve readuncommitted que para lock index sql sql-server security sql-server-2005 query-optimization

tablock - with index sql server



Cómo forzar la pista de nolock para inicios de sesión de servidor SQL (6)

¿Alguien sabe de una manera de forzar una pista de nolock en todas las transacciones emitidas por un determinado usuario? Me gustaría proporcionar un inicio de sesión para que un equipo de soporte consulte el sistema de producción, pero quiero protegerlo forzando un bloqueo automático en todo lo que hacen. Estoy usando SQL Server 2005.


Como insinuó Espo, estoy bastante seguro de que no hay una manera directa de hacer lo que estás pidiendo. Como dijo, puedes ordenarlo limitando el acceso del usuario a solo los procesos que tienen codificado NOLOCK incorporado.


De acuerdo, debes aclarar qué estás tratando de hacer aquí.

Si está tratando de reducir el bloqueo en la base de datos y, posiblemente, proporcionar a sus usuarios de soporte datos que posiblemente nunca se comprometan en la base de datos. Mientras les permite escribir cualquier cosa que deseen a la base de datos, entonces nolock es el camino a seguir. Obtendrá la ventaja adicional de que su usuario podrá aumentar su nivel de aislamiento utilizando el comando SET TRANSACTION ISOLATION LEVEL.

Si intenta restringir el daño que pueden causar al ejecutar cosas en la base de datos, consulte la implementación de la seguridad, asegúrese de que solo se les permita el acceso de lectura a sus tablas y considere eliminar todo el acceso a los procesos y funciones almacenados.

I Find NOLOCK es muy mal entendido en el desbordamiento de la pila.


Desafortunadamente, restringir los usuarios a SPs frustra el propósito de esto. Esperaba que hubiera alguna manera de que les permitiera consultar todo y mejorar así sus habilidades de resolución de problemas. gracias por su ayuda chicos.


Esta es una forma dolorosa y hacky de hacerlo, pero es lo que estamos haciendo donde trabajo. También usamos ASP clásico, así que estamos usando llamadas sql en línea. de hecho ajustamos la llamada sql en una función (aquí puede verificar para un usuario específico) y agregamos "SET TRANSACTION ISOLATION LEVEL LECT UNCOMMITTED" al comienzo de la llamada.

Creo que funcionalmente esto es lo mismo que la pista sin bloqueo. Lo siento, no tengo una respuesta pura de SQL, me gustaría saber si encuentras una buena manera de hacerlo.


Puede crear un usuario limitado para el equipo de soporte y luego escribir procedimientos almacenados o vistas con la pista nolock. A continuación, solo dé acceso a esos y no dirija el acceso de selección de tabla.


Puede configurar el SQL Management Studio del personal de soporte para establecer el nivel de aislamiento de transacción predeterminado en LEER SIN COMPROMISO (Herramientas-> Opciones-> Ejecución de consulta-> Servidor SQL-> Avanzado). Esto es funcionalmente lo mismo que tener sugerencias de NOLOCK en todo.

Las desventajas son que tendrías que hacer esto para cada miembro de tu equipo de soporte, y tendrían la capacidad de cambiar la configuración en su SQL Management Studio.