

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

# 使用 SCRAM-SHA-256 進行身分驗證
<a name="scram-sha-256-auth"></a>

Amazon DocumentDB （與 MongoDB 相容） 支援密碼型身分驗證的 Salted Challenge Response Authentication Mechanism (SCRAM)。透過 SCRAM，伺服器會驗證用戶端是否知道使用者的密碼，而不會將密碼傳輸至伺服器。Amazon DocumentDB 支援兩種 SCRAM 機制： `SCRAM-SHA-1`和 `SCRAM-SHA-256`。 `SCRAM-SHA-256`使用更強大的 SHA-256 雜湊函數，並使用 FIPS 模式。

當您建立或更新使用者時，您可以將一個或兩個 SCRAM 機制指派給使用者。使用 建立的使用者會`SCRAM-SHA-1`繼續運作，而不會進行任何變更。SCRAM-SHA-256 身分驗證適用於 Amazon DocumentDB 執行個體型叢集次要版本 5.0.1\+ 和 8.0.1\+。

**SCRAM 和 IAM 身分驗證是互斥的**  
使用者可以擁有 SCRAM 機制或`MONGODB-AWS`機制，但不能同時擁有兩者。如需 IAM 身分驗證，請參閱 [使用 IAM 身分進行身分驗證](iam-identity-auth.md)。

**Topics**
+ [使用 SCRAM 機制建立使用者](#scram-sha-256-auth-creating-users)
+ [更新現有使用者](#scram-sha-256-auth-updating-users)
+ [使用 SCRAM-SHA-256 驗證](#scram-sha-256-auth-authenticating)

## 使用 SCRAM 機制建立使用者
<a name="scram-sha-256-auth-creating-users"></a>

建立使用者時，您可以使用 `mechanisms` 欄位指定要啟用的 SCRAM 機制。下列範例`SCRAM-SHA-256`僅建立`SCRAM-SHA-1`具有 和兩種機制的使用者：

```
db.runCommand({
    createUser: 'sha1user',
    pwd: passwordPrompt(),
    roles: ['readWrite'],
    mechanisms: ['SCRAM-SHA-1']
});
db.runCommand({
    createUser: 'sha256user',
    pwd: passwordPrompt(),
    roles: ['readWrite'],
    mechanisms: ['SCRAM-SHA-256']
});
db.runCommand({
    createUser: 'bothuser',
    pwd: passwordPrompt(),
    roles: ['readWrite'],
    mechanisms: ['SCRAM-SHA-1','SCRAM-SHA-256']
});
```

### 預設機制
<a name="scram-sha-256-auth-default-mechanisms"></a>

如果您未指定 `mechanisms` 欄位，Amazon DocumentDB 會`SCRAM-SHA-256`同時為使用者啟用 `SCRAM-SHA-1`和 。下列兩個命令相當：

```
db.runCommand({
    createUser: 'user1',
    pwd: passwordPrompt(),
    roles: ['readWrite']
});
// is equivalent to:
db.runCommand({
    createUser: 'user1',
    pwd: passwordPrompt(),
    roles: ['readWrite'],
    mechanisms: ['SCRAM-SHA-1','SCRAM-SHA-256']
});
```

根據預設，啟用這兩個機制可維持與僅支援 之較舊 MongoDB 驅動程式的相容性`SCRAM-SHA-1`。較新的驅動程式和 FIPS 模式偏好 `SCRAM-SHA-256`。如果您不希望任何使用者使用 進行身分驗證`SCRAM-SHA-1`，請只在 `SCRAM-SHA-256` `mechanisms` 欄位中為所有使用者指定 。

## 更新現有使用者
<a name="scram-sha-256-auth-updating-users"></a>

使用 建立的使用者會`SCRAM-SHA-1`繼續受到支援，不會有任何變更。若要將現有使用者從 切換`SCRAM-SHA-1`到 `SCRAM-SHA-256`，請使用新密碼和 `SCRAM-SHA-256`機制更新使用者：

```
db.runCommand({
    updateUser: 'existing',
    pwd: passwordPrompt(),
    mechanisms: ['SCRAM-SHA-256']
});
```

## 使用 SCRAM-SHA-256 驗證
<a name="scram-sha-256-auth-authenticating"></a>

您的驅動程式會自動使用連線字串參數進行身分驗證，然後再在每個連線上傳送第一個命令。若要在連線 URI `SCRAM-SHA-256`中選取 ，請將 `authMechanism` 參數設定為 `SCRAM-SHA-256`：

```
mongodb://username:password@hostname:port/authenticationDatabase?authMechanism=SCRAM-SHA-256
```

您也可以從 mongosh 傳送明確的身分驗證請求：

```
db.auth({user: 'sha256user', pwd: passwordPrompt(), mechanism: 'SCRAM-SHA-256'})
Enter password:
1
```

如果您未在連線選項中指定身分驗證機制，驅動程式會自動選取目標資料庫使用者支援的機制。