在 MongoDB 中用户权限是通过角色roles来管理的。每个角色集合了对数据库和集合的特定操作权限通过将角色赋予用户可以控制用户在数据库中的权限。以下是详细的步骤和代码示例展示如何设置用户权限。1. 连接到 MongoDB 实例使用mongo客户端连接到 MongoDB 实例mongo2. 切换到admin数据库大多数管理操作包括创建用户和设置权限都是在admin数据库中完成的use admin3. 创建管理员用户如果还没有管理员用户需要先创建一个管理员用户以便能够执行后续的管理操作db.createUser({ user: adminUser, pwd: adminPassword, roles: [ { role: userAdminAnyDatabase, db: admin }, { role: readWriteAnyDatabase, db: admin } ] })4. 启用身份验证编辑 MongoDB 配置文件mongod.conf来启用身份验证security: authorization: enabled重启 MongoDB 服务以应用配置更改sudo systemctl restart mongod5. 创建用户和设置权限切换到需要管理权限的目标数据库并创建用户和分配角色。5.1. 创建数据库用户切换到目标数据库例如testdbuse testdb创建一个具有读写权限的数据库用户db.createUser({ user: dbUser, pwd: dbPassword, roles: [ { role: readWrite, db: testdb } ] })5.2. 创建只读用户创建一个只读用户db.createUser({ user: readonlyUser, pwd: readonlyPassword, roles: [ { role: read, db: testdb } ] })5.3. 创建自定义角色首先切换到admin数据库然后创建自定义角色use admin创建一个自定义角色例如customRole它具有对testdb数据库的特定权限db.createRole({ role: customRole, privileges: [ { resource: { db: testdb, collection: }, actions: [ find, update ] }, { resource: { db: testdb, collection: logs }, actions: [ insert, remove ] } ], roles: [] })将自定义角色赋予用户use testdb db.createUser({ user: customUser, pwd: customPassword, roles: [ { role: customRole, db: testdb } ] })6. 更新现有用户权限可以使用updateUser方法更新现有用户的权限。例如给现有用户dbUser赋予额外的角色db.updateUser(dbUser, { roles: [ { role: readWrite, db: testdb }, { role: customRole, db: testdb } ] })7. 验证权限使用新创建的用户连接到 MongoDB 实例并尝试执行一些操作以验证权限是否正确mongo -u dbUser -p dbPassword --authenticationDatabase testdb在 MongoDB Shell 中use testdb // 读写测试 db.collection_name.insert({ key: value }) // 应该成功 db.collection_name.find() // 应该成功 db.collection_name.update({ key: value }, { $set: { key: newValue } }) // 应该成功 db.collection_name.remove({ key: newValue }) // 应该成功 // 自定义角色权限测试 db.logs.insert({ log: entry }) // 应该成功 db.logs.remove({ log: entry }) // 应该成功 db.collection_name.drop() // 失败如果用户没有删除集合的权限总结通过上述步骤可以在 MongoDB 中创建用户、分配角色和权限以及验证用户权限。以下是一个完整示例脚本展示了如何设置用户权限#!/bin/bash MONGO_HOSTlocalhost MONGO_PORT27017 ADMIN_USERadminUser ADMIN_PASSadminPassword # 管理员用户创建如果尚未创建 mongo --host $MONGO_HOST --port $MONGO_PORT admin EOF db.createUser({ user: $ADMIN_USER, pwd: $ADMIN_PASS, roles: [ { role: userAdminAnyDatabase, db: admin }, { role: readWriteAnyDatabase, db: admin } ] }) EOF # 启用身份验证编辑 mongod.conf 并重启 MongoDB 服务 # security: # authorization: enabled # 创建数据库用户 mongo --host $MONGO_HOST --port $MONGO_PORT -u $ADMIN_USER -p $ADMIN_PASS --authenticationDatabase admin testdb EOF db.createUser({ user: dbUser, pwd: dbPassword, roles: [ { role: readWrite, db: testdb } ] }) EOF # 创建只读用户 mongo --host $MONGO_HOST --port $MONGO_PORT -u $ADMIN_USER -p $ADMIN_PASS --authenticationDatabase admin testdb EOF db.createUser({ user: readonlyUser, pwd: readonlyPassword, roles: [ { role: read, db: testdb } ] }) EOF # 创建自定义角色并赋予用户 mongo --host $MONGO_HOST --port $MONGO_PORT -u $ADMIN_USER -p $ADMIN_PASS --authenticationDatabase admin admin EOF db.createRole({ role: customRole, privileges: [ { resource: { db: testdb, collection: }, actions: [ find, update ] }, { resource: { db: testdb, collection: logs }, actions: [ insert, remove ] } ], roles: [] }) EOF mongo --host $MONGO_HOST --port $MONGO_PORT -u $ADMIN_USER -p $ADMIN_PASS --authenticationDatabase admin testdb EOF db.createUser({ user: customUser, pwd: customPassword, roles: [ { role: customRole, db: testdb } ] }) EOF通过这些步骤和代码示例可以在 MongoDB 中精准地设置用户权限确保数据库的安全性和操作的规范性。