MongoDB账户管理
1.角色
角色 | 权限描述 |
read | 可以读取指定数据库中任何数据 |
readWrite | 可以读写指定数据库中任何数据,包括创建、重命名、删除集合 |
readAnyDatabase | 可以读取所有数据库中任何数据(除了数据库config和local之外) |
readWriteAnyDatabase | 可以读写所有数据库中任何数据(除了数据库config和local之外) |
userAdminAnyDatabase | 可以在指定数据库创建和修改用户(除了数据库config和local之外)。 |
dbAdminAnyDatabase | 可以读取任何数据库以及对数据库进行清理、修改、压缩、获取统计信息、执行 检查等操作(除了数据库config和local之外)。 |
dbAdmin | 可以读取指定数据库以及对数据库进行清理、修改、压缩、获取统计信息、执行 检查等操作 |
userAdmin | 可以在指定数据库创建和修改用户 |
clusterAdmin | 可以对整个集群或数据库系统进行管理操作 |
backup | 备份MongoDB数据最小的权限 |
restore | 从备份文件中还原恢复MongoDB数据(除了system.profile集合)的权限 |
root | 超级账号,超级权限 |
2.账户
1.创建
创建系统的管理员(root角色)的账户
#切换到admin库
> use admin
switched to db admin
#创建账户
> db.createUser(
{
user:"root",
pwd:"123456",
roles:["root"]
}
)
#或者不切换admin库,在创建账户的时候指定admin库也行
> db.createUser({user:"root2",pwd:"123456",roles:[{"role":"root","db":"admin"}]})
创建admin库的管理员,专门用来管理用户
> db.createUser({user:"admin",pwd:"123456",roles:[{"role":"userAdminAnyDatabase","db":"admin"}]})
Successfully added user: {
"user" : "admin",
"roles" : [
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
}
]
}
2.查看
db.system.users.find()
3.修改密码
db.changeUserPassword("root2","000000")
4.删除
> db.dropUser("root2")
true
提示:
1)本案例创建了两个用户,分别对应超管和专门用来管理用户的角色,事实上,你只需要一个用户即可。如果你对安全要求很高,防止超管泄漏,则不要创建超管用户。
2)和其它数据库(MySQL)一样,权限的管理都差不多一样,也是将用户和权限信息保存到数据库对应的表中。Mongodb存储所有的用户信息在admin数据库的集合system.users中,保存用户名、密码和数据库信息。
3)如果不指定数据库,则创建的指定的权限的用户在所有的数据库上有效,如{role:“userAdminAnyDatabase”,db:""}
3.认证
sudo vim /etc/mongod.conf
#security:
#operationProfiling:
修改如下:
security:
authorization: enabled
#operationProfiling:
sudo systemctl restart mongod.service
验证:
yantao@ubuntu18:~$ mongo
MongoDB shell version v4.2.15
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("e2eae586-2be2-42c4-8c58-b8ae741e6c1c") }
MongoDB server version: 4.2.15
> use admin
switched to db admin
> show dbs #不认证用户,无法看到数据库
> db.auth("myroot","123456") #认证成功
1
> show dbs #现在可以看到数据库了
admin 0.000GB
articledb 0.000GB
config 0.000GB
local 0.000GB