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

在自托管部署中更改密码和自定义数据

本页内容

  • 概述
  • 注意事项
  • 先决条件
  • 步骤

具有相应权限的用户可以更改自己的密码和自定义数据。自定义数据存储可选的用户信息。

要生成一个用于本步骤的强密码,可以使用 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" 的用户。

提示

您可以使用 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

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

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

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

2

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

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

提示

您可以使用 passwordPrompt() 方法与各种用户身份验证管理方法和命令一起使用,以提示输入密码而不是在方法或命令调用中直接指定密码。然而,您仍然可以直接指定密码,就像在早期的 mongo shell 中一样。

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

按提示输入密码。

返回

管理用户和角色