承認のために実行されるクエリのSQL Server NOLOCK
-
08-07-2019 - |
質問
アプリケーションのログイン中に、ログインの検証中にいくつかのクエリが実行されました。それらを評価する際に、NOLOCKヒントなしでクエリの1つが実行されることに気付きました。
データはほとんど変更されないため、ダーティリードの危険性は特にないようです。
ログインの失敗を何度も試みる誰かによるDOSタイプの攻撃の試みから考えると、NOLOCKの欠如が失敗のしきい値を下げることを示唆しています。
これはDOS攻撃の結果としては非常に起こりにくいと思いますが(Webサーバーが先に行くと思います)、NOLOCKを追加することで、起こりそうにないものから不可能なものになります。
だから、私は過剰であるか、ささいなことですか?
解決
NOLOCKを持っているかどうかは、サーバーに対するDoS攻撃の心配が最も少ないことです。
私は汗をかかないでしょう。
あなたが言うように、データがめったに変更されず、NOLOCKがそこにあるとしても、おそらく問題はありません。
他のヒント
はい、あなたは過度にささいなことです。
DOS攻撃にさらされている場合、SQL認証呼び出しのNOLOCKが最も心配になりません。 DOS検出、障害追跡+スロットル、ユーザーに影響を及ぼさないが攻撃を減速させる計画的な一時停止でさえも実装します...
特に広範なトランザクションでそのクエリを頻繁に呼び出すと、NOLOCKによりパフォーマンスが向上する可能性があります。
ダーティリードの性質を考慮してください。それが発生する可能性のある時間枠は本当に重要ですか例えば承認された役割から誰かを追加または削除します。
追加シナリオでは、ダーティリードはその試行で失敗します。 (アクセス拒否)
削除シナリオでは、ダーティリードがその試みで機能します。 (アクセス許可)
手動操作でデータが変更された場合(例:人間の相互作用-「レイテンシー」のマージン通常、データベースよりもはるかに高い/不定です!
また非常にまれなケースですが、それでも:誰かがユーザーのログインを防ぐためにユーザーを非アクティブ化した瞬間に、NOLOCKがログインを許可します。 / p>
NOLOCKのパフォーマンス上の利点を無視するには、この特定のシナリオを気にする必要があります。
テーブルへのアクセス権を調べることで、テーブルをより良く保護できます。このようなテーブルでは、直接アクセスを許可しないでください。すべてのアクセスはストアドプロシージャからのものであり、代わりにアクセス許可が設定されている必要があります。