c# - 精神上试图理清密码<->数据库方案 - 这通常是如何完成的?

标签 c# sql sql-server winforms security

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

  1. 当我在 WinForm 客户端应用程序中创建新用户时,它会要求输入密码,然后使用随机盐进行哈希处理,这些数据将存储在我的 SQL 数据库的用户表中:

用户 用户名、名字、姓氏、pHash、pSalt、访问级别等

  1. 当该用户在稍后的 session 中尝试登录时,他会提供密码。我从数据库中取出盐并对给定的密码进行哈希处理。

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

我的应用程序维护一个“用户”对象,该对象设置“已验证”标志,并具有一个基于数据库中用户表中“accessLevel”列设置的属性。

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

最佳答案

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

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

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

关于c# - 精神上试图理清密码<->数据库方案 - 这通常是如何完成的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21379673/

相关文章:

c# - Ninject 根据顶级项目获得不同实现的最佳实践

sql - 什么更好,动态 SQL 还是 where case?

SQL插入多语言数据 - 丢失变音符号等

SQL Server 如何检索两个数字之间的所有数字

c# - 在事务中调用多个 SQL Server 存储过程

c# - 无法找到所需的服务。通过在调用 'IServiceCollection.AddControllers' 内部调用 'ConfigureServices()' 添加所需的服务

c# - 如何测量立体图像中的距离?

c# - WCF 期望每个请求的 header

mysql - 防止 PetaPoco 将变量识别为输入参数

MySQL:子查询中的外部别名:WHERE 和 ON 之间的差异