

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用身份验证 SCRAM-SHA-256
<a name="scram-sha-256-auth"></a>

Amazon DocumentDB（兼容 MongoDB）支持 Salted Challenge 响应身份验证机制 (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 机制。以下示例使用 only、`SCRAM-SHA-1` onl `SCRAM-SHA-256` y 和两种机制创建用户：

```
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>

您的驱动程序在每次连接上发送第一条命令之前，会自动使用连接字符串参数进行身份验证。要`SCRAM-SHA-256`在连接 URI 中进行选择，请将`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
```

如果您未在连接选项中指定身份验证机制，则驱动程序会自动选择目标数据库用户支持的机制。