今天第一次学习MongoDB,完成了MongoDB的安装,并写了一个JAVA小程序 来对MongoDB进行操作但是发现一个问题,MongoDB不需要MySQL那样,访问时要输入用户名和密码,这对数据的安全来说,是有问题的,所以又 Google了一下,来解决MongoDB的访问权限和用户设置问题。

1、输入命令:show dbs,很多教程说MongoDB内置了两个数据,一个是admin,一个是local,但是我的库中只有一个local数据库,不知道是不是刚安装好,默认是没有的。但后来用的时候,发现这不影响,只要按下列步骤走就行了。

2、输入命令:use admin,没错只要敲这个命令就行了,原本没有admin数据库没有关系,这个表等同于MySQL中的user表,用于存放超级管理员的。

3、输入命令:db.addUser('sa','123'),添加一个用户sa,密码123的超级管理员用户。然后我们看看连接MongoDB有没有提示输入用户名和密码,我们先退出来(ctrl + c)。

4、输入命令:use admin

5、输入命令:show collections,查看库下所有的表,你会发现,MongoDB并没有提示你输入用户名、密码。哎呦,奇怪哦。没事,接着往下走……

6、打开注册表,找到MongoDB的节点HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\MongoDB下,在它的ImgPath中,加入--auth,如下所示:

"E:\mongodb\bin\mongod.exe" --logpath "E:\mongodb\log\MongoDB.log" --auth --logappend --dbpath "E:\mongodb\data" --directoryperdb --service 然后重启MongoDB服务(在控制面板下的服务)(不知道--auth的位置是不是有限制,我放在service前面,结果重启MongoDB的时候报 错)

7、输入命令:use admin

8、输入命令:show collections,我们发现已经无法访问该库下的集合了,提示错误:

Tue Dec 25 13:25:13 uncaught exception: error: {
"$err" : "unauthorized db:admin ns:admin.system.namespaces lock type:0 client:127.0.0.1","code" : 10057
}

很明显,提示说没有访问权限,接下来我们设置用户名和密码了,请看下面

9、输入命令:db.auth('sa','123'),结果是1,说明用户名密码正确,如果不对的话会输出0

10、输入命令:show collections,结果就出来了

11、如果我们新建一个数据库,如TestDB,发现用sa, 123是不能登录的,而通过先登录admin,然后转到TestDB才能访问通,为什么这个问题留到后面解决,如果网友知道的话,欢迎留言

12、新建数据库,输入命令:mongo TestDB

13、输入命令:db.addUser('test','test'),然后退出(ctrl + c)

14、输入命令:use TestDB

15、输入命令:show collections.提示没有权限

16、输入命令:db.auth('test','test'),输出结果1,表示用户通过验证

17、输入命令:show collections,即可显示结果了

 

admin数据库中的用户被视为超级用户(即管理员),所以通过admin可以进入MongoDB的其它数据库,而当你不想只是通过admin进入其他数据库时,你必须为其他每个数据库单独建立账户

以上如果有错误,忘网友批评指正!