用于身份验证的SQL登录技术

时间:2012-12-24 06:50:45

标签: c# asp.net sql sql-server

我有一个非常基本的问题,想知道其他专家如何做到这一点 我有一个包含大约100个用户的应用程序。我一直在使用SQL LOGINS来验证这些用户。这些用户已实施密码策略。当任何用户的密码过期时我遇到困难,即我必须自己从SSMS重置它。有时我和其他任务一起成为一项艰巨的工作。

一些专家告诉我,创建自己的用户表并在该表中包含所有用户详细信息是一个好习惯。我创建了一个包含以下列的用户表。

  • 用户ID
  • 用户名
  • 密码
  • PasswordCreationDate
  • PasswordExpiryDate
  • PasswordActive

一个简单的问题。我的用户如何连接到数据库。当然,我需要一个来自应用程序的连接字符串。那个连接字符串需要用户名和密码不是吗?除非我连接到数据库,否则我无法从用户表中获取信息。

另一个问题是,我如何跟踪最后5个密码。该政策规定用户不能使用最近5个已使用过的密码。

如果我能得到一个通知我的用户他们的密码将在'n'天后到期的解决方案并且他们必须在它到期之前更改它,这一切都可以避免。

其他开发人员在对用户进行身份验证时会做些什么。请指导我

3 个答案:

答案 0 :(得分:1)

Web应用程序中非常常见的情况是使用一个用户名/密码(因此只有一个sql登录,通常是某种专用登录,对应用程序的权限最小)。这样,可以使用连接池。这当然是一个后端帐户,在web.config中配置,对最终用户不可见。

用户被维护为应用程序中的一种数据。 Asp.net附带了一个名为Membership的解决方案。用户身份验证是针对成员资格提供程序完成的,有几个类为您提供身份验证,角色等的程序支持。您可以使用AD作为提供程序,例如表单身份验证。或者你可以自己写。

由于您现在正在为每个用户使用专用的sql登录,因此需要注意此方法将数据访问安全性移至应用程序级别。所以这可能并不总能满足您的需求。

答案 1 :(得分:1)

如果您将用户的登录凭据保留在数据库中,那么要访问sql server本身,您可能只需要登录整个应用程序。此登录将具有对数据库的完全访问权限,因为应用程序将强制执行访问权限。

如果你走这条路,你需要注意两件事:

  1. 对于需要通过Reporting Services,Crystal Reports,Infomaker等工具向用户提供即席报告功能的大型应用程序,仍然存在安全问题。在这种情况下,用户可以使用这些报告工具获取读取权限到他们不应该看到的数据库区域。
  2. 如果您为自己的用户存储自己的凭据信息,则需要确保正确执行此操作。这意味着没有纯文本密码。您需要加密安全密码哈希(不是md5!)和每用户盐。如果这对你来说是个希腊人,最好不要理会这一点。
  3. 您可以使用的另一个选项是对数据库使用Active Directory / Windows身份验证。这里的诀窍是你仍然需要为所有用户设置访问权限。但是,您可以使用Active Directory组来减少需要创建的登录次数,这至少可以防止您需要手动重置Sql Server登录,因为用户将使用其Active Directory帐户登录。 / p>

答案 2 :(得分:0)

理想情况下,您可以使用现有的Active Directory基础结构来处理单个用户的身份验证/授权,然后您可以将最终用户的凭据通过Web服务器传递到SQL服务器(您可能需要查看)处理Kerberos“双跳问题”以实现此目的。)

但如果没有这个,可以很容易地设置,以便应用程序它自己有一个SQL登录来访问数据库,以便检索用户级别的身份验证信息。用户密码的单向哈希将确保即使从连接字符串中读取应用程序的密码,也无法获得用户密码。

或介于这两个解决方案之间,其中<​​em>应用程序在AD中有一个服务帐户,可以访问SQL数据库,以便检索用户来自DB内的帐户信息。

无论哪种方式,如果AD可用,您可以使用Kerberos Service Point Names进一步保护,以确保仅从您预期的终端(即ASP.NET服务器)访问数据库。