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"
现在你应该能够正常执行命令了。
安全建议
- 使用强密码(至少12个字符,包含大小写字母、数字和特殊字符)
- 定期轮换密码
- 考虑启用 TLS/SSL 加密连接
- 限制网络访问(绑定特定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")