一、启用身份验证(如果尚未启用)
- 修改MongoDB配置文件
编辑mongod.cfg(默认路径:C:\Program Files\MongoDB\Server\<版本>\bin\mongod.cfg),添加以下配置:security: authorization: enabled - 重启MongoDB服务
net stop MongoDB net start MongoDB
二、创建管理员账号(最高权限)
-
无认证模式下连接MongoDB
# 进入MongoDB安装目录的bin文件夹 cd "C:\Program Files\MongoDB\Server\<版本>\bin" mongo --port 27017 -
切换到
admin数据库并创建管理员use admin db.createUser({ user: "admin", pwd: "your_admin_password", // 替换为实际密码 roles: [ { role: "root", db: "admin" } ] // 赋予root权限 }) -
退出MongoDB Shell
exit
三、创建普通数据库和用户
-
以管理员身份登录
mongo -u "admin" -p "your_admin_password" --authenticationDatabase "admin" -
创建新数据库(或切换到已有数据库)
use mydb // 数据库不存在时,首次插入数据会自动创建 -
为该数据库创建用户
db.createUser({ user: "mydb_user", pwd: "user_password", // 替换为实际密码 roles: [ { role: "readWrite", db: "mydb" } ] // 赋予读写权限 })常用角色说明:
read:只读权限readWrite:读写权限dbAdmin:数据库管理权限(如索引、统计)dbOwner:数据库所有者(包含读写和管理权限)userAdmin:用户管理权限
四、验证用户权限
-
使用新用户登录测试
mongo -u "mydb_user" -p "user_password" --authenticationDatabase "mydb" -
执行权限操作
use mydb db.test.insertOne({ name: "demo" }) // 写入数据(验证写权限) db.test.find() // 读取数据(验证读权限)
五、管理用户命令
| 命令 | 说明 |
|---|---|
db.updateUser("用户名", { ... }) | 修改用户密码或权限 |
db.dropUser("用户名") | 删除用户 |
db.getUsers() | 查看当前数据库所有用户 |
六、常见问题
-
身份验证失败
- 确保配置文件中的
authorization: enabled已生效。 - 检查用户名、密码和认证数据库(
--authenticationDatabase)是否匹配。
- 确保配置文件中的
-
权限不足
- 使用管理员账号为用户分配更高权限角色(如
dbOwner)。
- 使用管理员账号为用户分配更高权限角色(如
-
数据库未自动创建
- 执行
db.collection.insertOne({})插入一条空数据触发创建。
- 执行
七、示例完整流程
# 1. 以管理员身份登录
mongo -u admin -p admin_password --authenticationDatabase admin
# 2. 创建新数据库和用户
use myapp
db.createUser({
user: "dev",
pwd: "dev123",
roles: [ { role: "readWrite", db: "myapp" }, { role: "read", db: "reports" } ]
})
# 3. 验证用户权限
mongo -u dev -p dev123 --authenticationDatabase myapp
use myapp
db.stats() // 检查权限
通过以上步骤,您可以为MongoDB中的每个数据库创建独立的用户账号,并精确控制其访问权限。
1233

被折叠的 条评论
为什么被折叠?



