2009-07-16 3 views
2

内のレコードの値の整合性を確保しますか?はどのように(例えば、変更値のDBAを落胆)データベースのレコードは、中間層のソフトウェア以外で変更することはできないことを確認することができ、オープンソースのデータベース

私は、オープンソーススタックを使用して単純な多層会計プログラムを実装したいと考えています。アプリケーションの主な機能は、製品の支払いを追跡することです。データモデルの主要部分は、基本的にはこれです:彼/彼女がで行くと、様々な人のための金額を変更したり、不正な金銭の増加に置くことができるよう

CREATE TABLE ACCOUNT_LOG(
    USER_ID NVARCHAR2(128), /* user identifier of some sort */ 
    TIMEST TIMESTAMP,  /* the UTC timestamp of the payment. */ 
    PREV_AM NUMBER(13,3), /* the previous money level. */ 
    DIFF_AM NUMBER(13,3), /* the the money delta (+/- possible) */ 
    NEXT_AM NUMBER(13,3), /* the new money amount. */ 
    UOM  NVARCHAR(20) /* the money type (Euro, Dollar, etc.) */ 
CONSTRAINT pk PRIMARY KEY (USER_ID, TIMEST)); 

しかし、この構造は、DBAに脆弱です。

どのようにして(例えば他の手段の変化を検出する)この表のデータは、「のみ」中間層ソフトウェアによって変更することができることを、保証することができますか?私のプログラムはできるだけ安くでなければならないので、私はオープンソースのDBエンジンを使いたいと思います。

私は自分自身のアイデア(汚いやり方を)持っているが、私はあなたの意見/ベスト・プラクティスを聞きたいと思います。また、必要に応じて詳細をお尋ねください。

ありがとうございます。

+0

なぜDBAを阻止するのですか?ソフトウェアは彼自身の支払いを追跡します。 – akarnokd

+0

私は他のことを念頭に置いていましたので、私は自分のチャンスを増やすために恩恵を受けました。心配しないで、私はシステムが答えを自動的に受け入れるようにしません。 – akarnokd

+0

また、実装が多数の既存のコンピュータを再利用するので、アーキテクチャ自体に疑問を感じることは自由です。 – akarnokd

答えて

3

まず:あなたは顧客にすべてのコードを配るますので、それは本当に安全にする方法はありません。

第2の方法:努力と効果のバランスが良いとすれば、余分な列を追加して値を変更し、すべての値を連結し、秘密のパスワードを追加します(より良い用語'salt')、暗号ハッシュアルゴリズムを実行して結果を余分なフィールドに入れます。データを読むときは、すべてを繰り返し、値を比較します。もし彼らが値を手にした誰かに合っていなければ。

検出変化が十分でない場合、あなたはそれによって、元のデータのレクリエーションを可能にする、代わりにハッシュの暗号化アルゴリズムを使用することができます。

実際

あなたはこれはかなり節約になる可能性塩漬けと離れて顧客サイトからのハッシング、連結の実装を保持するオプションを持っている場合。あなたのサイトでハッシュを計算するための小さなツールを持っていることを明らかにする方法です。値を変更する必要がある場合、ユーザー/管理者は新しい正しいハッシュ値を取得するために連絡する必要があります。

もちろん

これだけ作品、変更の数が高いにではなく、あなたを郵送し、回答を得るために必要な長い時間がokです。

+0

ありがとうございます。私はそれがunhackableであることを望んでいませんでしたが、少なくとも非常に難しいとするのは難しいです。 – akarnokd

+0

+1データ全体を暗号化して並べて保存します。 – akarnokd

+0

理論的には、エントリ数は400 /日であり、大きな値ではありません。もう一度+1してください。 – akarnokd

0

DBAがデータを変更するのを防ぐためにいくつかのトリックを試すことができますが、そのようになるのはトリックです。もう1つのアプローチは、何らかの監査証跡を実装することです。ここでは、すべての変更をデータに記録します。

DBAはデータベース内のすべてのオブジェクトにアクセスできるため、使用しているメソッドを把握し、本当に必要な場合は無効にすることができます。これがDBAの意味です:この人はフルデータベースにアクセスできます。

+0

真、真。監査部について何か提案がありますか? – akarnokd

+0

私はあなたがle dorfierの答えをあなたに紹介することができます。彼は私よりもはるかに優れていると説明しました... – Treb

1

データベースの監査証跡として機能するトランザクションテーブルを使用して、すべてのデータベースアクティビティを実行するデザインを実装できます。タイムスタンプ列、ユーザーID、およびある種のコンテキストインジケータ(トランザクションを生成するためにどのような形式が使用されたかなど)が含まれている必要があります。また、シーケンス外のタイムスタンプを公開するために、

DBAは監査証跡を通じてトランザクションを実行できますが、少なくとも、監査ソースが変更のソースであることを(インタビューによって)確認することは可能です。

他のデータベースとは異なるトランザクションテーブルの権限を持つこともできますが、明らかにポリシーの問題があります。

変更が公開されていないことを確認して、変更を防止するよりも確認が容易な場合は、結果がより簡単になります。そして、人々はあなたが防止しようとしていることを行う正当な理由を発見することに熟達しているようです。

+0

データベースにDBAがあっても修正できない部分はありますか? – akarnokd

+0

私は願っていません。それはDBAの基本的な概念に違反します。 – dkretz

+0

最後のコンセプトは+1ですが、私はあなたの最後の文を完全に理解していません。そのような事例の例を教えてもらえますか? – akarnokd

関連する問題