Docs 菜单

Docs 主页开发应用程序MongoDB Manual

更改密码和自定义数据

在此页面上

  • 概述
  • 考虑因素
  • 先决条件
  • 步骤

拥有相应特权的用户可更改自己的密码和自定义数据。Custom data会存储可选用户信息。

要生成在此过程中使用的强密码,您可以使用 openssl 实用工具的 rand 命令。例如,使用以下选项发出 openssl rand 来创建 48 个伪随机字节长且采用 Base64 编码的字符串:

openssl rand -base64 48

要修改自己的密码和自定义数据,您必须具有分别授予在用户数据库上执行 changeOwnPasswordchangeOwnCustomData 动作的特权。

1

使用可管理用户和角色的特权连接到 mongodmongos,例如具有 userAdminAnyDatabase 角色的用户。以下过程将使用在启用访问控制中创建的 myUserAdmin

mongosh --port 27017 -u myUserAdmin -p --authenticationDatabase 'admin'

如果没有为 -p命令行选项指定密码, mongosh会提示输入密码。

2

admin 数据库中,create 具有 changeOwnPasswordchangeOwnCustomData 的新角色。

use admin
db.createRole(
{ role: "changeOwnPasswordCustomDataRole",
privileges: [
{
resource: { db: "", collection: ""},
actions: [ "changeOwnPassword", "changeOwnCustomData" ]
}
],
roles: []
}
)
3

test 数据库中,create 具有创建的 "changeOwnPasswordCustomDataRole" 角色的新用户。例如,以下操作创建的用户同时具有内置角色 readWrite 和用户创建的 "changeOwnPasswordCustomDataRole"

提示

mongo shell 的 4.2 版开始,您可以将 passwordPrompt() 方法与各种用户身份验证/管理方法/命令结合使用,以提示输入密码,而不是直接在方法/命令调用中指定密码。不过,您仍然可以像使用早期版本的 mongo shell 一样直接指定密码。

use test
db.createUser(
{
user:"user123",
pwd: passwordPrompt(), // or cleartext password
roles:[ "readWrite", { role:"changeOwnPasswordCustomDataRole", db:"admin" } ]
}
)

要向现有用户授予新角色,请使用 db.grantRolesToUser()

1

以具有相应特权的用户身份连接到 mongodmongos

例如,以下操作以先决条件部分中创建的user123身份连接到 MongoDB。

mongosh --port 27017 -u user123 --authenticationDatabase 'test' -p

如果没有为-p命令行选项指定密码, mongosh会提示输入密码。

要检查您是否拥有先决条件部分中指定的权限并查看用户信息,请使用带有showPrivileges选项的usersInfo命令。

2

使用 db.updateUser() 方法更新密码和自定义数据。

例如,以下操作将用户密码更改为 KNlZmiaNUp0B 并将自定义数据更改为 { title: "Senior Manager" }

提示

mongo shell 的 4.2 版开始,您可以将 passwordPrompt() 方法与各种用户身份验证/管理方法/命令结合使用,以提示输入密码,而不是直接在方法/命令调用中指定密码。不过,您仍然可以像使用早期版本的 mongo shell 一样直接指定密码。

use test
db.updateUser(
"user123",
{
pwd: passwordPrompt(), // or cleartext password
customData: { title: "Senior Manager" }
}
)

根据提示输入密码。

← 管理用户和角色