一、角色权限
1.管理所有数据库角色
| 角色 | 权限说明 | 适用场景 |
|---|---|---|
| root | 超级管理员,拥有所有数据库和集群的完整权限(读写、管理、用户控制等)。 | 紧急维护或全局管理(生产环境慎用)。 |
| dbadminanydatabase | 管理所有数据库的元数据(如创建/删除集合、索引),但不能读写数据。 | 跨库维护表结构(如批量创建索引)。 |
| useradminanydatabase | 管理所有数据库的用户和角色(如创建用户、分配权限),但不能直接操作数据。 | 集中式用户权限管理(需严格审计)。 |
| readwriteanydatabase | 读写所有数据库的数据(增删改查),但不能管理数据库结构或用户。 | 跨库数据同步或全局数据操作。 |
| readanydatabase | 读取所有数据库的数据(仅查询),无写入权限。 | 跨库数据分析或监控工具。 |
2.管理指定数据库角色
| 角色 | 权限说明 | 适用场景 |
|---|---|---|
| dbowner | 当前数据库的完全控制权限(包括 readwrite + dbadmin + useradmin)。 | 单库管理员(小型项目或独立业务库)。 |
| dbadmin | 管理当前数据库的元数据(如索引、集合结构),不能读写数据。 | 维护特定库的表结构或统计信息。 |
| useradmin | 管理当前数据库的用户和角色(如创建用户),不能操作数据或表结构。 | 单库用户权限管理(多租户系统)。 |
| readwrite | 读写当前数据库的数据(增删改查),不能管理数据库结构或用户。 | 应用程序的常规读写操作。 |
| read | 只读当前数据库的数据(查询),无写入权限。 | 只读报表或数据分析。 |
二、创建超级管理员
1.开启auth认证
security:
authorization: enabled

开启auth认证后重新服务也是可以访问,不过看不到数据表

2.关闭auth认证创建root用户
关闭auth认证进度终端, 在 admin 数据库创建用户
use admin
db.createuser({
user: "root",
pwd: "123456",
roles: [{ role: "root", db: "admin" }]
});
3.再次开启auth认证
下面的是使用root超级管理员登录,可以查看所有数据库,上面未用账户登录无法查看

三、创建拥有所有数据库查看权用户
db.createuser({
user: "test1",
pwd: "123456",
roles: ["readanydatabase"]
})
尝试新增数据会报错,是因为只有只读权限,无法新增

四、创建只拥有某个数据库所有权限用户
db.createuser({
user: "test2",
pwd: "123456",
roles: ["dbowner"]
})
连接时要指定数据库,不然会报错

连接成功后

总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论