Docs 菜单
Docs 主页
/
MongoDB Manual
/ /

使用 SCRAM 对自管理部署上的客户端进行身份验证

在此页面上

  • 步骤
  • 后续步骤

以下步骤将在独立运行的 mongod 实例上为客户端身份验证设置 SCRAM。

要对副本集或分片集群使用 SCRAM 身份验证,请参阅使用密钥文件身份验证部署自管理副本集

1

在没有访问控制的情况下,启动独立运行的 mongod 实例。

打开终端并以 mongod 用户的身份运行以下命令:

mongod --port 27017 --dbpath /var/lib/mongodb

本教程中的 mongod 实例使用 port 27017/var/lib/mongodb 数据目录。

本教程假定 /var/lib/mongodb 目录已存在,并且是默认的 dbPath。您可以根据需要指定其他数据目录或端口。

提示

mongod 启动时,它会在 /var/lib/mongodb 目录中创建一些系统文件。为了确保系统文件具有正确的所有关系,请以 mongod 用户身份跟随本教程。如果您以 root 用户身份启动 mongod,则必须稍后更新文件所有权。

2

打开新终端并使用 mongosh连接到集群:

mongosh --port 27017

如要连接到其他部署,请根据需要指定 --host 等其他命令行选项进行连接。

3

重要

本地主机异常

在启用访问控制前后都能创建用户管理员。如果您先启用访问控制,再创建用户,MongoDB 会提供本地主机例外,允许您在 admin 数据库中创建用户管理员。创建后,您必须以用户管理员身份进行身份验证才能创建其他用户。

使用 mongosh

  1. 切换到 admin 数据库

  2. 并添加具有 userAdminAnyDatabasereadWriteAnyDatabase 角色的 myUserAdmin 用户”:

use admin
db.createUser(
{
user: "myUserAdmin",
pwd: passwordPrompt(), // or cleartext password
roles: [
{ role: "userAdminAnyDatabase", db: "admin" },
{ role: "readWriteAnyDatabase", db: "admin" }
]
}
)

提示

passwordPrompt() 方法会提示您输入密码。您也可以直接将密码指定为字符串。我们建议您使用 passwordPrompt() 方法,避免将密码显示在屏幕上,也避免可能将密码泄露到 Shell 历史记录中。

userAdminAnyDatabase 角色允许此用户:

  • 创建用户

  • 授予或撤销用户的角色

  • 创建或修改自定义角色

您可以根据需要为用户分配其他内置角色用户自定义角色

在其内创建此用户的数据库(在此示例中为 admin)便是该用户的身份验证数据库。虽然此用户需要通过此数据库进行身份验证,但该用户还可能会在其他数据库中拥有角色。此用户的身份验证数据库不会限制该用户的特权。

4

关闭 mongod 实例。使用 mongosh,发出以下命令:

db.adminCommand( { shutdown: 1 } )

退出 mongosh

在启用访问控制的情况下启动 mongod

  • 如果在命令行中启动 mongod,请添加 --auth 命令行选项:

    mongod --auth --port 27017 --dbpath /var/lib/mongodb
  • 如果使用配置文件启动 mongod,请添加 security.authorization 配置文件设置:

    security:
    authorization: enabled

连接到此实例的客户端现在必须对自身进行身份验证,并且只能执行由所分配角色确定的操作。

重要

本地主机异常

在启用访问控制前后都能创建用户。如果您先启用访问控制,再创建用户,MongoDB 会提供本地主机例外,允许您在 admin 数据库中创建用户管理员。创建后,您必须以用户管理员身份进行身份验证才能创建其他用户。

5

使用 mongosh,您可以

使用 -u <username>-p--authenticationDatabase <database> 命令行选项启动 mongosh

mongosh --port 27017 --authenticationDatabase \
"admin" -u "myUserAdmin" -p

根据提示输入密码。

使用 mongosh 连接到您的数据库部署:

mongosh --port 27017

mongosh中,切换到身份验证数据库(在本例中为admin ),并使用db.auth(<username>, <pwd>)方法进行身份验证:

use admin
db.auth("myUserAdmin", passwordPrompt()) // or cleartext password

提示

passwordPrompt() 方法会提示您输入密码。您也可以直接将密码指定为字符串。我们建议您使用 passwordPrompt() 方法,避免将密码显示在屏幕上,也避免可能将密码泄露到 Shell 历史记录中。

根据提示输入密码。

要对副本集或分片集群使用 SCRAM 身份验证,请参阅使用密钥文件身份验证部署自管理副本集

后退

SCRAM

在此页面上