

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在 RDS for SQL Server 上使用密碼政策進行 SQL Server 登入
<a name="SQLServer.Concepts.General.PasswordPolicy.Using"></a>

Amazon RDS 可讓您為執行 Microsoft SQL Server 的 Amazon RDS 資料庫執行個體設定密碼政策。採用此做法，為使用 SQL Server 驗證對您的資料庫執行個體進行身分驗證的登入設定複雜性、長度和鎖定需求。

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

**登入**  
在 SQL Server 中，可以向資料庫執行個體進行身分驗證的伺服器層級主體稱為**登入**。其他資料庫引擎可能會將此主體稱為*使用者*。在 RDS for SQL Server 中，登入可以使用 SQL Server 驗證或 Windows 驗證進行身分驗證。

**SQL Server 登入**  
使用 SQL Server 驗證以使用者名稱和密碼進行身分驗證的登入，是 SQL Server 登入。您透過資料庫參數設定的密碼政策，僅適用於 SQL Server 登入。

**Windows 登入**  
以 Windows 主體為基礎，並使用 Windows 驗證進行身分驗證的登入，是 Windows 登入。您可以在 Active Directory 中為 Windows 登入設定密碼政策。如需詳細資訊，請參閱 [使用 Active Directory 搭配 RDS for SQL Server](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>

所有密碼政策參數都是動態的，無須將資料庫重新開機即可生效。下表列出您可以設定哪些資料庫參數來修改 SQL Server 登入的密碼政策：


****  

| 資料庫參數 | 描述 | 允許值 | 預設值 | 
| --- | --- | --- | --- | 
| rds.password\$1complexity\$1enabled | 建立或變更 SQL Server 登入的密碼時，必須符合密碼複雜性需求。必須符合下列限制條件：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/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)。  
密碼複雜性和長度下限政策也適用於自主資料庫中的資料庫使用者。如需詳細資訊，請參閱[自主資料庫](https://learn.microsoft.com/en-us/sql/relational-databases/databases/contained-databases)。

下列限制條件適用於密碼政策參數：
+ `rds.password_min_age` 參數必須小於 `rds.password_max_age parameter`，除非 `rds.password_max_age` 設定為 0
+ `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 不支援密碼歷史記錄政策。歷史記錄政策可防止登入重複使用先前使用的密碼。

### 多可用區域部署考量
<a name="SQLServer.Concepts.General.PasswordPolicy.MAZPasswords"></a>

多可用區域執行個體的失敗登入嘗試計數器和鎖定狀態不會在節點間複寫。若登入在多可用區執行個體容錯移轉時遭到鎖定，該登入在新節點上有可能已解除鎖定。

# 主要登入的密碼考量
<a name="SQLServer.Concepts.General.PasswordPolicy.MasterLogin"></a>

當您建立 RDS for SQL Server 資料庫執行個體時，並不會根據密碼政策來評估主要使用者密碼。在對主要使用者執行操作時 (特別是在 `ModifyDBInstance` 命令中設定 `MasterUserPassword` 時)，也不會根據密碼評估新的主要密碼。在這兩種情況下，您都可以為主要使用者設定不符合密碼政策的密碼，且操作仍會成功。不符合政策時，RDS 會嘗試引發 RDS 事件，並建議設定強式密碼。請注意，強式密碼只應對主要使用者使用。

當主要使用者密碼不符合密碼政策需求時，RDS 會嘗試產生下列事件訊息：
+ 主要使用者已建立，但密碼不符合密碼政策的長度下限需求。考慮使用更嚴格的密碼。
+ 主要使用者已建立，但密碼不符合密碼政策的複雜性需求。考慮使用更嚴格的密碼。
+ 主要使用者密碼已重設，但密碼不符合密碼政策的長度下限需求。考慮使用更嚴格的密碼。
+ 主要使用者密碼已重設，但密碼不符合密碼政策的複雜性需求。考慮使用更嚴格的密碼。

根據預設，建立主要使用者時會將 `CHECK_POLICY` 和 `CHECK_EXPIRATION` 設定為 `OFF`。若要將密碼政策套用至主要使用者，您必須在建立資料庫執行個體後手動為主要使用者啟用這些旗標。啟用這些旗標後，請直接在 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 也會設定密碼。