Partilhar via


SqlConnection.ChangePassword Método

Definição

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 do 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, Microsoft::Data::SqlClient::SqlCredential ^ credential, System::Security::SecureString ^ newSecurePassword);
public:
 static void ChangePassword(System::String ^ connectionString, Microsoft::Data::SqlClient::SqlCredential ^ credential, System::Security::SecureString ^ newPassword);
public static void ChangePassword (string connectionString, Microsoft.Data.SqlClient.SqlCredential credential, System.Security.SecureString newSecurePassword);
public static void ChangePassword (string connectionString, Microsoft.Data.SqlClient.SqlCredential credential, System.Security.SecureString newPassword);
static member ChangePassword : string * Microsoft.Data.SqlClient.SqlCredential * System.Security.SecureString -> unit
static member ChangePassword : string * Microsoft.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 palavras-chave de cadeia de conexão a seguir: Integrated Security = true, UserId, Password ou ContextConnection = true.

credential
SqlCredential

Um objeto SqlCredential.

newSecurePasswordnewPassword
SecureString

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

Exceções

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

- ou -

newSecurePassword tem mais de 128 caracteres.

- ou -

newSecurePassword não é somente leitura.

- ou -

newSecurePassword é uma cadeia de caracteres vazia.

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

Aplica-se a

ChangePassword(String, String)

Altera a senha do SQL Server do 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 conectar-se ao servidor que você deseja. A cadeia de conexão deve conter a ID de usuário e a senha atual.

newPassword
String

A nova senha a ser definida. Essa senha deve estar em conformidade com as políticas de segurança de senha definidas no servidor, incluindo o tamanho mínimo, os requisitos de caracteres específicos e assim por diante.

Exceções

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

Ou

O newPassword ultrapassa 128 caracteres.

O parâmetro connectionString ou newPassword é nulo.

Exemplos

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

class Program {  
   static void Main(string[] args) {  
      Microsoft.Data.SqlClient.SqlConnection.ChangePassword(  
        "Data Source=a_server;Initial Catalog=a_database;UID=user;PWD=old_password",   
       "new_password");  
   }  
}  
Module Module1  
    Sub Main()  
Microsoft.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 Microsoft.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;
    }
}

Comentários

Quando você estiver usando SQL Server no Windows Server, os desenvolvedores podem 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.

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

Para determinar que a senha expirou, chamar o Open método gera um SqlException. Para indicar que a senha contida no cadeia de conexão deve ser redefinida, a Number propriedade 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 nem retornada para o pool de conexões SQL Server.

Aplica-se a