SqlConnection.ChangePassword SqlConnection.ChangePassword SqlConnection.ChangePassword SqlConnection.ChangePassword Method

定義

SQL Server パスワードを変更します。Changes the SQL Server password.

オーバーロード

ChangePassword(String, String) ChangePassword(String, String) ChangePassword(String, String) ChangePassword(String, String)

接続文字列で指定されているユーザーの SQL Server のパスワードを、指定された新しいパスワードに変更します。Changes the SQL Server password for the user indicated in the connection string to the supplied new password.

ChangePassword(String, SqlCredential, SecureString) ChangePassword(String, SqlCredential, SecureString) ChangePassword(String, SqlCredential, SecureString) ChangePassword(String, SqlCredential, SecureString)

SqlCredential オブジェクトで指定されたユーザーの SQL Server のパスワードを変更します。Changes the SQL Server password for the user indicated in the SqlCredential object.

ChangePassword(String, String) ChangePassword(String, String) ChangePassword(String, String) ChangePassword(String, String)

接続文字列で指定されているユーザーの SQL Server のパスワードを、指定された新しいパスワードに変更します。Changes the SQL Server password for the user indicated in the connection string to the supplied new password.

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)

パラメーター

connectionString
String String String String

目的のサーバーに接続するために必要な情報を含む接続文字列。The connection string that contains enough information to connect to the server that you want. 接続文字列には、ユーザー ID と現在のパスワードが含まれている必要があります。The connection string must contain the user ID and the current password.

newPassword
String String String String

新たに設定するパスワード。The new password to set. このパスワードは、サーバー側で設定されているパスワード セキュリティ ポリシー (最低限の長さ、使用文字の要件など) を満たしている必要があります。This password must comply with any password security policy set on the server, including minimum length, requirements for specific characters, and so on.

例外

接続文字列には、統合セキュリティを使用するオプションが含まれています。The connection string includes the option to use integrated security.

orOr newPassword が 128 文字を超えています。The newPassword exceeds 128 characters.

connectionString または newPassword のいずれかのパラメーターが null です。Either the connectionString or the newPassword parameter is null.

パスワードを変更する簡単な例を次に示します。The following is a simple example of changing a password:

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  

次のコンソールアプリケーションは、現在のパスワードの有効期限が切れているためにユーザーのパスワードを変更する際に発生する問題を示しています。The following console application demonstrates the issues involved in changing a user's password because the current password has expired.

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

注釈

Windows Server で SQL Server を使用する場合、開発者は、既存のパスワードを変更するために、クライアントアプリケーションが現在のパスワードと新しいパスワードの両方を提供できる機能を利用できます。When you are using SQL Server on Windows Server, developers can take advantage of functionality that lets the client application supply both the current and a new password in order to change the existing password. アプリケーションでは、最初のログイン時にユーザーに新しいパスワードの入力を求めるなどの機能を実装できます。この場合、古いパスワードの有効期限が切れていると、管理者の介入なしにこの操作を完了できます。Applications can implement functionality such as prompting the user for a new password during initial login if the old one has expired, and this operation can be completed without administrator intervention.

メソッドChangePasswordは、指定connectionStringされたパラメーターで指定されたユーザーの SQL Server パスワードを、 newPasswordパラメーターに指定された値に変更します。The ChangePassword method changes the SQL Server password for the user indicated in the supplied connectionString parameter to the value supplied in the newPassword parameter. 接続文字列に統合セキュリティのオプション ("Integrated Security = True" またはそれと同等のオプション) が含まれている場合は、例外がスローされます。If the connection string includes the option for integrated security (that is, "Integrated Security=True" or the equivalent), an exception is thrown.

パスワードの有効期限が切れていることをOpen確認するためSqlExceptionに、メソッドを呼び出すと、が発生します。To determine that the password has expired, calling the Open method raises a SqlException. 接続文字列に含まれているパスワードをリセットする必要があることを示すためにNumber 、例外のプロパティには状態値18487または18488が含まれています。In order to indicate that the password that is contained within the connection string must be reset, the Number property for the exception contains the status value 18487 or 18488. 最初の値 (18487) は、パスワードの有効期限が切れていることを示します。2番目の値 (18488) は、ログインする前にパスワードをリセットする必要があることを示します。The first value (18487) indicates that the password has expired and the second (18488) indicates that the password must be reset before logging in.

このメソッドは、サーバーへの独自の接続を開き、パスワードの変更を要求し、完了したらすぐに接続を閉じます。This method opens its own connection to the server, requests the password change, and closes the connection as soon as it has completed. この接続は、SQL Server 接続プールから取得されることも、返されることもありません。This connection is not retrieved from, nor returned to, the SQL Server connection pool.

こちらもご覧ください

ChangePassword(String, SqlCredential, SecureString) ChangePassword(String, SqlCredential, SecureString) ChangePassword(String, SqlCredential, SecureString) ChangePassword(String, SqlCredential, SecureString)

SqlCredential オブジェクトで指定されたユーザーの SQL Server のパスワードを変更します。Changes the SQL Server password for the user indicated in the SqlCredential object.

public:
 static void ChangePassword(System::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 newSecurePassword);
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)

パラメーター

connectionString
String String String String

サーバーに接続するために必要な情報を保持する接続文字列。The connection string that contains enough information to connect to a server. 接続文字列では Integrated Security = trueUserIdPasswordContextConnection = true のいずれの接続文字列のキーワードも使用すべきではありません。The connection string should not use any of the following connection string keywords: Integrated Security = true, UserId, or Password; or ContextConnection = true.

newPassword
SecureString SecureString SecureString SecureString

新しいパスワード。newPasswordThe new password.newPassword は読み取り専用でなければなりません。must be read only. このパスワードは、サーバー側で設定されているパスワード セキュリティ ポリシー (最低限の長さ、使用文字の要件など) も満たしている必要があります。The password must also comply with any password security policy set on the server (for example, minimum length and requirements for specific characters).

例外

接続の文字列には UserIdPassword、または Integrated Security=true の組み合わせのいずれかが含まれています。The connection string contains any combination of UserId, Password, or Integrated Security=true.

または-or- Context Connection=true を含む接続文字列。The connection string contains Context Connection=true.

- または --or-

newSecurePassword (または newPassword) が 128 文字を超えています。newSecurePassword (or newPassword) is greater than 128 characters.

- または --or-

newSecurePassword (または newPassword) は読み取り専用ではありません。newSecurePassword (or newPassword) is not read only.

- または --or-

newSecurePassword (または newPassword) が空の文字列です。newSecurePassword (or newPassword) is an empty string.

パラメーターのうちの 1 つ (connectionStringcredential、または newSecurePassword) が null です。One of the parameters (connectionString, credential, or newSecurePassword) is null.

こちらもご覧ください

適用対象