2012-03-11 8 views
0

ユーザー名とパスワード、および特定のユーザーがアクセスできるWebページを保持するようにデータベースを正規化しようとしています。 は、userpassword/accessデータベーステーブルを正規化するアドバイスが必要です

userpassword table(userid,username,userpassword) 
useraccess table(userid, accesstopage0,accesstopage1,accesstopage2,accesstopage3) 

が明らかuseraccessテーブルが危険にさらされている...これは、私は簡単のために始めたものですが、私は「useraccess」テーブルは、私が持っている2冊に応じて正規化の最初のルールに違反していると思われます手を出す。私の質問は...この問題を解決する最良の方法は何ですか?これまでのところ、これは私がuseraccessテーブルを置き換えるために出ているものですが、これを行うには、よりエレガントな方法があるかどうか私はいくつかのアドバイスをしたいと思います:

useraccess(userid,useridsequence,pageid) 
pages(pageid,pagename) 

ですから、例えばのようになります。.. 。

その後、整合性を維持するために複合キーとしてユーザーIDとuseridsequenceを使用して
userpassword table(userid,username,userpassword) 
0, useralpha, jinx 
1, userbravo, binx 
2, usercharlie, jabber 

...

useraccess table(userid, useridsequence, pageid) 
0, 0, 0 
0, 1, 1 
0, 2, 2 
1, 0, 3 
2, 0, 1 
2, 1, 2 

pages table(pageid,pagename) 
0, page0.php 
1, page1.php 
2, page2.php 
3, page3.php 

このすべては、それがある必要以上の方法より複雑なようですこれを行う良い方法は?

+0

どのような配列IDですか?あなたが実際に参加するために必要なのは、useridとpageidだけです。しかし、関係を管理しやすいように人工的なPKを考慮しているかもしれません。 – tvanfosson

+0

さて、あなたは本当にあなたが[塩漬けした(そして後味を付けた)ハッシュ]を保存することを望みます(http://security.stackexchange.com/questions/3272/password-hashing-add-salt-pepper-or-そのテーブルの実際のパスワードではなく、十分に塩があります)。 – steveax

+0

シーケンスID + useridでは、一意の行が得られます。私はSHA512ハッシュアルゴリズムとパスワードのための塩を使用しています。これはセキュリティよりもSQLのほうが多いため、私はそれを言っていませんでした。 –

答えて

0

ユーザとページの間に多数の多数の結合を表すuserpermissionsテーブルが必要です。

このテーブルには、そのページの権限レベルを定義する属性を含めることもできます。

ユーザーが主に同じ権限を持っている場合、役割の考え方(ゲスト、メンバー、管理者など)を導入し、ユーザーを役割にマッピングし、役割を権限にマッピングできます。

また、あなたのアプリケーションに損害を与えた人が貴重な資格を取得しないように、パスワードをハッシュして塩漬けする必要があります。

関連する問題