Skip to content

MongoDB 8.0.8

1. 连接到 MongoDB 实例

首先使用 mongosh 连接到你的 MongoDB 实例:

bash
mongosh

或者指定主机和端口:

bash
mongosh --host localhost --port 27017

2. 切换到 admin 数据库

要创建用户,你需要先切换到 admin 数据库:

bash
use admin

3. 创建管理员用户(如果尚未创建)

如果你还没有管理员用户,首先创建一个:

js
db.createUser({
  user: "adminUser",
  pwd: "securePassword", // 替换为强密码
  roles: [
    { role: "userAdminAnyDatabase", db: "admin" },
    { role: "readWriteAnyDatabase", db: "admin" },
    { role: "dbAdminAnyDatabase", db: "admin" },
    { role: "clusterAdmin", db: "admin" }
  ]
})

4. 为特定数据库创建用户并分配权限

假设你要为名为 "myDatabase" 的数据库创建一个用户:

js
use myDatabase

db.createUser({
  user: "appUser",
  pwd: "appPassword", // 替换为强密码
  roles: [
    { role: "readWrite", db: "myDatabase" },
    { role: "dbAdmin", db: "myDatabase" }
  ]
})

5. 常用内置角色说明

MongoDB 提供了一系列内置角色:

  • 数据库用户角色:

    • read - 只读权限
    • readWrite - 读写权限
  • 数据库管理角色:

    • dbAdmin - 数据库管理权限
    • userAdmin - 用户管理权限
    • dbOwner - 数据库所有者(包含以上所有权限)
  • 集群管理角色:

    • clusterAdmin - 集群管理
    • clusterManager - 集群监控和管理
    • clusterMonitor - 集群监控
    • hostManager - 服务器管理
  • 备份/恢复角色:

    • backup - 备份权限
    • restore - 恢复权限
  • 全数据库角色:

    • readAnyDatabase - 所有数据库只读
    • readWriteAnyDatabase - 所有数据库读写
    • userAdminAnyDatabase - 所有数据库用户管理
    • dbAdminAnyDatabase - 所有数据库管理

6. 验证用户创建

js
db.getUsers()

7. 启用身份验证

要使权限生效,需要在启动 MongoDB 时启用身份验证:

7.1 在Linux中启用身份验证

编辑 MongoDB 配置文件(通常位于 /etc/mongod.conf),添加:

yaml
security:
  authorization: enabled

然后重启 MongoDB 服务:

bash
sudo systemctl restart mongod

7.2 在Windows中启用身份验证

确保 MongoDB 服务已停止:

bash
net stop MongoDB

配置 MongoDB 启用认证

方法一:通过配置文件(推荐) 找到 MongoDB 的配置文件(通常是 C:\Program Files\MongoDB\Server\8.0\bin\mongod.cfg)

在 security: 部分添加(或取消注释):

yaml
security:
  authorization: enabled

方法二:通过命令行参数 如果你不使用配置文件,可以在启动时添加参数:

bash
mongod --auth --dbpath "C:\data\db"

以服务方式启动:

bash
net start MongoDB

验证认证是否生效(尝试无认证连接:)

bash
mongosh

执行任何命令(如 show dbs)应该会返回错误。

然后使用认证连接:

bash
mongosh -u "myAdmin" -p "securePassword" --authenticationDatabase "admin"

现在你应该能够正常执行命令了。

安全建议

  1. 使用强密码(至少12个字符,包含大小写字母、数字和特殊字符)
  2. 定期轮换密码
  3. 考虑启用 TLS/SSL 加密连接
  4. 限制网络访问(绑定特定IP或使用防火墙规则)

8. 使用认证连接

之后连接时需要提供用户名和密码:

bash
mongosh -u "appUser" -p "appPassword" --authenticationDatabase "myDatabase"

或者在连接后认证:

javascript
use myDatabase
db.auth("appUser", "appPassword")

9. 更新用户权限

要修改现有用户的权限:

javascript
use myDatabase
db.updateUser("appUser", {
  roles: [
    { role: "readWrite", db: "myDatabase" },
    { role: "read", db: "reportingDatabase" }
  ]
})

10. 删除用户

javascript
use myDatabase
db.dropUser("appUser")

Released under the MIT License.