我是否应该出于任何原因允许超级管理员通过用户界面查看用户的密码?

时间:2011-11-07 11:17:55

标签: user-interface permissions admin roles

目前我正在开发一个具有3个角色的应用程序:1个用于客户,1个用于公司员工,另一个用于超级管理员。

允许超级管理员用户通过用户界面查看/编辑用户密码是一种好习惯吗?或者它应该只通过DB直接修改?

更新:我使用的是asp.net会员提供程序和MySQL。因此,DB中有一个名为 my_aspnet_membership 的表,它存储两个字段:Password和PasswordKey。 PasswordKey字段似乎是加密密码。但是,“密码”字段以纯文本格式存储。那么,任何人都可以告诉我为什么这是以这种方式设计的,如果它不是一个好的做法?谢谢大家的回复!

更新:对于那些询问是否真的将密码存储在两个不同字段中的人:

enter image description here

6 个答案:

答案 0 :(得分:3)

您的密码不应以未加密的方式存储在数据库中,因此,UI用户或数据库都不应该看到。

至于它是否应该可修改,当然。

在这种情况下,应通过用户或管理员请求重新生成密码。同样,这应该在数据库中加密。我的偏好是为用户自动生成新密码,而不是让管理员自己输入密码。

鉴于此,直接在数据库中更改密码的唯一方法是在插入之前先加密密码。通过处理加密的UI可以更快地完成此任务。

<强>更新

在回答您的更新时,您应该在web.config中指定密码格式为哈希值:

<providers>
<add [...]
    passwordFormat="Hashed"
/>
</providers>

如下所述:

http://msdn.microsoft.com/en-us/library/ff648345.aspx

答案 1 :(得分:2)

在任何情况下,都没有理由允许某人查看他们不拥有的密码。

OP更新的更新:当然我无法知道为什么你的数据库是这样设计的。乐观地思考,它包含普通密码,这样如果用户忘记密码,就可以邮寄给他们 - 这是一个不好的借口,但不幸的是常见的密码。一个更好的选择是让系统向他们发送一个新生成的临时密码 - 一个只能设置永久密码(并且在发生更改之前不会销毁当前密码)。

答案 2 :(得分:1)

不允许任何用户查看任何其他用户的纯文本密码。如果没有哈希,即使在数据库中也必须加密密码。 您可以允许超级管理员更改任何用户的密码,但允许他以纯文本形式查看它是禁忌。

编辑:您是否绝对确定密码字段以明文形式存储密码,而另一个密码密钥字段是否存在?因为,这对我来说听起来类似于“盐”机制。其中,密码首先用一个密钥加密,然后用密码密钥字段重新加密。

编辑2:我现在几乎可以肯定您的数据库使用的是盐渍密码。盐渍密码通常用于提高数据库的安全级别。有关salt的更多信息,请查看this

答案 3 :(得分:0)

您应始终保存加密的密码。因此,您无法向superadmin显示其他用户的密码。

答案 4 :(得分:0)

您永远不应该在任何数据库中存储密码。始终使用hash function保存密码。

答案 5 :(得分:0)

您应该保存在DB中加密的所有密码..不是明文!!

相关问题