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