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