0

アクセス制御リストを持つアプリケーションのユーザーがいます (これらは両方ともテーブル/スキーマ/オブジェクトです)。現在、これらはデータベースから読み込まれ、表示/操作できるものを示すためにブール値が使用されます。ただし、誰でもデータベースにアクセスしてデータを変更できます。誰かが私にできることについて何か提案をしてもらえますか? ユーザー (uname + pass) と acl (empui_access、empdat_manipulate) があることを明確に願っています。コードなどを介したあらゆる種類のセキュリティソリューション...

4

2 に答える 2

0

何かのようなもの

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

username はユーザー名、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

また、ユーザー レベルのアクセス許可のテストに加えて、ユーザーが属するグループをテストします。もちろん、いくつかのヘルパー関数 (ストアド プロシージャなど) を作成します。

これで始められたことを願っています。そうでない場合は、より説明的な例、より実際のコード、またはその他のヘルプを提供できます。

于 2009-05-26T10:54:21.290 に答える
-1

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

于 2009-05-26T14:30:38.890 に答える