阅读量:0
MongoDB 的权限管理用于确保数据库的安全性并限制用户访问敏感数据。MongoDB 使用基于角色的访问控制(RBAC)来管理权限,允许管理员定义用户和角色,并为这些角色分配相应的权限。
Mongodb的内置角色
数据库角色
角色 | 说明 | 权限 |
---|---|---|
read | 允许用户读取指定数据库的所有集合。包括 find 操作。 | find (对于所有集合) |
readWrite | 允许用户在指定数据库上进行读取和写入操作。包括增删查改操作。 | find, insert, update, delete (对于所有集合) |
dbAdmin | 允许用户管理数据库的结构,例如创建和删除集合、创建索引等。适用于数据库管理任务。 | createCollection, dropCollection, createIndex, dropIndex, collStats, dbStats, listCollections, listIndexes |
userAdmin | 允许用户创建和删除数据库用户及角色,修改用户的角色和权限。 | createUser, dropUser, grantRolesToUser, revokeRolesFromUser, changePassword |
dbOwner | 组合了 readWrite, dbAdmin, 和 userAdmin 的权限。允许用户在数据库上执行几乎所有操作,包括用户和角色管理。 | find, insert, update, remove, createCollection, dropCollection, createIndex, dropIndex, collStats, dbStats, listCollections, listIndexes, createUser, dropUser, grantRolesToUser, revokeRolesFromUser, changePassword |
集群角色
角色 | 说明 | 权限 |
---|---|---|
clusterAdmin | 允许用户执行集群级别的管理操作,例如查看集群状态、管理副本集和分片等。 | addShard, removeShard, enableSharding, shardCollection, splitChunk, moveChunk, balancerCollection, serverStatus, replSetGetStatus, listShards, listDatabases |
clusterManager | 允许用户执行集群管理任务,但没有 clusterAdmin 角色的全部权限。 | serverStatus, replSetGetStatus, listShards, listDatabases |
clusterMonitor | 允许用户查看集群的统计信息,例如服务器状态和副本集状态,但不允许修改集群配置。 | serverStatus, replSetGetStatus, listShards |
特权角色
角色 | 说明 | 权限 |
---|---|---|
backup | 允许用户执行备份操作,通常涉及读取数据库的所有数据。 | find (对于所有集合) |
restore | 允许用户进行恢复操作,通常涉及写入数据。 | insert, update, remove (对于所有集合) |
应用角色
角色 | 说明 | 权限 |
---|---|---|
readAnyDatabase | 允许用户读取任意数据库的所有集合。包括 find 操作。 | find (对于所有集合) |
readWriteAnyDatabase | 允许用户在任意数据库上进行读取和写入操作。包括 find, insert, update, remove 操作。 | find, insert, update, delete (对于所有集合) |
dbAdminAnyDatabase | 允许用户管理任意数据库的结构。 | createCollection, dropCollection, createIndex, dropIndex, collStats, dbStats, listCollections, listIndexes |
userAdminAnyDatabase | 允许用户在任意数据库中管理用户和角色。 | createUser, dropUser, grantRolesToUser, revokeRolesFromUser, changePassword |
root | 最高权限角色,具有对所有数据库和集群操作的完全控制权。包括所有内置角色的权限。 | 所有权限 |
创建自定义角色
操作权限,需要在 admin 库中进行,使用 use admin,进入admin库
创建自定义角色
db.createRole({ role: "角色名称myRole", privileges: [ { resource: { db: "库名称myDatabase", collection: "" }, actions: [ "find" ] } ], roles: [] })
参数说明:
- role: 自定义角色的名称。
- privileges: 一个数组,定义角色的权限。每个权限定义了可以在某个资源上执行哪些操作。
- resource: 权限适用的资源,db 是数据库名称,collection 可以指定集合(空字符串表示所有集合)。
- actions: 角色允许的操作,例如 find, insert, update, remove 等。
- roles: 角色继承的其他角色,通常为空数组(表示不继承任何其他角色)。
查看自定义的角色
db.getRole("角色名称myRole")
修改自定义角色
db.updateRole("角色名称myRole", { privileges: [ { resource: { db: "库名称myDatabase", collection: "" }, actions: [ "find", "listIndexes" ] } ] })
删除自定义角色
db.dropRole("角色名称myRole")
创建用户
创建用户
在 MongoDB 中,用户是基于数据库创建的。如果你希望用户仅在某个特定数据库上具有权限,需要在该数据库上创建用户。如果需要超管权限就在admin库中创建。
use myDatabase # 切换到指定的库,创建的用户只在当前库有权限 db.createUser({ user: "用户名", pwd: "密码", roles: ["readWrite", "dbAdmin"] // 角色列表 })
use admin db.createUser({ user: "用户名", pwd: "密码", roles: [ { "role" : "readWrite", "db" : "库名称myDatabase" // 创建用户时,指定用户的库 }, { "role" : "dbAdmin", // 指定第二个角色 "db" : "库名称myDatabase" } ] })
# 创建一个拥有所有权限的超管用户 use admin db.createUser({ user: "admin", pwd: "123456", roles: ["root"] })
查看用户
# 查看指定的用户 db.getUser("用户名") # 查看所有用户 show users
修改用户密码
db.updateUser("用户名", { pwd: "新密码" })
修改用户角色
db.updateUser("用户名", { roles: ["readWrite", "dbAdmin"] })
删除用户
db.dropUser("用户名")