文档菜单
文档首页
/
MongoDB 手册
/ /

使用 SCRAM 在自托管部署上验证客户端

本页内容

  • 步骤
  • 下一步

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

要使用 SCRAM 验证复制集或分片集群,请参阅使用密钥文件认证部署自托管复制集。

1

启动不带访问控制的独立 mongod 实例。

打开终端,并以 mongod 用户运行以下命令

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

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

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

提示

mongod 启动时,它会在 /var/lib/mongodb 目录中创建一些系统文件。为确保系统文件具有正确的所有权,请以 mongod 用户身份遵循此教程。如果您以 root 用户启动 mongod,您将需要在稍后更新文件所有权。

2

打开一个新终端,并使用以下命令连接到集群:mongosh:

mongosh --port 27017

如果您正在连接到不同的部署,需要指定额外的命令行选项,例如 --host,以连接到所需的服务器。

3

重要

本地主机例外

您可以在启用访问控制之前或之后创建用户管理员。如果您在创建任何用户之前启用访问控制,MongoDB 提供了一个 localhost 例外,允许您在 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,您可以

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

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

本页内容