在自托管部署中更改密码和自定义数据
概述
具有相应权限的用户可以更改自己的密码和自定义数据。自定义数据
存储可选的用户信息。
注意事项
要生成一个用于本步骤的强密码,可以使用 openssl
实用程序的 rand
命令。例如,使用以下选项运行 openssl rand
以创建 48 个伪随机字节的 base64 编码字符串
openssl rand -base64 48
先决条件
要修改自己的密码和自定义数据,您必须拥有授予changeOwnPassword
和changeOwnCustomData
操作的权限,分别在用户的数据库上。
以具有管理用户和角色权限的用户身份连接。
以具有管理用户和角色权限的用户身份连接到mongod
或mongos
,例如具有userAdminAnyDatabase
角色的用户。以下过程使用在在自托管部署中启用访问控制中创建的myUserAdmin
。
mongosh --port 27017 -u myUserAdmin -p --authenticationDatabase 'admin'
创建一个具有适当权限的角色。
在 admin
数据库中,使用 create
创建一个新角色,并赋予 changeOwnPassword
和 changeOwnCustomData
权限。
use admin db.createRole( { role: "changeOwnPasswordCustomDataRole", privileges: [ { resource: { db: "", collection: ""}, actions: [ "changeOwnPassword", "changeOwnCustomData" ] } ], roles: [] } )
添加具有此角色的用户。
在 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()
。
程序
更改您的密码和自定义数据。
使用 db.updateUser()
方法来更新密码和自定义数据。
例如,以下操作将用户的密码更改为 KNlZmiaNUp0B
并将自定义数据更改为 { title: "Senior Manager" }
提示
您可以使用 passwordPrompt()
方法与各种用户身份验证管理方法和命令一起使用,以提示输入密码而不是在方法或命令调用中直接指定密码。然而,您仍然可以直接指定密码,就像在早期的 mongo
shell 中一样。
use test db.updateUser( "user123", { pwd: passwordPrompt(), // or cleartext password customData: { title: "Senior Manager" } } )
按提示输入密码。