刚装好的mongo,准备登录进去测一把的,结果就给我报这个错,鄙人是新手,还不太清楚这个,现学一下~html
在上一篇安装mongo的博客中(https://www.cnblogs.com/tuhooo/p/9673685.html),提供了一个简单的配置文件,其中有个选项是数据库
auth=true安全
这里的意思是开启身份验证,有用户,密码,角色,权限之类的东西,若是把auth设为false的话,那么mongo就至关于裸奔了,谁均可以连进来。若是服务器安全性挺高的,裸奔倒也不是问题。可是如今的版本仍是推荐把这个auth给打开。服务器
身份认证:验证用户的身份,你是谁测试
受权:断定用户在经过了身份验证的数据库上能够进行那些操做,好比读,写,只读,只写等spa
auth=true会禁止对数据库的匿名访问。htm
Mongo中用户的信息在system.users集合中,改集合存在于管理数据库中(我这里的是admin),它存储了用户id,密码和建立该集合所面向的数据库以及对用户受权的权限。blog
在打印的用户信息的第一行中,"user" : "tuhooo", "db" : "admin",表示了tuhooo这个用户及其关联的数据库"admin",它们两个惟一标识了Mongo中的一个用户。若是两个用户具备相同名称,可是关联到了不一样的数据库,那么它们被认为是两个不一样的用户。索引
在用户信息的倒数第二行:"roles" : [ { "role" : "read", "db" : "admin" }, { "role" : "userAdminAnyDatabase", "db" : "admin" } ]代表了tuhooo在这个用户能够有不一样数据库的不一样权限(这里只有一个库,由于我还没来得及建测试库)。若是两个用户具备相同的名称可是关联到了不一样的数据库,那么它们被认为是两个不一样的用户。get
小结:
用户名和关联的数据库惟一标识了Mongo中的一个用户。
一个用户能够在不一样数据库中具备不一样受权级别的多个角色。
Mongo中可用的角色有如下:
提供了对指定数据库全部集合的只读访问。
提供了指定数据库中对任意集合的读写访问。
用户能够在指定数据库中执行管理操做,使用ensureIndex、dropIndexes、reIndex、indexStats管理索引、重命名集合、建立集合等。
用户能够对指定数据库的system.users集合进行readWrite操做。它还启用了对已有用户的权限进行修改或者建立用户的功能,实际上指定了数据库的超级用户角色。
使得用户能够对修改或显示与整个系统有关的信息的管理操做授予访问权限。clusterAdmin只适用于管理数据库。
使得用户能够读取Mongo环境中的任意数据库。
相似于readWrite,只不过它适用于全部数据库。
相似于userAdmin,只不过它适用于全部数据库。
相似于dbAdmin,只不过它适用于全部数据库。
从2.6版本开始,一个用户管理员还能够经过提供集合级别以及命令级别的访问权限来建立遵循最小权限策略的用户定义的角色。用户定义的角色仅做用于建立它的数据库中,而且被数据库和角色名称的组合惟一标识。全部用户定义的角色都被存储在system.roles集合中。
上图是我登录的过程,刚用mongo链接进去了,而后直接:
db.auth("tuhooo", "123456")
竟然给我报错,只有切换到admin库,而后在这个库下面才能作登录。
切记切换到admin进行登录操做。
// 客户端链接 $ mongo // 切换到admin库 > use admin // 建立用户 > db.createUser( { user: "myUserAdmin", pwd: "abc123", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } ) // 登录, 只有登录后才能进行其余操做 > db.auth("myUserAdmin", "abc123") // 授予角色, 能够根据前面的介绍以及我的须要来授予 > db.grantRolesToUser("myUserAdmin", [ { role: "read", db: "admin" } ]) // 查看状态 > db.stats()
以上就是这样了~