2008-09-15 16 views
6

Quelqu'un sait-il d'un moyen de forcer un soupçon nolock sur toutes les transactions émises par un utilisateur? Je voudrais fournir une connexion à une équipe de support pour interroger le système de production, mais je veux le protéger en forçant un nolock sur tout ce qu'ils font. J'utilise SQL Server 2005.Comment forcer indicateur NOLOCK pour les connexions de serveur SQL

+0

Que sont-ils interrogent la base de données à travers? – GateKiller

+0

Typiquement, ils utiliseraient SQL Server Management Studio. Cependant, je sais que certains d'entre eux utilisent SQuirreL. – VanOrman

+0

Pouvez-vous clarifier ce que vous essayez d'accomplir ici? Essayez-vous de protéger les données de votre base de données? –

Répondre

8

Ceci est une façon douloureuse et hacky de le faire, mais il est ce que nous faisons où je travaille. Nous utilisons également l'asp classique, donc nous utilisons des appels inline sql. En fait, nous enveloppons l'appel sql dans une fonction (ici, vous pouvez vérifier pour un utilisateur spécifique) et ajouter "SET TRANSACTION ISOLATION LEVEL LIRE UNCOMMITTED" au début de l'appel.

je crois fonctionnellement c'est le même que l'indice sans verrouillage. Désolé je n'ai pas une réponse SQL pure, je serais intéressé d'entendre si vous trouvez un bon moyen de le faire.

+0

Faire ceci est probablement le meilleur moyen de leur permettre d'écrire n'importe quel sql qu'ils veulent tout en protégeant la base de données. – VanOrman

+0

Dois-je exécuter "SET TRANSACTION ISOLATION LEVEL LIRE UNCOMMITTED" à chaque requête? – Cheung

0

Vous pouvez créer un utilisateur limité pour l'équipe de soutien, puis soit écrire des procédures stockées ou des vues avec le nolock-indice. Ensuite, donnez seulement l'accès à ceux-ci et non à l'accès direct à la sélection de table.

0

Comme Espo a laissé entendre, je suis assez sûr qu'il n'y a pas moyen direct de faire ce que vous demandez. Comme il l'a dit, vous pouvez trier-de l'accomplir en limitant l'accès de l'utilisateur à seulement les procs qui ont intégré dans NOLOCK codé en eux.

11

Vous pouvez configurer votre gestion SQL personnel de soutien Studio pour définir le niveau d'isolation de transaction par défaut à READ UNCOMMITTED (Outils-> Options-> Requête Execution-> SQL Server-> Avancé). C'est fonctionnellement identique à avoir des astuces NOLOCK sur tout.

Les inconvénients sont que vous auriez à faire pour chaque membre de votre équipe de soutien, et ils auraient la possibilité de changer la configuration de leur SQL Management Studio.

+0

vous m'avez sauvé la vie –

0

Malheureusement, ce qui limite les utilisateurs de défaites SPs le but de cela. J'espérais qu'il y avait un moyen de leur permettre de tout interroger et ainsi améliorer leurs compétences de dépannage. Merci pour votre aide les gars.

1

OK, vous avez besoin de clarifier ce que vous essayez de faire ici.

Si vous essayez de réduire le verrouillage sur la base de données et peut-être fournir à vos utilisateurs de support avec des données qui ne peut jamais vraiment s'engagé dans la base de données. Tout en leur permettant d'écrire tout ce qu'ils veulent dans la base de données, nolock est la voie à suivre. Vous obtiendrez le bonus supplémentaire que votre utilisateur sera toujours en mesure d'augmenter leur niveau d'isolation en utilisant la commande SET TRANSACTION ISOLATION LEVEL. Si vous tentez de limiter les dégâts qu'ils peuvent occasionner lors de l'exécution de la base de données, veillez à implémenter la sécurité, assurez-vous qu'ils n'ont qu'un accès en lecture à vos tables et supprimez tout accès aux procs et fonctions stockés.

I Find NOLOCK est très mal compris en cas de débordement de pile.