2

SqlLiteデータベースを使用していますが、アプリケーションの外部でデータが変更されていないことを確認したいと思います。(データに署名する)

sqliteはデータの最終変更日を保持していますか?

Windowsの最終更新ファイルの日付を使用することを考えていましたが、それが2番目の選択肢です。sqliteに、データのハッシュまたは最後に変更されたデータのタイムスタンプのいずれかを通知する方法があることを期待していました。

1つのオプションは、データベースファイルのバイトのすべての内容のハッシュを計算することです。これにより、ファイルが誰によっても変更されていないことを保証できます。しかし、これは費用がかかるため、データベースを変更した外部ソースがないことを確認するためのより良い方法を見つけたいと思っています。

もう1つのオプションはデータベースを暗号化することですが、データを変更するのではなく、サードパーティがデータを読み取れるようにするため、これは理想的ではありません。

Windows7のWPF.netクライアントアプリケーションでSystem.Data.Sqliteを使用してデータベースにアクセスしていることに注意してください。

4

1 に答える 1

0

あなたにできることはあまりないと思います。防御の最前線では、いくつかのトリガーを置くことができます

CREATE TRIGGER before_ins_on_table1 BEFORE INSERT ON table1
BEGIN SELECT RAISE( FAIL, 'Not allowed.' ) ; END;

CREATE TRIGGER before_del_on_table1 BEFORE DELETE ON table1
BEGIN SELECT RAISE( FAIL, 'Not allowed.' ) ; END;

CREATE TRIGGER before_upd_on_table1 BEFORE UPDATE ON table1
BEGIN SELECT RAISE( FAIL, 'Not allowed.' ) ; END;

しかし...

データベースにデジタル署名するか、SHA1 ハッシュをプログラムに埋め込んで、ハッシュが一致しない場合にデータベースの使用を拒否することができますが、これは一般的に役に立ちません。

簡単に言えば、データベースが読み取り可能であれば、誰かがデータベースを改ざんしようとするのを止めることはできません。攻撃者は単純にデータをダンプしてから、制限なしで新しいデータベースに復元できます。

于 2012-06-03T01:33:08.847 に答える