0

我有一个非常基本的问题,想知道其他专家是如何做到这一点
的。我有一个拥有大约 100 名用户的应用程序。我一直在使用 SQL LOGINS 对这些用户进行身份验证。这些用户强制执行密码策略。当任何用户的密码过期时我都会遇到困难,即我必须自己从 SSMS 重置它。有时它与我所做的其他任务一起成为一项艰巨的工作。

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

  • 用户身份
  • 用户名
  • 密码
  • 密码创建日期
  • 密码到期日
  • 密码激活

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

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

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

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

4

3 回答 3

1

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

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

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

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

于 2012-12-24T07:11:58.913 回答
1

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

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

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

于 2012-12-24T07:05:20.810 回答
0

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

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

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

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

于 2012-12-24T07:01:07.357 回答