2012-10-23 25 views
1

在MySQL数据库中存储用户凭证的最佳方法是什么? 我的意思是结构,而不是数据(散列与干净文本)。如何在数据库中组织用户凭证?

我有网站,我们得到了

Root Admin (1) 

Client Admin (1) 
Client Sub-Admins (N) 

Employer Admin (N) 
Employer Sub-Admins (N) 

以上的用户登录在后台页面

Users (N) 

用户登录在网站

N个前端 - 意味着无限

猜我的问题是我应该把所有的管理员放在同一个表中?然而,雇主并不像客户管理员那样信任。

如果我把管理员在不同的表,我如何在PHP做认证?从两个表中取数据并合并到数组中,然后在数组中查看用户是否存在?

+0

有管理员和用户之间的这种根本区别,你不能只拥有“排名”字段? –

+0

在我看来,在同一个表格或甚至相同的登录页面中拥有用户和管理员并非上帝的安全做法。 此外,如果页面和表不同,我可以限制管理页面的IP地址只有信任的人。 –

+0

功能上的差异,管理员不会和用户做同样的事情,我们也不需要把自己与用户表中的管理条目混淆起来。 关于所有管理员管理员需求是用户名和密码相反的联系信息地址日期等进入用户表。 –

回答

1

一种方式做到这一点是向认证/用户简档数据从角色及其可能的阵列分离。所以,为用户分配角色。地狱,分配上下文到你的角色。我看到它的方式,你有用户和角色之间的1对多的关系,其中角色被分配上下文(雇主的联系,客户的管理,一般管理...)。

+0

,如果您需要为管理员保存比普通用户所需更多的信息,请从STI运行,并使用类表继承。 http://community.devexpress.com/forums/p/95346/327589.aspx它似乎只是用例。 – ChuckE

3

如果你永远只能去有一个根/客户端管理,我建议干脆单独存储其user_id值,可能在配置文件中是难以通过像SQL注入来修改。否则,下面的方案应该允许您有相当大的灵活性,可以根据需要将尽可能多的用户分配到多个用户组。

TABLE users 
    user_id INT PK AUTO_INCREMENT 
    user_name VARCHAR 
    user_password VARCHAR 
    ... 

TABLE groups 
    group_id INT PK AUTO_INCREMENT 
    group_name VARCHAR 
    [possible permissions declarations, 
    or create a similar group_perms table] 
    ... 

TABLE user_group_map 
    user_id INT PK 
    group_id INT PK 
0

我不会用多个表只是基于我是多么信任他们的独立用户。在你的案例中阅读你的问题和评论后,你将不得不为根管理员,客户管理员,雇主管理员和普通用户创建单独的表,因为你的信任级别对于每个组都是不同的。即使只有两个表格,开始编码时,实施/维护可能会变得非常难看......

您似乎非常坚定地决定使用单独的表格,如果您选择这样做,那么您可以“隐藏”这一点,例如,创建一个视图,再合并这些表,在你的DAO使用SQL工会,或读取每个表和合并程序的数据等,为您打造您的应用程序,你将极有可能与此设计问题。

我宁愿使用单个表格users,并介绍roles的概念以及它们之间的多对多关系。在创建用户时,我会将每个用户与默认角色(例如,用户根管理员具有角色根管理员等)以及他们似乎适合的任何其他角色相关联(例如,用户cleint -admin具有基于需求客户子管理等)的其他角色有可能是不涉及直接的用户,如角色。 客人构件

我也将推出应用contexts的概念,一个可选的多对许多关系到角色那么最初的作用根管理员与应用程序上下文所有意思是s关联他/她没有任何限制。其他上下文将根据业务需求来创建(例如,角色雇主管理员是上下文分期付款员工等部分)的基础上

授权时,安全管理器组件可以授予/拒绝访问用户及其相关的角色/上下文(如果需要,还包括附加的逻辑)(例如用户被禁用)。

您的下一个担心是您有某些用户的其他数据不适用于他人。为了解决这个问题,我会介绍profiles表与可选的一对一关系的用户表(不是每个用户都有一个配置文件,例如,用户根管理员不)。

架构(草案):

__________________     __________________ 
|USERS    |     |ROLES    | 
|==================|     |==================| 
|id    |     |id    | 
|username   | 1..*  1..* |name    | 
|password   | -------------- |description  | 
|failedattempts |     |...    | 
|disabled   |     |     | 
|...    |     |     | 
|__________________|     |__________________| 

     | 1         | 0..* 
     |          | 
     |          | 
     |          | 
     | 0..1        | 0..* 
__________________     __________________ 
|PROFILES   |     |CONTEXTS   | 
|==================|     |==================| 
|id    |     |id    | 
|firstname   |     |name    | 
|lastname   |     |description  | 
|email    |     |...    | 
|dob    |     |     | 
|...    |     |     | 
|__________________|     |__________________|