

# RDS for SQL Server での SQL Server ログインのパスワードポリシーの使用
<a name="SQLServer.Concepts.General.PasswordPolicy.Using"></a>

Amazon RDS では、Microsoft SQL Server を実行している Amazon RDS DB インスタンスのパスワードポリシーを設定できます。これを使用して、SQL Server 認証を使用して DB インスタンスに認証するログインの複雑さ、長さ、およびロックアウト要件を設定します。

## 重要な用語
<a name="SQLServer.Concepts.General.PasswordPolicy.Using.KT"></a>

**「ログイン」 **  
SQL Server では、データベースインスタンスに認証できるサーバーレベルのプリンシパルを**ログイン**と呼びます。他のデータベースエンジンは、このプリンシパルを*ユーザー*と呼ぶ場合があります。RDS for SQL Server では、ログインは SQL Server 認証または Windows 認証を使用して認証できます。

**SQL Server ログイン**  
SQL Server 認証を使用して認証するためにユーザー名とパスワードを使用するログインは、SQL Server ログインです。DB パラメータを使用して設定するパスワードポリシーは、SQL Server ログインにのみ適用されます。

**Windows ログイン**  
Windows プリンシパルに基づき、Windows 認証を使用して認証するログインは Windows ログインです。Active Directory で Windows ログインのパスワードポリシーを設定できます。詳細については、「[RDS for SQL Server による Active Directory の操作](User.SQLServer.ActiveDirectoryWindowsAuth.md)」を参照してください。

## 各ログインのポリシーの有効化と無効化
<a name="SQLServer.Concepts.General.PasswordPolicy.EnableDisable"></a>

 各 SQL Server ログインには、`CHECK_POLICY` および `CHECK_EXPIRATION` のフラグがあります。デフォルトでは、新しいログインは、`CHECK_POLICY` を `ON` に設定し、`CHECK_EXPIRATION` を `OFF` に設定して作成されます。

`CHECK_POLICY` がログインについて有効な場合、RDS for SQL Server は複雑さと最小長の要件に照らしてパスワードを検証します。ロックアウトポリシーも適用されます。`CHECK_POLICY` と `CHECK_EXPIRATION` を有効にする T-SQL ステートメントの例: 

```
ALTER LOGIN [master_user] WITH CHECK_POLICY = ON, CHECK_EXPIRATION = ON;
```

`CHECK_EXPIRATION` が有効になっている場合、パスワードはパスワード有効期間ポリシーの対象です。`CHECK_POLICY` と `CHECK_EXPIRATION`が設定されているかどうかを確認する T-SQL ステートメント:

```
SELECT name, is_policy_checked, is_expiration_checked FROM sys.sql_logins;
```

## パスワードポリシーパラメータ
<a name="SQLServer.Concepts.General.PasswordPolicy.PWDPolicyParams"></a>

すべてのパスワードポリシーパラメータは動的であり、有効にするために DB を再起動する必要はありません。次の表に、SQL Server ログインのパスワードポリシーを変更するために設定できる DB パラメータを示します。


****  

| DB パラメータ | 説明 | 許可された値 | デフォルト値 | 
| --- | --- | --- | --- | 
| rds.password\$1complexity\$1enabled | SQL Server ログインのパスワードを作成または変更するときは、パスワードの複雑さに関する要件を満たす必要があります。次の制約を満たす必要があります。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/SQLServer.Concepts.General.PasswordPolicy.Using.html)  | 0、1 | 0 | 
| rds.password\$1min\$1length | SQL Server ログインのパスワードに必要な最小文字数。 | 0-14 | 0 | 
| rds.password\$1min\$1age | ユーザーが SQL Server ログインパスワードを変更するまでに使用する必要がある最小日数。パスワードは、0 に設定した直後に変更できます。 | 0～998 | 0 | 
| rds.password\$1max\$1age | SQL Server ログインパスワードを使用できる最大日数。その後、ユーザーがパスワードを変更する必要があります。0 に設定されると、パスワードは期限切れになりません。 | 0～999 | 42 | 
| rds.password\$1lockout\$1threshold | SQL Server ログインがロックアウトされる原因となるログイン試行の連続失敗回数。 | 0～999 | 0 | 
| rds.password\$1lockout\$1duration | ロックアウトされた SQL Server ログインがロック解除されるまでに待機する必要がある時間 (分)。 | 1～60 | 10 | 
| rds.password\$1lockout\$1reset\$1counter\$1after | ログイン試行に失敗してから、失敗したログイン試行カウンターが 0 にリセットされるまでに経過する必要がある時間 (分)。 | 1～60 | 10 | 

**注記**  
SQL Server パスワードポリシーの詳細については、「[パスワードポリシー](https://learn.microsoft.com/en-us/sql/relational-databases/security/password-policy)」を参照してください。  
パスワードの複雑さと最小長ポリシーは、含まれているデータベースの DB ユーザーにも適用されます。詳細については、「[含まれているデータベース](https://learn.microsoft.com/en-us/sql/relational-databases/databases/contained-databases)」を参照してください。

パスワードポリシーパラメータには、次の制約が適用されます。
+ `rds.password_max_age` が 0 に設定されていない限り、`rds.password_min_age` パラメータは `rds.password_max_age parameter` より小さい必要があります。
+ `rds.password_lockout_reset_counter_after` パラメータは、`rds.password_lockout_duration` パラメータ以下である必要があります。
+ `rds.password_lockout_threshold` が 0 に設定されている場合、`rds.password_lockout_duration` と `rds.password_lockout_reset_counter_after` は適用されません。

### 既存のログインに関する考慮事項
<a name="SQLServer.Concepts.General.PasswordPolicy.ExistingLogins"></a>

インスタンスのパスワードポリシーを変更した後、ログイン用の既存のパスワードは、新しいパスワードの複雑さと長さの要件に対して遡及的に評価**されません**。新しいパスワードのみが新しいポリシーに対して検証されます。

SQL Server は、既存のパスワードの有効期間要件を評価**します**。

パスワードポリシーが変更されると、パスワードがすぐに期限切れになる可能性があります。例えば、ログインの `CHECK_EXPIRATION` が有効であり、パスワードが 100 日前に変更され、`rds.password_max_age` パラメータを 5 日に設定した場合、パスワードは直ちに期限切れになり、次回のログイン時にパスワードを変更する必要があります。

**注記**  
RDS for SQL Server は、パスワード履歴ポリシーをサポートしていません。履歴ポリシーは、以前に使用されたパスワードを再利用したログインを禁止します。

### マルチ AZ 配置に関する考慮事項
<a name="SQLServer.Concepts.General.PasswordPolicy.MAZPasswords"></a>

マルチ AZ インスタンスの失敗したログイン試行カウンターとロックアウト状態は、ノード間でレプリケートされません。マルチ AZ インスタンスがフェイルオーバーしたときにログインがロックアウトされていた場合、新しいノードでログインがすでにロック解除されている可能性があります。

# マスターログインのパスワードに関する考慮事項
<a name="SQLServer.Concepts.General.PasswordPolicy.MasterLogin"></a>

RDS for SQL Server DB インスタンスを作成する場合、マスターユーザーパスワードはパスワードポリシーに対して評価されません。新しいマスターパスワードは、マスターユーザーに操作を実行するとき、特に `ModifyDBInstance` コマンドで `MasterUserPassword` を設定するときにも、パスワードに対して評価されません。いずれの場合も、パスワードポリシーを満たさないマスターユーザーのパスワードを設定でき、その場合でも操作は成功します。ポリシーが満たされない場合、RDS は強力なパスワードの設定を推奨して、RDS イベントのレイズを試みます。マスターユーザーには強力なパスワードのみを使用してください。

マスターユーザーのパスワードがパスワードポリシーの要件を満たしていない場合、RDS は次のイベントメッセージの生成を試みます。
+ マスターユーザーは作成されましたが、パスワードがパスワードポリシーの最小長要件を満たしていません。より強力なパスワードの使用を検討してください。
+ マスターユーザーは作成されましたが、パスワードがパスワードポリシーの複雑さ要件を満たしていません。より強力なパスワードの使用を検討してください。
+ マスターユーザーのパスワードはリセットされましたが、パスワードがパスワードポリシーの最小長要件を満たしていません。より強力なパスワードの使用を検討してください。
+ マスターユーザーのパスワードはリセットされましたが、パスワードがパスワードポリシーの複雑さ要件を満たしていません。より強力なパスワードの使用を検討してください。

デフォルトでは、マスターユーザーは `CHECK_POLICY` と `CHECK_EXPIRATION` が `OFF` に設定されて作成されます。パスワードポリシーをマスターユーザーに適用するには、DB インスタンスの作成後、マスターユーザーに対してこれらのフラグを手動で有効にする必要があります。これらのフラグを有効にしたら、SQL Server でマスターユーザーのパスワードを直接 (T-SQL ステートメントや SSMS などを介して) 変更し、新しいパスワードをパスワードポリシーに照らして検証します。

**注記**  
マスターユーザーがロックアウトされた場合は、`ModifyDBInstance` コマンドを使用してマスターユーザーのパスワードをリセットすることで、ユーザーのロックを解除できます。

## マスターユーザーパスワードの変更
<a name="SQLServer.Concepts.General.PasswordPolicy.MasterLogin.Reset"></a>

マスターユーザーのパスワードは、[ModifyDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html) コマンドを使用して変更できます。

**注記**  
マスターユーザーのパスワードをリセットすると、RDS はマスターユーザーのさまざまなアクセス許可をリセットし、マスターユーザーは特定のアクセス許可を失う可能性があります。マスターユーザーのパスワードをリセットすると、マスターユーザーがロックアウトされた場合もロックが解除されます。

RDS はマスターユーザーの新しいパスワードを検証し、パスワードがポリシーを満たさない場合は RDS イベントの発行を試みます。RDS は、パスワードポリシーを満たさない場合でもパスワードを設定します。