mongodb存储所有的用户信息在admin 数据库的集合system.users中,保存用户名、密码和数据库信息。mongodb默认不启用授权认证,只要能连接到该服务器,就可连接到mongod。若要启用安全认证,需要更改配置文件参数auth
官方文档:https://docs.mongodb.com/manual/tutorial/enable-authentication/

  • db.createUser( )函数介绍

1:创建一个root用户,角色为userAdminAnyDatabase,因此root用户对数据库具有管理权限,但是不具备操作权限

db.createUser({user:"root",pwd:"123456", roles: [{ role: "userAdminAnyDatabase", db: "admin" }]});

2:createUser()方法说明

user:定义用户名

pwd:设置密码

roles:指定用户的角色,可以用一个空数组给新用户设定空角色; 在roles字段,可以指定内置角色和用户定义的角色。

db:指定用户对哪个数据库具有管理员权限

 

3:角色种类说明

In Roles(内置角色):

read、readWrite;

②. 数据库管理角色:dbAdmin、dbOwner、userAdmin;

③. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;

restore;

⑤. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase

⑥. 超级用户角色:root

// 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)

⑦. 内部角色:__system

 

4:角色对应的意义说明

Read:允许用户读取指定数据库

readWrite:允许用户读写指定数据库

dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile

userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户

clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。

readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限

readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限

userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限

dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。

root:只在admin数据库中可用。超级账号,超级权限

 

5:查看授权表

db.system.users.find();

 

conf, 添加

auth=true(针对于2.6版本)

security:(针对于3.4版本)

authorization: enabled

 

7:可以在连接数据库的时候认证,也可以在登入时候认证,这里使用登入之后认证的方式

show dbs; (会报错,因为没有管理授权)

db.auth("root", "123456") 授权之后再查看数据库就没有问题了

 

8:此时登入使用的是root用户,角色是管理角色,但是不具备对数据库的操作权限

use test;

show collections; (会报错,因为没有操作权限)

 

test,让其对test具有读写操作, 且切换用户为test

db.createUser({user:"test",pwd:"test", roles: [{ role: "readWrite", db: "test" }]}); 
 
 
db.auth("test", "test")

 

test库的表,发现可以查看了

show collections;

 

11:其实,如果需要创建一个用户具有管理权限且同时具有操作权限,那么这个用户的角色必须是root

db.createUser({user:"yhy",pwd:"123456", roles: [{ role: "root", db: "admn" }]});