0
我想正常化数据库以保存用户名和密码,以及特定用户有权访问哪些网页。这是我开始为简单起见,但我认为“useraccess”表违反根据2本书我有正常化的首要原则...需要建议正常化用户密码/访问数据库表
userpassword table(userid,username,userpassword)
useraccess table(userid, accesstopage0,accesstopage1,accesstopage2,accesstopage3)
显然useraccess表是在危险失控。我的问题是......解决这个问题的最好方法是什么?到目前为止,这是我拿出来代替useraccess表,但我想上如果有一个更优雅的方式做一些这方面的建议:
useraccess(userid,useridsequence,pageid)
pages(pageid,pagename)
因此,一个例子是.. 。
userpassword table(userid,username,userpassword)
0, useralpha, jinx
1, userbravo, binx
2, usercharlie, jabber
然后使用用户名和useridsequence作为复合键保持正直......
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
所有这一切似乎方式复杂得多,它需要的是有一个更好的方法来做到这一点?
什么是序列标识?所有你真正需要的连接是userid和pageid,尽管你可能会考虑一个人为的pk来轻松管理关系。 – tvanfosson 2012-03-11 20:25:36
顺便说一句,我希望你真的要存储一个[盐渍(胡椒粉)散列](http://security.stackexchange.com/questions/3272/password-hashing-add-salt-pepper-or-是足够的),而不是该表中的实际密码。 – steveax 2012-03-11 20:29:12
使用序列标识+用户标识可以获得唯一的行。我正在使用SHA512哈希算法,并为密码添加salting。我没有这么说,因为这是关于sql而不是安全的。 – 2012-03-11 20:33:16