针对SQL Server的自定义winforms身份验证:如何处理密码过期?

针对SQL Server的自定义winforms身份验证:如何处理密码过期?,winforms,authentication,sql-server-2008-r2,Winforms,Authentication,Sql Server 2008 R2,我们有一个基于Winforms和EntityFramework4.2代码优先和SQLServer2008R2的项目 在此项目中,用户必须使用登录屏幕上的用户名/密码对SQL Server进行身份验证 因此,将不会有主用户或系统用户,也不会有检索/比较用户名/密码的查询:该过程已通过登录SQL Server完成。 用户将拥有自己的SQL用户帐户,应该在应用程序中处理 然而,我们遇到了密码过期策略,它让我们陷入了黑暗。 我们怎么处理呢?具体来说,当账户已经过期时,我们如何处理 我们已经处理了这个异常

我们有一个基于Winforms和EntityFramework4.2代码优先和SQLServer2008R2的项目

在此项目中,用户必须使用登录屏幕上的用户名/密码对SQL Server进行身份验证

因此,将不会有主用户或系统用户,也不会有检索/比较用户名/密码的查询:该过程已通过登录SQL Server完成。 用户将拥有自己的SQL用户帐户,应该在应用程序中处理

然而,我们遇到了密码过期策略,它让我们陷入了黑暗。 我们怎么处理呢?具体来说,当账户已经过期时,我们如何处理

我们已经处理了这个异常,但我们只是不知道如何远程更改用户的密码

这不是关于用户A更改B的密码。而是关于A更改其自己的密码,因为密码已过期,我无法要求用户登录SQL Server Management Studio来执行此操作。

您可以使用此语句

但是,请注意,理论上,这允许任何用户更改任何其他用户的密码,前提是他们具有ALTER LOGIN权限,因此您应该确保您让用户也提供旧密码,我认为这是默认密码


出于兴趣,你为什么不使用Windows身份验证?这样,登录有效期和密码处理对您来说是透明的。

Alter login要求我登录并拥有Alter login权限。使用EntityFramework无法登录,因为密码已过期,因此无法运行该语句。这是一个问题。其次,用户不能拥有ALTER LOGIN权限。我需要这个系统,因为将有3种类型的身份验证:只有主用户的系统,这个sgbd和windows身份验证。客户必须能够选择。您可以作为sql用户运行ALTER LOGIN,该sql用户只具有ALTER LOGIN权限,并且不会过期。由于用户仍然需要知道自己的密码,因此不应该让您面临任何额外的风险。这破坏了应用程序的设计。用户应该根据数据库对自己进行身份验证,仅此而已。我知道这是有可能做到的某种主用户,即使减少特权,这可能是唯一的方式这样做,但我正在研究其他东西。我考虑了一些与连接字符串相关的东西,可能是一种从SQLClient发送新旧密码或API的方法,这可能会有所帮助……不幸的是,除非您以新用户身份运行API,否则API不会有帮助。一旦旧登录过期,您就无法以他们的身份进行连接-因此建议以其他用户的身份进行连接。SQLDMOAPI也是如此——您将作为谁进行身份验证?你可能会争辩说,通过提供旧密码,用户仍然在验证自己,因为帐户重新启用和密码更改不会发生。是的,这就是问题所在。反正我也得问。好吧,应该有办法做到这一点,但如果没有的话,我只需要创建一些只写日志和只修改登录密码策略的管理帐户。正在考虑该方法是否安全…=无论如何,谢谢你。