0

これはおそらく少し漠然としていますが、SO のすべての人々の中に、以前にこの種の問題に遭遇したことがある人がいることを願っています。

背景
私たちのアプリケーションは、列車の順序を制御する C# / .NET サービスです。LINQ-to-SQL を使用して、鉄道網の状態と列車の注文を SQL Server 2005 データベースに格納します。
COTS ソフトウェア自体は「信頼」できないという安全要件があります。

要件したがって、リスクは「SQL サーバーまたはオペレーティング システムが静的データまたは動的データを変更する」
として捉えられます。 私たちの義務: 「データベースに保存されたデータは、最後のコミット以降に変更されていないことをデータ アクセス コードによって確認できるように、読み取り時に検証する必要があります。」

この要件を満たす「自動魔法の」方法を見つけ
たいと思います。
それに失敗すると、計算されたハッシュを格納するためにデータベースのすべてのテーブルに列を作成する必要なしに条件を満たす方法 (読み取り時に検証する必要があります)。

4

2 に答える 2

1

読み取り時に、最後のコミット以降に変更されていないことをデータ アクセス コードで確認できます。

それは些細なことです。スナップショットを除くすべての非ダーティ リード分離レベルでは、読み取られたデータは最後にコミットされたデータです。定義上、最後のコミット以降に変更されていません (つまり、変更されている場合、新しい値最後のコミットです)。偶発的な変更 (要件に「OS がデータを変更する」と記載されているため) は「データの破損」と呼ばれ、ページ チェックサムまたはTDEによってキャプチャされます。

おそらく実際の要件は、アプリケーションに読み込まれてから DB で値が変更されていないことでしょうか? それからOptmistic Concurency Control、それだけです。UPDATE WHERE 句にすべての「古い」値を追加するだけで、自動的に処理されます。どの行も更新していない場合 (@@ROWCOUNT をチェックするか、OUTPUT 句を使用することでそれがわかります)、その行が変更されたことがわかります。プロアクティブ キャッシングも展開できます。

于 2010-11-16T09:11:37.887 に答える
1

メインデータと同じまたは異なるテーブルに保存されるMD5チェックサムのようなものかもしれません。チェックサムは C# アプリケーションによって生成されるため、誰かが生の SQL を使用して更新を行った場合、チェックサムはオフになります。

于 2010-11-16T08:20:45.567 に答える