Pergunta

Alguém conhece uma maneira de forçar uma dica nolock em todas as transações emitidas por um determinado usuário?Gostaria de fornecer um login para uma equipe de suporte consultar o sistema de produção, mas quero protegê-lo forçando um nolock em tudo o que eles fazem.Estou usando o SQL Server 2005.

Foi útil?

Solução

Esta é uma maneira dolorosa e complicada de fazer isso, mas é o que estamos fazendo onde trabalho.Também estamos usando asp clássico, então estamos usando chamadas sql in-line.na verdade, envolvemos a chamada sql em uma função (aqui você pode verificar se há um usuário específico) e adicionamos "SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED" ao início da chamada.

Acredito que funcionalmente seja igual à dica sem bloqueio.Desculpe, não tenho uma resposta SQL pura. Gostaria de saber se você encontra uma boa maneira de fazer isso.

Outras dicas

Você pode configurar o SQL Management Studio da sua equipe de suporte para definir o nível de isolamento de transação padrão como READ UNCOMMITTED (Ferramentas->Opções->Execução de Consulta->SQL Server->Avançado).Funcionalmente, isso é o mesmo que ter dicas do NOLOCK sobre tudo.

A desvantagem é que você teria que fazer isso para cada membro da sua equipe de suporte e eles teriam a capacidade de alterar a configuração no SQL Management Studio.

OK, você precisa esclarecer o que está tentando fazer aqui.

Se você estiver tentando reduzir o bloqueio no banco de dados e possivelmente fornecer aos usuários de suporte dados que talvez nunca sejam realmente confirmados no banco de dados.Embora permita que eles escrevam o que quiserem no banco de dados, nolock é o caminho a seguir.Você receberá o bônus adicional de que seu usuário ainda poderá aumentar seu nível de isolamento usando o comando SET TRANSACTION ISOLATION LEVEL.

Se você está tentando restringir os danos que eles podem causar ao executar coisas no banco de dados, considere implementar a segurança, certifique-se de que eles só tenham acesso de leitura às suas tabelas e remova todo o acesso aos processos e funções armazenados.

Acho que NOLOCK é muito mal compreendido no estouro de pilha.

Você pode criar um usuário limitado para a equipe de suporte e, em seguida, escrever procedimentos armazenados ou visualizações com nolock-hint.Em seguida, conceda acesso apenas a eles e não ao acesso direto à seleção de tabela.

Como Espo sugeriu, tenho certeza de que não há uma maneira direta de fazer o que você está pedindo.Como ele disse, você pode fazer isso limitando o acesso do usuário apenas a procs que possuem NOLOCK integrado codificado neles.

Infelizmente, restringir os usuários aos SPs vai contra o propósito disso.Eu esperava que houvesse alguma maneira de permitir que eles consultassem tudo e, assim, aprimorassem suas habilidades de solução de problemas.Obrigado pela ajuda pessoal.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top