小编Fab*_*cke的帖子

为什么要存储用户密码?

我偶尔会看到一些问题,询问如何安全地存储 Web 应用程序的用户密码(使用 RDBMS,我不是在谈论 Facebook 或 Twitter)。通常的答案是“对密码加盐,然后使用 TDES 或 SHA512 等强算法对其进行散列”。

我的问题是:作为 RDBMS 用户,我为什么要为密码存储问题而烦恼,因为大多数引擎都有内置的身份验证机制。

例如,如果某个用户 X 想要在我的 Web 应用程序上创建帐户用户密码 Y,那么发出以下查询是如何错误的:

CREATE USER X WITH ENCRYPTED PASSWORD Y IN GROUP baseuser;
Run Code Online (Sandbox Code Playgroud)

然后在我的应用程序中,用户可以使用他的凭据打开与数据库的连接,而我根本不必费心管理密码。

我看到了这种方法的多个优点:

  • 如果 RDBMS 决定需要更改加密算法,我不需要接触任何东西,只需应用安全更新;
  • 我很容易管理用户授权。如果用户被提升为管理员角色,我只需要将该用户添加到相应的组中即可;
  • SQL 注入现在毫无意义,因为我管理权限以允许我想允许数据库中的每个用户(例如,在像 SO 这样的论坛中,添加新帖子,回复帖子,评论和编辑/删除他自己的问题) /答案/评论);
  • “匿名”用户帐户可用于未经身份验证连接到我的应用程序;
  • 每个用户都是他提供的数据的所有者。

但在我看到的关于这个主题的几乎每个问题上,似乎都有一个普遍的共识,即这不是必须做的事情。我的问题是:为什么?

注:第三点是允许的政策在PostgreSQL和安全政策在Microsoft SQL Server。我意识到这些概念是新来的,但无论如何,既然它们已经出现,为什么我描述的技术没有成为处理用户帐户的标准方法?

security users

10
推荐指数
4
解决办法
4798
查看次数

标签 统计

security ×1

users ×1