好的,我的问题是这样的: 首先,用户对 SQL 数据库的访问由 Windows 身份验证控制,但应用程序正在执行第二次检查以设置应用程序内的用户权限级别。
- 当我在 WinForm 客户端应用程序中创建新用户时,它会要求输入密码,然后使用随机盐进行哈希处理,这些数据将存储在我的 SQL 数据库的用户表中:
用户 用户名、名字、姓氏、pHash、pSalt、访问级别等
当该用户在稍后的 session 中尝试登录时,他会提供密码。我从数据库中取出盐并对给定的密码进行哈希处理。
现在这是我的问题:如果我从数据库中提取哈希并将其与本地计算的哈希进行比较,我显然是不安全的。
我的应用程序维护一个“用户”对象,该对象设置“已验证”标志,并具有一个基于数据库中用户表中“accessLevel”列设置的属性。
必须有一种常用的方法来执行此操作 - 或者是我的答案,您需要使用 SQL Server 访问工具来执行此操作,而不是尝试在托管代码中重新发明它?
最佳答案
您是对的,您不能信任客户端进行身份验证或授权。这必须在服务器端完成。
在您的情况下,当您直接从客户端访问 SQL Server 时,您将必须使用 SQL Server 内置功能来保护不同的数据库对象。
但这通常很难以好的方式做到,因此更正常的体系结构是创建一个单独的服务器应用程序,例如 WCF 服务。客户端访问WCF服务,WCF服务进行身份验证,然后负责所有数据库操作。
关于c# - 精神上试图理清密码<->数据库方案 - 这通常是如何完成的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21379673/