Database 评论我的身份验证系统数据库模式?

Database 评论我的身份验证系统数据库模式?,database,authentication,schema,authorization,Database,Authentication,Schema,Authorization,我正在设计一个RESTful Web应用程序,它将为其他几个应用程序提供身份验证系统。其他应用程序将通过HTTP查询此应用程序,并返回描述已验证用户的XML 认证应用程序需要跟踪哪些用户被允许在哪些应用程序上做什么。 我正在制定数据库模式。下面是我的初步设计。(假设每个表都有一个id列。) 这个想法是说有人试图在“设备清单”应用程序中执行管理功能。因此,“设备清单”会告诉身份验证系统“获取用户名为xxx、密码为yyy的用户”。然后它会查看返回的(通过ActiveResource)user对象,并

我正在设计一个RESTful Web应用程序,它将为其他几个应用程序提供身份验证系统。其他应用程序将通过HTTP查询此应用程序,并返回描述已验证用户的XML

认证应用程序需要跟踪哪些用户被允许哪些应用程序上做什么。

我正在制定数据库模式。下面是我的初步设计。(假设每个表都有一个
id
列。)

这个想法是说有人试图在“设备清单”应用程序中执行管理功能。因此,“设备清单”会告诉身份验证系统“获取用户名为xxx、密码为yyy的用户”。然后它会查看返回的(通过ActiveResource)
user
对象,并检查其
roles
数组是否包含名为“ADMIN”的
Role
它本身属于一个名为“设备库存”的
应用程序
对象

或者,最好取消
应用程序
表,并具有更多的角色,例如“
设备库存管理”
”、“
设备库存只读”、“
作业跟踪管理”
”等


更重要的是,规范化应用程序实体还是简化表结构?也许在所有这些输入之后,我刚刚回答了我自己的问题,但是评论或建议将是最受欢迎的。

就个人而言,我倾向于在规范化方面犯错。至少在我的经验中,一些额外的模块被添加了下来。根据需要在应用程序和全新表中添加一行,然后编辑现有模式并更新所有相关的数据访问代码,这将更加容易

编辑:再次查看,您可以合并roles表和roles\u users表。它可以是一个定义角色以及用户如何访问每个应用程序的地方。

模式看起来很正常, 你会送

abcxyz51

你回来了吗


abc
123456464
设备清单
3.1.5e
管理
经理
数据输入


明确地将身份验证与授权分开。(看起来您正在这样做;“user”表属于身份验证,rest+user.id属于授权)

密码:你没有把它们储存在安全的地方,是吗?存储MD5哈希(+以防止攻击)将更加安全


有可能吗?(也许可以将其作为传输层在HTTP上工作)

我不会合并表,这是一种多对多关系。MD5哈希不再被认为是安全的。我建议使用SHA-256或SHA-512。目前可以找到两个生成相同MD5哈希的明文,而无需任何先决条件。这对数字签名有影响。我不知道在给定明文的情况下,有人可以通过哈希冲突高效地找到另一个明文。在任何情况下,添加salt(特别是如果salt的一部分以更安全的形式与数据库分开存储)都会使破解密码变得更加困难,因为您无法合理地评估脱机密码成功。(被迫使用相关服务,速度相对较慢)
applications  # The various client apps that will query this auth system.
------------
name

users         # Table simplified for discussion
-----
username
password
email

roles
-----
name
application_id

roles_users
-----------
role_id
user_id