如何创建用户并添加角色 MongoDB

⚡ 智能摘要

创建用户并添加角色 MongoDB 它依赖于 db.createUser() 方法来定义凭据、分配内置角色以及将权限范围限定到特定数据库,从而加强对管理帐户和单个数据库帐户的访问控制。

  • ???? 核心方法: db.createUser() 命令通过在单个语句中指定用户、密码和角色数组来创建帐户。
  • 🛡️ 管理员权限范围: userAdminAnyDatabase 角色授予对所有数据库的管理权限,而 userAdmin 角色将控制权限限制在一个指定的数据库上。
  • 🎯 角色分配: 内置角色(如 read 和 readWrite)与用户可能对集合执行的操作精确对应。
  • 👥 多个数据库: 同一个账户可以在同一个角色数组中,在多个数据库中拥有不同的角色。
  • ✅ 验证: db.getUsers() 方法及其返回的输出证实帐户和权限已正确配置。

如何在创建用户并添加角色中 MongoDB

什么是内置角色? MongoDB?

在创建帐户之前,了解内置角色会有所帮助: MongoDB 角色是指一组已命名的权限集合,每个权限都将一个资源(数据库或集合)与其允许的操作关联起来。因此,在创建用户时分配角色,就决定了该帐户可以执行的具体操作。

MongoDB 其内置角色分为数据库用户角色、数据库管理角色、集群管理角色、备份和恢复角色以及超级用户角色。下表总结了管理用户时最常用的角色:

职位 类别 授予的特权
读 数据库用户 对数据库中所有非系统集合拥有只读访问权限。
读写 数据库用户 对集合拥有读取权限以及插入、更新和删除权限。
数据库管理员 数据库管理员 数据库的模式、索引和统计信息管理。
用户管理员 数据库管理员 在单个数据库中创建和修改用户和角色。
用户管理员任何数据库 超级用户 对实例中所有数据库进行用户管理。
根 超级用户 完全访问所有资源和操作权限。

MongoDB 创建管理员用户

在中创建用户管理员 MongoDB 通过使用 createUser 方法完成。以下示例显示了如何完成此操作。

db.createUser(
{	user: "Guru99",
	pwd: "password",

	roles:[{role: "userAdminAnyDatabase" , db:"admin"}]})

MongoDB 创建管理员用户

Code 说明:

  1. 第一步是指定需要创建的“用户名”和“密码”。
  2. 第二步是为用户分配角色。由于需要将其设置为数据库管理员,因此我们分配了“userAdminAnyDatabase”角色。此角色允许用户拥有对所有数据库的管理权限。 MongoDB.
  3. db 参数指定管理数据库,这是一个特殊的元数据库。 MongoDB 其中包含该用户的信息。

如果命令执行成功,将显示以下输出:

输出:

MongoDB 创建管理员用户

输出结果显示,一个名为“Guru用户“99”已创建,该用户拥有对所有数据库的权限。 MongoDB.

MongoDB 为单个数据库创建用户

要创建一个管理单个数据库的用户,我们可以使用上面提到的相同命令,但只需要使用“userAdmin”选项。

以下示例展示了如何实现这一点:

MongoDB 为单个数据库创建用户

db.createUser(
{
	user: "Employeeadmin",

	pwd: "password",

	roles:[{role: "userAdmin" , db:"Employee"}]})

Code 说明:

  1. 第一步是指定需要创建的“用户名”和“密码”。
  2. 第二步是为用户分配角色。在本例中,由于用户需要是数据库管理员,因此被分配到“userAdmin”角色。该角色仅允许用户拥有对db选项中指定的数据库的管理权限。
  3. db 参数指定用户应具有管理权限的数据库。

如果命令执行成功,将显示以下输出:

输出:

MongoDB 为单个数据库创建用户

输出显示创建了一个名为“Employeeadmin”的用户,并且该用户仅对“Employee”数据库具有权限。

管理用户

首先,了解你需要定义哪些角色。这里有一个完整的角色列表。 MongoDB例如,“read”角色只允许对数据库进行只读访问,而“readWrite”角色则提供对数据库的读写访问权限。这意味着用户可以对该数据库中的集合执行插入、删除和更新命令。

管理用户

db.createUser(
{
	user: "Mohan",

	pwd: "password",

	roles:[
	{ role: "read" , db:"Marketing" },
	{ role: "readWrite" , db:"Sales" }
	]
})

以上代码片段展示了如何创建名为 Mohan 的用户,并为其分配了多个数据库中的多个角色。在上述示例中,Mohan 被授予对“Marketing”数据库的只读权限和对“Sales”数据库的读写权限。

如何查看和管理 MongoDB 用户

账户创建之后, MongoDB 提供一系列命令,用于检查、更新和删除它们,而无需删除文件。ping 并重新创建每个用户。这些命令针对的是创建用户的数据库,因此在执行这些命令之前,请使用 use 语句切换到正确的数据库。

最常用的用户管理命令有:

  • db.getUsers() — 列出当前数据库中定义的每个用户以及每个用户所拥有的角色。
  • db.getUser(“username”) — 返回单个帐户的详细信息,这对于审核权限很有用。
  • db.grantRolesToUser() — 向现有用户添加一个或多个角色,而不影响当前角色。
  • db.revokeRolesFromUser() — 删除特定角色,并在职责发生变化时收紧访问权限。
  • db.changeUserPassword() — 重置帐户密码,同时保留ping 其功能保持不变。
  • db.dropUser() — 从数据库中永久删除用户。

以下示例授予一个额外角色,撤销另一个角色,重置密码,最后删除帐户:

// List all users in the current database
db.getUsers()

// Grant an additional role to an existing user
db.grantRolesToUser("Employeeadmin", [{ role: "readWrite", db: "Employee" }])

// Remove a role from a user
db.revokeRolesFromUser("Employeeadmin", [{ role: "userAdmin", db: "Employee" }])

// Change a user's password
db.changeUserPassword("Employeeadmin", "newPassword")

// Delete a user
db.dropUser("Employeeadmin")

执行这些操作后再次运行 db.getUsers() 可以确认更改已应用,并且只保留预期的帐户和角色。

最佳实践 MongoDB 用户管理

精心设计的用户帐户可以保持 MongoDB 部署安全且易于审计。以下做法可降低意外数据泄露和权限滥用的风险:

  • 应用最小权限: 只授予帐户真正需要的角色,优先授予单个数据库的读写权限,而不是广泛的管理角色。
  • 生产过程中避免生根: 将 root 和 userAdminAnyDatabase 角色保留用于设置和紧急任务,而不是日常操作。
  • 启用身份验证: 启动服务器时请使用 –auth 选项,以便真正强制执行凭据验证。
  • 使用强密码: 结合密码长度和复杂度,并使用 db.changeUserPassword() 按计划轮换密码。
  • 定期审核: Rev定期查看 db.getUsers() 的输出,并删除不再需要的帐户。

这些习惯共同确保每个账户都对应着实际需求,并且访问权限可以得到保障。 trac每次进行安全审查时都会进行编辑。

常见问题

是的。AI 助手可以将简单的描述转换为有效的 `db.createUser()` 命令,分配正确的角色数组,并将其作用域限定到数据库。运行生成的命令之前,务必先在非生产数据库上进行测试。

是的。AI驱动的审计工具可以读取db.getUsers()的输出,标记拥有root或userAdminAnyDatabase权限的账户,并建议最小权限角色。管理员在撤销生产系统中的访问权限之前,仍然应该审核每项建议。

userAdmin 角色管理特定数据库上的用户和角色,而 userAdminAnyDatabase 角色则授予实例中所有数据库的用户管理权限。userAdmin 角色用于范围控制,而 userAdminAnyDatabase 角色仅供受信任的管理员使用。

使用 use 命令切换到用户所在的数据库,然后运行 ​​db.dropUser(“username”)。 MongoDB 删除数据库中的帐户及其角色。之后运行 db.getUsers() 确认删除成功。

总结一下这篇文章: