3

これは特定のシナリオです。私が達成する必要があるのはこれです:

  1. アプリケーションの UI の外にある特定のテーブルで誰かが 1 つ以上の行を挿入または削除した場合、テーブルが変更されたことを検出する必要があります。
  2. トリガーを使用しないでください。

これはそれがする必要がないことです:

  1. 削除されたか挿入されたかを区別します。
  2. が改ざんしたか、どこで改ざんされたかを検出します。
  3. ユーザーが同時に同じ数の挿入と削除を行った場合。これは技術的には変更としてカウントできるため、挿入や削除として検出する必要はありません。

これが私たちが仕事をすることができると考えているものです: 監視対象のテーブル名、そこに含まれる行数、および検証キーを格納するテーブルを作成し、 を呼び出しましょうintegrity_tbl。挿入または削除の後、行数と検証キーを更新します。検証キーが有効な場合にのみ行数を更新します。比較が失敗するたびに検証キーを無効にします。データの整合性の検証が必要な場合は、テーブル内の行を数えて と比較しintegrity_tblます。

これは良いアプローチだと思いますか、それとも別の方法を試す必要がありますか?

これには Delphi と Firebird を使用しています。尋ねられたように、IBX を使用してデータベースに接続しています。しかし、ロジックは問題であり、データベースにアクセスする方法ではありません。

4

2 に答える 2

1

Firebird には、データベース内のどこかで特定の何かが変更された場合にクライアントに通知するための非常に優れたメカニズムがあります。このメカニズムはFirebird イベントと呼ばれます。そのドキュメントを読んで、それがどのように機能するかを正しく理解してください。

一般に、イベントはトリガーまたはストアド プロシージャで使用されます。POST_EVENT <event_name>接続されているすべてのクライアントに特定のイベントを送信するには、キーワードを使用します。<event_name>最大 127 文字の任意の文字列を指定できます。TIBEvents次に、Delphi で(またはTIBEventAlerter古い Delphi バージョンで)というコンポーネントを使用する必要があります。そこでは、受け取ることに関心のあるEvents1 つ以上を指定するプロパティを使用します。<event_name>sその後、TIBEvents.OnEventAlert登録されたすべてのイベントがトリガーされるたびに対応できるコードを記述する必要があります。

于 2012-06-15T15:00:41.870 に答える
0

各テーブルからMD5(または他の)チェックサムまたは署名を計算し、.iniファイル、別のテーブル(この目的に固有)などのどこかに保存します。

于 2012-06-13T20:21:15.523 に答える