2009-05-26 15 views
0

アクセス制御リストを持つアプリケーション用のユーザーがあります(これらは両方とも表/スキーマ/オブジェクトです)。現在、これらはデータベースから読み取られ、ブール値は、表示/操作できる内容を示すために使用されます。ただし、誰でもデータベースにアクセスしてデータを変更することはできます。誰かが私が何をすることができるかについていくつかの提案をすることができますか?ユーザー(uname + pass)とacl(empui_access、empdat_manipulate)があることがわかりました。コードなどを経由して任意のちょっとセキュリティソリューション...データベースのアクセス制御リストのセキュリティ設計に関する提案?

+0

あなたはどのデータベースを使用していますか? SQLサーバー? MySQL?オラクル?さまざまな権利がありますか?多くのユーザーですか?各権利のアクセスレベルは異なりますか? – DonkeyMaster

+0

データベースを心配する必要はありません。これはコーディングデザインに関連しています。 – abmv

答えて

0

何か

table users 
username: string 
password_hash: hex 
acl: bit array 

のようなユーザ名がユーザ名で、password_hashは塩の粒で、パスワードのハッシュです。プレーンなパスワードを保存するのは間違いですが、あなたはすでにそれを知っていましたか?

ACLは文字列として宣言されますが、ビット配列として使用されます。 各ビットは特定の許可を表します。 1はユーザーが許可を持っていることを意味し、0は彼が許可していないことを意味します。特定のビットの値を調べるには、aclでビット単位でANDを行います。結果がゼロでない場合、アクセスが許可されます。結果がゼロの場合、アクセスは拒否されます。例えば

// permission to read employee data 
public const long READ_EMPL_DATA = 0x01 

... 
{ 
    User user = database.GetSomeUser(); 
    // test for READ_EMPL_DATA permission 
    if (0 != (user.ACL & READ_EMPL_DATA)) { 
     // access granted 
    } else { 
     // access denied 
    } 
    // give READ_EMPL_DATA permission 
    if (0 != (user.ACL & READ_EMPL_DATA)) 
     user.ACL = user.ACL & READ_EMPL_DATA 
} 

、グループのサポートを追加するカップルのテーブルを追加します。

table group 
groupname: string 
acl: bit array 

table user_group 
user_id: id 
group_id: id 

さらに、ユーザーレベルのアクセス許可のテストに加えて、ユーザーが所属するグループをテストします。もちろん、ヘルパー関数、おそらくストアドプロシージャを記述します。

これはあなたが始めたことを望みます。そうでない場合は、わかりやすい例、より多くの実際のコード、またはその他のヘルプを提供することができます。

+0

誰かがあなたのビット配列を変更することはできません(私は前にそれを使用していました)dbから、それはユーザーの権利を変更することができますか? – abmv

+0

それは別のタイプの問題です。はい、適切な権限を持つユーザーがその値を変更する可能性があります。しかし、再びその人はパスワードを変更することができます。それはあなたのデータベースを保護することに関するものであり、SQL Serverはすでにそのための解決策を持っています。たとえば、ゲストのユーザーに3つのテーブルのアクセス権を与えることができますが、書き込み権限を持たないユーザーは変更できません。 – DonkeyMaster

+0

このaclはdbとは関係ありません。これはビジネス要件です – abmv

-1

これはPostgreSQLに固有ですが、おそらくVeilから良いアイデアを得ることができます。

関連する問題