SqlConnection.ChangePassword Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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
, UserId
ou 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
, Password
ou 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
, credential
ou newSecurePassword
) é nulo.
Confira também
- visão geral ADO.NET
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
- de cadeias de conexão
(ADO.NET) - conectando-se a uma fonte de dados (ADO.NET)
- usando o provedor de dados do .NET Framework para o SQL Server
- visão geral ADO.NET