特定のユーザーによって発行されたすべてのトランザクションに nolock ヒントを強制する方法を知っている人はいますか? サポート チームが本番システムにクエリを実行するためのログインを提供したいのですが、サポート チームが行うすべてのことに対して強制的にロックを解除して保護したいと考えています。SQL Server 2005 を使用しています。
6 に答える
サポート スタッフの SQL Management Studio を構成して、既定のトランザクション分離レベルを READ UNCOMMITTED に設定することができます ([ツール] -> [オプション] -> [クエリの実行] -> [SQL Server] -> [詳細設定])。これは機能的には、すべてに NOLOCK ヒントを設定するのと同じです。
欠点は、サポート チームの各メンバーに対してこれを行う必要があり、彼らは SQL Management Studio の構成を変更できることです。
これは面倒でハックな方法ですが、私が働いているところではそうしています。また、従来の ASP を使用しているため、インライン SQL 呼び出しを使用しています。実際に SQL 呼び出しを関数でラップし (ここで特定のユーザーを確認できます)、呼び出しの先頭に「SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED」を追加します。
機能的には、これはロックなしのヒントと同じだと思います。申し訳ありませんが、純粋な SQL の回答がありません。これを行う良い方法を見つけたら、ぜひ聞いてみたいと思います。
OK、ここで何をしようとしているのかを明確にする必要があります。
データベースのロックを減らし、データベースで実際にコミットされることのないデータをサポート ユーザーに提供しようとしている場合。データベースに好きなものを書き込むことを許可している間は、nolock が最適です。ユーザーが SET TRANSACTION ISOLATION LEVEL コマンドを使用して分離レベルを上げることができるという追加のボーナスが得られます。
DBに対して何かを実行するときに引き起こされる可能性のある損害を制限しようとしている場合は、セキュリティの実装を検討し、テーブルへの読み取りアクセスのみが許可されていることを確認し、ストアドプロシージャと関数へのすべてのアクセスを削除することを確認してください.
スタック オーバーフローに関して NOLOCK が大きく誤解されていることがわかりました。
サポート チーム用に限定ユーザーを作成し、nolock-hint を使用してストアド プロシージャまたはビューを作成することができます。次に、直接のテーブル選択アクセスではなく、それらへのアクセスのみを許可します。
残念ながら、ユーザーを SP に制限すると、この目的が無効になります。私は、彼らがすべてを照会できるようにして、トラブルシューティングのスキルを向上させる方法があることを望んでいました. 助けてくれてありがとう。
Espo がほのめかしたように、あなたが求めていることを直接実行する方法はないと確信しています。彼が言ったように、ユーザーのアクセスを組み込みの NOLOCK がコード化されている proc のみに制限することで、それを達成することができます。