Изменить пароль с истекшим сроком без "Пароля с истекшим сроком действия"

Я регистрирую свое приложение, используя учетную запись входа в систему Sql Server Database. Однако, когда срок действия пароля пользователя истек, я могу только поймать сообщение об ошибке с помощью "error: 18488" и отобразить сообщение пользователю.

При входе в систему с помощью Sql Server Management Studio с учетной записью с истекшим паролем появляется диалоговое окно, требующее изменить пароль.

Есть ли способ разрешить моему приложению изменять истекший пароль с чем-то вроде инструкции T-Sql?

Ответы

Ответ 1

Я нашел решение здесь, я использовал SqlConnection.ChangePassword().

Здесь код:

class Program
{
    static void Main(string[] args)
    {
        System.Data.SqlClient.SqlConnection.ChangePassword(
        "Data Source=a_server;Initial Catalog=a_database;UID=user;PWD=old_password", 
       "new_password");
    }
}

Надеюсь, что это тоже поможет другим.:)

Ответ 2

Вы можете изменить вход пользователя с помощью ALTER LOGIN.

ALTER LOGIN [userName] WITH PASSWORD=N'StrongPassword'

Другой вариант - использовать хранимую процедуру sp_password.

sp_password [ [ @old = ] 'old_password' , ]
     { [ @new =] 'new_password' }
     [ , [ @loginame = ] 'login' ]

Код С#:

private readonly SqlConnection m_oConn = new SqlConnection("ConnectionString");
private readonly SqlCommand m_oCmd;

m_oCmd = new SqlCommand("sp_password", m_oConn) { CommandType = CommandType.StoredProcedure };

m_oCmd.Parameters.AddWithValue("@old", null);
m_oCmd.Parameters.AddWithValue("@new", "newpassword");
m_oCmd.Parameters.AddWithValue("@loginame", "username");

var da = new SqlDataAdapter { SelectCommand = m_oCmd };

var ds = new DataSet();
da.Fill(ds);