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



我有一个非常基本的问题,想知道其他专家是怎么做的
我有一个大约有100个用户的应用程序。我一直在使用SQL login对这些用户进行身份验证。这些用户有强制的密码策略。当任何用户的密码过期时,我都面临困难,即我必须自己从SSMS重置它。有时它和我做的其他任务一起成为一项困难的工作。

一些专家告诉我,创建自己的用户表并将所有用户详细信息放在该表中是一个很好的实践。我已经创建了一个包含以下列的用户表:

    <
  • 用户Id/gh><
  • 用户名/gh>
  • PasswordCreationDate
  • PasswordExpiryDate
  • PasswordActive

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

另一个问题,我如何跟踪最后5个密码。该策略表示用户不能使用最近5个已使用的密码中的任何一个。

如果我能找到一个解决方案,通知我的用户他们的密码将在"n"天内到期,并且他们必须在到期之前更改密码,那么所有这些都可以避免。

其他开发人员在验证他们的用户时做什么。

如果你把用户的登录凭证保存在数据库中,那么为了访问sql server本身,你可能只需要整个应用程序的一次登录。这个登录将完全访问你的数据库,因为它将取决于你的应用程序来强制访问权限。

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

  1. 对于需要通过reporting Services、Crystal Reports、Infomaker等工具为用户提供临时报告功能的大型应用程序来说,仍然存在安全问题。在这种情况下,用户可以使用这些报告工具来获得对数据库中他们不应该看到的区域的读访问权。
  2. 如果您为您的用户存储您自己的凭据信息,您需要确保这样做是正确的。这意味着没有纯文本密码。您需要一个加密安全的密码散列(不是md5!)和每个用户的盐。如果你不懂这个,最好不要管它。

另一个选项是为您的数据库使用Active Directory/Windows身份验证。这里的诀窍是,您仍然必须为所有用户设置访问权限。但是,您可以使用Active Directory组来减少需要创建的登录数量,并且它至少可以防止您需要手动重置Sql Server登录,因为用户将使用他们的Active Directory帐户登录。

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

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

由于您现在为每个用户使用专用的sql登录,因此您需要意识到这种方法将数据访问安全性提升到了应用程序级别。因此,这可能并不总是适合您的需要。

理想情况下,您应该使用现有的Active Directory基础设施来处理个人用户的身份验证/授权,然后您可以将最终用户的凭据通过web服务器传递到您的SQL服务器(您可能需要考虑处理Kerberos"双跳问题"来实现这一点)。

但是如果做不到这一点,很容易设置,以便应用程序本身具有访问数据库的SQL登录,以便检索用户级别的身份验证信息。用户密码的单向散列将确保即使从连接字符串中读取应用程序的密码,也无法获得用户密码。

或者介于这两种解决方案之间,其中应用程序在AD中具有服务帐户,该帐户可以访问SQL数据库,以便从DB中检索用户帐户信息。

无论哪种方式,如果AD可用,您都可以使用Kerberos服务点名称进一步保护数据库,以确保仅从预期的端点(即ASP。网络服务器)。

最新更新