更改登录密码后强制用户重新进行身份验证

时间:2016-06-23 09:25:59

标签: c# winforms sql-server-2008

我的Windows窗体项目出了问题。我在SQL Server中有一个用户更改其登录密码的功能。用户将使用旧密码登录Windows窗体。导航到更改密码功能后,将要求他们提供新密码和旧密码。收到新旧密码,使用此SQL命令更改密码

ALTER LOGIN [LOGIN_NAME] 
    WITH PASSWORD = 'NEW_PASS', OLD_PASSWORD = 'OLD_PASS';

但问题是用户还在此会话中使用旧密码和新密码登录到SQL Server。我停止并再次启动项目后,旧密码已过期。我想当用户提交新密码时,应用程序必须再次强制登录。谁能给我解决方案?

非常感谢!

P / S:我想我应该多谈一下用户连接数据库的方式。

我正在使用这样的连接字符串:

Program.connstr = "Data Source=" + Program.servername + ";Initial Catalog=" + Program.database + ";User ID=" + Program.mlogin + ";password=" + Program.password;

用户使用该数据库中的授权帐户连接到数据库,并执行必要的任务。密码更改将更新连接字符串的密码。

再次感谢!

1 个答案:

答案 0 :(得分:0)

假设您为每个SQL数据库请求创建一个新连接(这是您应该如何做的),您可以创建某种SQL连接工厂,它将为您的用户创建连接。当此工厂捕获login failed for user之类的SQL异常时,请切换到Your password is expired窗口,然后再次请求凭据。

public class SqlConnectionFactory
{
    public static SqlConnection CreateConnection()
    {
        try
        {
            string connectionString = $"Data Source={Program.servername};Initial Catalog={Program.database};User ID={Program.mlogin};password={Program.password};";
            var connection = new SqlConnection(connectionString);
            connection.Open();
            return connection;
        } catch (SqlException se) when (se.Number == 18456) 
        {
            MessageBox.Show("Your password is invalid. Try to login again.");
            Environment.Exit(0);
        }
    }
}


// Everywhere in your code
SqlConnectionFactory.CreateConnection().

可能你需要一个比关闭应用程序更漂亮的方法,但这只是一个演示 您可能还想为SqlConnectionFactory创建一些方法,例如ExecuteAndReturnReader,这将创建连接,创建命令,并在执行后返回其读取器。