Windows 身份验证
如果应用程序在 Windows 域中运行,您可以使用经过身份验证的 Windows 用户信息。然后在数据库中不需要存储用户名/密码。您只需存储 Windows SID 即可在 User 表中识别用户。然后应用程序只需验证当前用户是否存在于数据库用户表中,如果不存在,则应用程序无法运行。
您可以使用WindowsIdentity.GetCurrent() (MSDN)获取当前用户信息,并且 User 属性将使您能够访问 SecurityIdentifier。在 C# 中将用户名转换为 SID 字符串的问题将向您展示如何将其转换为可以存储在数据库中的字符串。由于每个 Windows 用户都有一个唯一的 SID,因此可以轻松查找安全信息。
走这条路时,为了获得额外的安全性,最好对 SQL 连接使用集成安全性,然后锁定对查询和表的访问,以便只有某个用户组可以运行管理操作和添加用户,而普通用户只能对相关表执行读取和数据插入/更新语句。
编辑:
由于 Windows 身份验证不适合您,您可以让 SQL 在存储过程中为您执行哈希。通过使用哈希字节您可以将用户名/密码传递给存储过程,然后在 SQL 中完成验证,这样最终用户将永远无法看到逻辑。在存储过程中,您可以从表中提取 Salt 值或将其编码。例如,我们使用用户信息表中的用户名、密码和另一个值来创建被散列的值。这可以防止不同的用户拥有相同的哈希值,即使他们拥有相同的密码。我们还使用 SHA512 来生成哈希。然后你只需要锁定 SQL 访问,使用户无法连接到 SQL 并在存储过程上执行 Right-Click-->Modify 以查看源代码。这可能最适合您的情况。