精神上试图整理密码< - > Db方案 - 这通常是怎么做的?

时间:2014-01-27 11:28:32

标签: c# sql sql-server winforms security

好的,我的问题是: 首先,用户访问SQL数据库是由Windows身份验证控制的,但应用程序正在进行第二次检查以在应用程序中设置用户权限级别。

  1. 当我在WinForm客户端应用程序中创建一个新用户时,它要求输入一个密码然后用随机盐哈希,这些数据随后存储在我的SQL数据库的users表中:
  2. 用户 username,firstName,lastName,pHash,pSalt,accessLevel等。

    1. 当该用户在以后的会话中尝试登录时,他会提供密码。我将盐从数据库中取出并散列给定的密码。

    2. 现在这是我的问题:如果我从数据库中提取哈希值并将其与本地计算的哈希值进行比较,那么我显然不安全。

    3. 我的应用程序维护一个'用户'对象,该对象为'authenticated'设置一个标志,并且具有一个属性,该属性是根据数据库中users表中的'accessLevel'列设置的。

      必须有一种通常的方法 - 或者我的答案是,您需要使用SQL Server访问工具来执行此操作而不是尝试在托管代码中重新创建它吗?

1 个答案:

答案 0 :(得分:3)

你是对的,你不能相信客户进行身份验证或授权。这必须在服务器端完成。

在您从客户端直接访问SQL Server的情况下,您必须使用内置功能的SQL Server来保护不同的数据库对象。

通常很难做到这一点,因此更常规的架构是创建一个单独的服务器应用程序,例如WCF服务。客户端访问WCF服务,该服务进行身份验证,然后负责所有数据库操作。