如何在DB中组织用户凭据?

时间:2012-10-23 19:00:08

标签: mysql store credentials

在MySQL数据库中存储用户凭据的最佳方法是什么。 我的意思是结构,而不是数据(哈希与干净文本)。

我有我们的网站

Root Admin (1)

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

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

以上用户在后页登录

Users (N)

用户登录网站前端

N - 表示无限

猜猜我的问题是我应该把所有管理员都放在同一张桌子里吗?但雇主并不像客户管理员那样受信任。

如果我将管理员放在不同的表中,我如何在PHP中进行身份验证?从两个表中获取数据并合并到数组中,如果用户存在,则查看数组?

4 个答案:

答案 0 :(得分:3)

如果您只有一个root /客户端管理员,我建议您单独存储他们的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

答案 1 :(得分:1)

一种方法是将身份验证/用户配置文件数据与其可能的角色数组分开。因此,为您的用户分配角色。地狱,为你的角色分配背景。我看到它的方式,你在用户和角色之间有一对多的关系,其中为角色分配了一个上下文(管理员,客户管理员,一般管理员......)。

答案 2 :(得分:0)

根据我对它们的信任程度,我不会仅使用多个表来分隔用户。在您的案例中阅读了您的问题和评论之后,您必须为根管理员,客户管理员,雇主管理员和普通用户创建单独的表,因为您的信任级别对于每个组都不同。当您开始编码时,即使只有两个表格,实施/维护也会变得非常难看......

你似乎非常坚定地使用单独的表,如果你选择这样做,你可以“隐藏”这些技术,例如,创建一个视图来合并这些表,在你的DAO中使用SQL union,或读取每个表并以编程方式合并数据等。再次,在您构建应用程序时,您很可能会遇到此设计的问题。

我宁愿为users使用单个表,并引入roles的概念,它们之间存在多对多关系。在创建用户时,我会将每个用户与默认角色(例如,用户 root-admin 具有 root-admin 等角色)以及任何其他角色相关联。它们似乎很合适(例如,用户 cleint-admin 还有 client-sub-admin 等附加角色)。根据要求,可能存在不具备的角色直接涉及用户,例如。 来宾成员

我还会介绍应用程序contexts的概念,其中包含与角色可选的多对多关系,然后最初将角色 root-admin 与应用程序上下文关联 all 意味着他/她没有任何限制。将根据业务需求创建其他上下文(例如,角色雇主 - 管理员是上下文雇员 - 员工等的一部分。)

授权时,安全管理器组件可以根据用户及其关联的角色/上下文授予/拒绝访问权限,并在必要时包含其他逻辑(例如,禁用用户)。

您的下一个问题是您为某些用户提供了不适用于其他用户的其他数据。为了解决这个问题,我将向profiles表引入一个与users表可选的一对一关系(并非每个用户都有一个配置文件,例如user root-admin 不是)。

架构(草案):

 __________________                    __________________
|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               |                  |                  |
|...               |                  |                  |
|__________________|                  |__________________|

答案 3 :(得分:0)

我在这篇文章中描述了一个用户和组权限系统(忽略标题 - 原来的问题措辞不当): Applying column permissions for a table over a trigger