

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

# 在 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 登入的密碼政策：


****  

| 資料庫參數 | Description | 允許值 | 預設值 | 
| --- | --- | --- | --- | 
| rds.password\_complexity\_enabled | 建立或變更 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\_min\_length | SQL Server 登入的密碼中所需的字元數下限。 | 0-14 | 0 | 
| rds.password\_min\_age | 使用者在能夠變更 SQL Server 登入密碼之前必須使用密碼的天數下限。設定為 0 時，可立即變更密碼。 | 0-998 | 0 | 
| rds.password\_max\_age | 使用者在必須變更 SQL Server 登入密碼之前可使用密碼的天數上限。設定為 0 時，密碼永遠不會過期。 | 0-999 | 42 | 
| rds.password\_lockout\_threshold | 導致 SQL Server 登入遭到鎖定的連續登入失敗嘗試次數。 | 0-999 | 0 | 
| rds.password\_lockout\_duration | 鎖定的 SQL Server 登入在解除鎖定之前必須等待的分鐘數。 | 1-60 | 10 | 
| rds.password\_lockout\_reset\_counter\_after | 在失敗的登入嘗試之後，失敗登入嘗試計數器重設為 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>

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