mongodb登陆认证
判断服务端是否开启认证
输入命令mongo,如果服务端开启认证,就会显示为

服务端没有开启认证,就会有一个WARNING

新建一个全局管理员
新建一个mongodb全局管理员,用于管理所有数据库中的用户和角色
db.createUser({
user:"admin",
pwd:"123456",
roles:["userAdminAnyDatabase"]
})
其中用户名是root,密码是123456,角色是userAdminAnyDatabase。
如果创建成功,就会返回
Successfully added user: { "user" : "admin", "roles" : [ "userAdminAnyDatabase" ] }
开启mongodb认证
默认情况下,没有启用mongodb的认证功能,是以匿名的方式登陆mongodb服务器。
先删除当前的docker容器
docker container stop mongodb
docker container rm mongodb
然后启用具有认证功能的mongodb容器。
docker run --name mongo -p 27017:27017 -v /data/mongodb/:/data/db -v /etc/localtime:/etc/localtime -d mongo mongod --auth
登陆mongod服务器
mongo
输入用户名和密码
db.auth("root","123456")
如果登陆成功,就会返回
1
读写数据库
不过当前用户是没有读写数据的权限的,想要读写指定数据库中的集合数据,需要新建一个用户
切换数据库,比如test
use test
新建用户
db.createUser({
user:"admin",
pwd:"123456",
roles:["readWrite"]})
这样这个用户就能读取指定数据库test的集合数据了
权限和角色表
| 角色 | 备注 |
|---|---|
| read | 允许用户读指定数据库 |
| readWrite | 允许用户读写指定数据库 |
| dbAdmin | 允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计 |
| userAdmin | 可以在指定数据库里创建、删除和管理用户 |
自定义权限的角色
mongodb默认角色和权限管理,不是非常自由。不过可以自定义角色和权限管理。
创建只能读取test.accounts集合和web.log集合的用户
- 创建自定义角色
db.createRole({
role:"readTestAccounts",
privileges:[{
resource:{db:"test",collection:"accounts", action:["find"]},
resource:{db:"log",collection:"accounts", action:["find"]}
}],
roles:[]}]
- 创建用户
db.createUser({
user:"readtest",
pwd:"123456",
roles:["readTestAccounts"]})
查看创建的用户
use admin
show users
db.system.users.find()
db.runCommand({usersInfo:"user"})
修改用户密码和删除用户
- 修改用户密码
use admin
db.changeUserPassword("user", "pwd")
- 删除用户
use admin
db.dropUser('user')