Compartilhar via


SqlConnection.ChangePassword Método

Definição

Altera a senha do SQL Server.

Sobrecargas

ChangePassword(String, SqlCredential, SecureString)

Altera a senha do SQL Server para o usuário indicado no objeto SqlCredential.

ChangePassword(String, String)

Altera a senha do SQL Server para o usuário indicado na cadeia de conexão para a nova senha fornecida.

ChangePassword(String, SqlCredential, SecureString)

Altera a senha do SQL Server para o usuário indicado no objeto SqlCredential.

public:
 static void ChangePassword(System::String ^ connectionString, System::Data::SqlClient::SqlCredential ^ credential, System::Security::SecureString ^ newSecurePassword);
public:
 static void ChangePassword(System::String ^ connectionString, System::Data::SqlClient::SqlCredential ^ credential, System::Security::SecureString ^ newPassword);
public static void ChangePassword (string connectionString, System.Data.SqlClient.SqlCredential credential, System.Security.SecureString newSecurePassword);
public static void ChangePassword (string connectionString, System.Data.SqlClient.SqlCredential credential, System.Security.SecureString newPassword);
static member ChangePassword : string * System.Data.SqlClient.SqlCredential * System.Security.SecureString -> unit
static member ChangePassword : string * System.Data.SqlClient.SqlCredential * System.Security.SecureString -> unit
Public Shared Sub ChangePassword (connectionString As String, credential As SqlCredential, newSecurePassword As SecureString)
Public Shared Sub ChangePassword (connectionString As String, credential As SqlCredential, newPassword As SecureString)

Parâmetros

connectionString
String

A cadeia de conexão que contém informações suficientes para se conectar a um servidor. A cadeia de conexão não deve usar nenhuma das seguintes palavras-chave de cadeia de conexão: Integrated Security = true, UserIdou Password; ou ContextConnection = true.

credential
SqlCredential

Um objeto SqlCredential.

newPasswordnewSecurePassword
SecureString

A nova senha. newPassword deve ser somente leitura. A senha também deve estar em conformidade com qualquer política de segurança de senha definida no servidor (por exemplo, comprimento mínimo e requisitos para caracteres específicos).

Exceções

A cadeia de conexão contém qualquer combinação de UserId, Passwordou Integrated Security=true.

-ou-

A cadeia de conexão contém Context Connection=true.

-ou-

newSecurePassword (ou newPassword) é maior que 128 caracteres.

-ou-

newSecurePassword (ou newPassword) não é somente leitura.

-ou-

newSecurePassword (ou newPassword) é uma cadeia de caracteres vazia.

Um dos parâmetros (connectionString, credentialou newSecurePassword) é nulo.

Confira também

Aplica-se a

ChangePassword(String, String)

Altera a senha do SQL Server para o usuário indicado na cadeia de conexão para a nova senha fornecida.

public:
 static void ChangePassword(System::String ^ connectionString, System::String ^ newPassword);
public static void ChangePassword (string connectionString, string newPassword);
static member ChangePassword : string * string -> unit
Public Shared Sub ChangePassword (connectionString As String, newPassword As String)

Parâmetros

connectionString
String

A cadeia de conexão que contém informações suficientes para se conectar ao servidor desejado. A cadeia de conexão deve conter a ID do usuário e a senha atual.

newPassword
String

A nova senha a ser definida. Essa senha deve estar em conformidade com qualquer política de segurança de senha definida no servidor, incluindo comprimento mínimo, requisitos para caracteres específicos e assim por diante.

Exceções

A cadeia de conexão inclui a opção de usar a segurança integrada.

Ou

O newPassword excede 128 caracteres.

O parâmetro connectionString ou newPassword é nulo.

Exemplos

Aviso

A Microsoft não recomenda fornecer seu nome de usuário e senha diretamente, pois é um padrão inseguro. Sempre que possível, use fluxos de autenticação mais seguros, como Identidades Gerenciadas para recursos do Azureou de autenticação do Windows para SQL Server.

Veja a seguir um exemplo simples de alteração de uma senha:

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");
   }
}
Module Module1
    Sub Main()
System.Data.SqlClient.SqlConnection.ChangePassword(
        "Data Source=a_server;Initial Catalog=a_database;UID=user;PWD=old_password",
       "new_password")
    End Sub
End Module

O aplicativo de console a seguir demonstra os problemas envolvidos na alteração da senha de um usuário porque a senha atual expirou.

using System;
using System.Data;
using System.Data.SqlClient;

class Program
{
    static void Main()
    {
        try
        {
            DemonstrateChangePassword();
        }
        catch (Exception ex)
        {
            Console.WriteLine("Error: " + ex.Message);
        }
        Console.WriteLine("Press ENTER to continue...");
        Console.ReadLine();
    }

    private static void DemonstrateChangePassword()
    {
        // Retrieve the connection string. In a production application,
        // this string should not be contained within the source code.
        string connectionString = GetConnectionString();

        using (SqlConnection cnn = new SqlConnection())
        {
            for (int i = 0; i <= 1; i++)
            {
                // Run this loop at most two times. If the first attempt fails,
                // the code checks the Number property of the SqlException object.
                // If that contains the special values 18487 or 18488, the code
                // attempts to set the user's password to a new value.
                // Assuming this succeeds, the second pass through
                // successfully opens the connection.
                // If not, the exception handler catches the exception.
                try
                {
                    cnn.ConnectionString = connectionString;
                    cnn.Open();
                    // Once this succeeds, just get out of the loop.
                    // No need to try again if the connection is already open.
                    break;
                }
                catch (SqlException ex)
                {
                    if (i == 0 && ((ex.Number == 18487) || (ex.Number == 18488)))
                    {
                        // You must reset the password.
                        connectionString =
                            ModifyConnectionString(connectionString,
                            GetNewPassword());
                    }
                    else
                    {
                        // Bubble all other SqlException occurrences
                        // back up to the caller.
                        throw;
                    }
                }
            }
            SqlCommand cmd = new SqlCommand(
                "SELECT ProductID, Name FROM Product", cnn);
            // Use the connection and command here...
        }
    }

    private static string ModifyConnectionString(
        string connectionString, string NewPassword)
    {

        // Use the SqlConnectionStringBuilder class to modify the
        // password portion of the connection string.
        SqlConnectionStringBuilder builder =
            new SqlConnectionStringBuilder(connectionString);
        builder.Password = NewPassword;
        return builder.ConnectionString;
    }

    private static string GetNewPassword()
    {
        // In a real application, you might display a modal
        // dialog box to retrieve the new password. The concepts
        // are the same as for this simple console application, however.
        Console.Write("Your password must be reset. Enter a new password: ");
        return Console.ReadLine();
    }

    private static string GetConnectionString()
    {
        // For this demonstration, the connection string must
        // contain both user and password information. In your own
        // application, you might want to retrieve this setting
        // from a config file, or from some other source.

        // In a production application, you would want to
        // display a modal form that could gather user and password
        // information.
        SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(
            "Data Source=(local);Initial Catalog=AdventureWorks");

        Console.Write("Enter your user id: ");
        builder.UserID = Console.ReadLine();
        Console.Write("Enter your password: ");
        builder.Password = Console.ReadLine();

        return builder.ConnectionString;
    }
}
Option Explicit On
Option Strict On

Imports System.Data
Imports System.Data.SqlClient

Module Module1
    Sub Main()
        Try
            DemonstrateChangePassword()
        Catch ex As Exception
            Console.WriteLine("Error: " & ex.Message)
        End Try
        Console.WriteLine("Press ENTER to continue...")
        Console.ReadLine()
    End Sub

    Private Sub DemonstrateChangePassword()
        Dim connectionString As String = GetConnectionString()
        Using cnn As New SqlConnection()
            For i As Integer = 0 To 1
                ' Run this loop at most two times. If the first attempt fails, 
                ' the code checks the Number property of the SqlException object.
                ' If that contains the special values 18487 or 18488, the code 
                ' attempts to set the user's password to a new value. 
                ' Assuming this succeeds, the second pass through 
                ' successfully opens the connection.
                ' If not, the exception handler catches the exception.
                Try
                    cnn.ConnectionString = connectionString
                    cnn.Open()
                    ' Once this succeeds, just get out of the loop.
                    ' No need to try again if the connection is already open.
                    Exit For

                Catch ex As SqlException _
                 When (i = 0 And (ex.Number = 18487 Or ex.Number = 18488))
                    ' You must reset the password.
                    connectionString = ModifyConnectionString( _
                     connectionString, GetNewPassword())

                Catch ex As SqlException
                    ' Bubble all other SqlException occurrences
                    ' back up to the caller.
                    Throw
                End Try
            Next
            Dim cmd As New SqlCommand("SELECT ProductID, Name FROM Product", cnn)
            ' Use the connection and command here...
        End Using
    End Sub

    Private Function ModifyConnectionString( _
     ByVal connectionString As String, ByVal NewPassword As String) As String

        ' Use the SqlConnectionStringBuilder class to modify the
        ' password portion of the connection string. 
        Dim builder As New SqlConnectionStringBuilder(connectionString)
        builder.Password = NewPassword
        Return builder.ConnectionString
    End Function

    Private Function GetNewPassword() As String
        ' In a real application, you might display a modal
        ' dialog box to retrieve the new password. The concepts
        ' are the same as for this simple console application, however.
        Console.Write("Your password must be reset. Enter a new password: ")
        Return Console.ReadLine()
    End Function

    Private Function GetConnectionString() As String
        ' For this demonstration, the connection string must
        ' contain both user and password information. In your own
        ' application, you might want to retrieve this setting
        ' from a config file, or from some other source.

        ' In a production application, you would want to 
        ' display a modal form that could gather user and password
        ' information.
        Dim builder As New SqlConnectionStringBuilder( _
         "Data Source=(local);Initial Catalog=AdventureWorks")

        Console.Write("Enter your user id: ")
        builder.UserID = Console.ReadLine()
        Console.Write("Enter your password: ")
        builder.Password = Console.ReadLine()

        Return builder.ConnectionString
    End Function
End Module

Comentários

Ao usar o SQL Server no Windows Server, você pode aproveitar a funcionalidade que permite que o aplicativo cliente forneça a senha atual e uma nova para alterar a senha existente. Os aplicativos podem implementar funcionalidades como solicitar ao usuário uma nova senha durante o logon inicial se a antiga tiver expirado e essa operação puder ser concluída sem intervenção do administrador.

Aviso

A Microsoft não recomenda fornecer seu nome de usuário e senha diretamente, pois é um padrão inseguro. Sempre que possível, use fluxos de autenticação mais seguros, como Identidades Gerenciadas para recursos do Azureou de autenticação do Windows para SQL Server.

O método ChangePassword altera a senha do SQL Server para o usuário indicado no parâmetro connectionString fornecido para o valor fornecido no parâmetro newPassword. Se a cadeia de conexão incluir a opção de segurança integrada (ou seja, "Segurança Integrada=True" ou equivalente), uma exceção será gerada.

Para determinar se a senha expirou, chamar o método Open gera um SqlException. Para indicar que a senha contida na cadeia de conexão deve ser redefinida, a propriedade Number da exceção contém o valor de status 18487 ou 18488. O primeiro valor (18487) indica que a senha expirou e a segunda (18488) indica que a senha deve ser redefinida antes de fazer logon.

Esse método abre sua própria conexão com o servidor, solicita a alteração de senha e fecha a conexão assim que ela é concluída. Essa conexão não é recuperada ou retornada para o pool de conexões do SQL Server.

Confira também

Aplica-se a