SqlConnection.ChangePassword メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
オーバーロード
ChangePassword(String, SqlCredential, SecureString) |
SqlCredential オブジェクトで指定されたユーザーの SQL Server のパスワードを変更します。 |
ChangePassword(String, String) |
接続文字列で指定されているユーザーの SQL Server のパスワードを、指定された新しいパスワードに変更します。 |
ChangePassword(String, SqlCredential, SecureString)
SqlCredential オブジェクトで指定されたユーザーの SQL Server のパスワードを変更します。
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)
パラメーター
- connectionString
- String
サーバーに接続するために必要な情報を保持する接続文字列。 接続文字列では Integrated Security = true
、UserId
、Password
、ContextConnection = true
のいずれの接続文字列のキーワードも使用すべきではありません。
- credential
- SqlCredential
SqlCredential オブジェクト。
- newSecurePasswordnewPassword
- SecureString
新しいパスワード。 newSecurePassword
は読み取り専用でなければなりません。 このパスワードは、サーバー側で設定されているパスワード セキュリティ ポリシー (最低限の長さ、使用文字の要件など) も満たしている必要があります。
例外
接続の文字列には UserId
、Password
、または Integrated Security=true
の組み合わせのいずれかが含まれています。
- または -
newSecurePassword
が 128 文字を超えています。
- または -
newSecurePassword
は読み取り専用ではありません。
- または -
newSecurePassword
が空の文字列です。
パラメーターのうちの 1 つ (connectionString
、credential
、または newSecurePassword
) が null です。
適用対象
ChangePassword(String, String)
接続文字列で指定されているユーザーの SQL Server のパスワードを、指定された新しいパスワードに変更します。
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
目的のサーバーに接続するために必要な情報を含む接続文字列。 接続文字列には、ユーザー ID と現在のパスワードが含まれている必要があります。
- newPassword
- String
新たに設定するパスワード。 このパスワードは、サーバー側で設定されているパスワード セキュリティ ポリシー (最低限の長さ、使用文字の要件など) を満たしている必要があります。
例外
connectionString
または newPassword
のいずれかのパラメーターが null です。
例
パスワードを変更する簡単な例を次に示します。
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
次のコンソール アプリケーションは、現在のパスワードの有効期限が切れているため、ユーザーのパスワードの変更に関連する問題を示しています。
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;
}
}
注釈
Windows Server でSQL Serverを使用している場合、開発者は、クライアント アプリケーションが現在のパスワードと新しいパスワードの両方を指定して既存のパスワードを変更できるようにする機能を利用できます。 アプリケーションは、古いパスワードの有効期限が切れている場合に、初期ログイン時にユーザーに新しいパスワードの入力を求めるなどの機能を実装でき、管理者の介入なしにこの操作を完了できます。
メソッドはChangePassword、指定されたconnectionString
パラメーターに示されているユーザーのSQL Serverパスワードを、 パラメーターで指定された値にnewPassword
変更します。 接続文字列に統合セキュリティのオプション ("Integrated Security=True" または同等のもの) が含まれている場合は、例外がスローされます。
パスワードの有効期限が切れたことを確認するために、 メソッドを Open 呼び出すと、 SqlExceptionが発生します。 接続文字列に含まれるパスワードをリセットする必要があることを示すために、例外の Number プロパティには状態値 18487 または 18488 が含まれています。 最初の値 (18487) はパスワードの有効期限が切れたことを示し、2 番目の (18488) はログイン前にパスワードをリセットする必要があることを示します。
このメソッドは、サーバーへの独自の接続を開き、パスワードの変更を要求し、完了するとすぐに接続を閉じます。 この接続は、SQL Server接続プールから取得されたり、戻されたりすることはありません。