好的,我的问题是: 首先,用户访问SQL数据库是由Windows身份验证控制的,但应用程序正在进行第二次检查以在应用程序中设置用户权限级别。
用户 username,firstName,lastName,pHash,pSalt,accessLevel等。
当该用户在以后的会话中尝试登录时,他会提供密码。我将盐从数据库中取出并散列给定的密码。
现在这是我的问题:如果我从数据库中提取哈希值并将其与本地计算的哈希值进行比较,那么我显然不安全。
我的应用程序维护一个'用户'对象,该对象为'authenticated'设置一个标志,并且具有一个属性,该属性是根据数据库中users表中的'accessLevel'列设置的。
必须有一种通常的方法 - 或者我的答案是,您需要使用SQL Server访问工具来执行此操作而不是尝试在托管代码中重新创建它吗?
答案 0 :(得分:3)
你是对的,你不能相信客户进行身份验证或授权。这必须在服务器端完成。
在您从客户端直接访问SQL Server的情况下,您必须使用内置功能的SQL Server来保护不同的数据库对象。
通常很难做到这一点,因此更常规的架构是创建一个单独的服务器应用程序,例如WCF服务。客户端访问WCF服务,该服务进行身份验证,然后负责所有数据库操作。