【数据库】mongodb3.0.5用户权限认证和可视化工具登录问题

来源:互联网 发布:ip网络广播问题解决 编辑:程序博客网 时间:2024/05/22 07:41

如果你不幸用了mongodb3.0甚至从2.6之后版本,你有点为用户认证权限抓狂,要是更加不幸你使用了mongo vue来作为可视化客户端,我只能恭喜你折腾的让你会有想死的心。

最近因为mongodb这种Nosql的确太火(zuo)了,于是认(zhuang)真(bi)的学了下,学的倒是顺心,但突然觉得咋我从来没用到用户密码登陆呢?于是乎,就因为整这个用户权限认证,让我头疼了几天,今天在这记录下,希望能帮到和我“同病相怜”的人。

环境:

win7 64bit

mongodb-win32-x86_64-2008plus-ssl-3.0.5-signed.msi

mongoVUE 1.6.9(作死)


安装mongodb,参考http://jingyan.baidu.com/article/ed15cb1b52b8661be2698162.html

1、其实也就是选择自定义一路安装下去,相信问题不大。比如我的安装在D:\MongoDB,最后安装完会产生D:\MongoDB\Server\3.0这样的文件夹路径。

2、在这路径下建一个文件夹:data,在data下面创建两个文件夹db(存放数据库),log(存放日志)

3、在环境变量中创建MONGODB_HOME=D:\MongoDB\Server\3.0,PATH最末加入;%MONGODB_HOME%\bin(当然也可以不做这一步,只是这样在以后输入命令的时候就不需要再切换到bin路径下再做其他的。)

3、用管理员身份运行命令提示符窗口,输入

mongod --dbpath "D:\MongoDB\Server\3.0\data\db" --logpath   "D:\MongoDB\Server\3.0\data\log\MongoDB.log" --install --serviceName "MongoDB"

这一命令是设置mongodb的数据库和日志路径并将mongod.exe加入windows服务,此时你去windows服务看,肯定多了一个MongoDB服务

4、到此,mongodb安装成功,使用net start MongoDB或者点击服务启动mongdb服务。然后可以用mongoVUE登录(注:不需要填写用户名和密码,默认端口是27017)

5、在命令提示符下输入mongo也能进入mongodb的shell模式或者在安装目录下的bin路径下直接双击mongo.exe


创建用户

进入mongodb的shell模式,注意所有操作都在命令提示符窗口进入的mongo或者双击mongo.exe出现的命令行下进行。

输入use admin

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

回车就创建了一个角色是root用户名是admin(这个用户名可以随便取)密码是123456的且用户属于admin这个数据库的超级用户,超级用户一定是属于admin这个库的。

输入use students(创建一个students数据库)

输入 db.createUser({user:"test",pwd:"123456",roles:[{role:"readWrite",db:"students"}]})

创建了一个属于students数据库的用户名为test,密码为123456具有读写权限的普通用户


重新启动具有认证的mongodb服务

1、用管理员身份启动命令提示符,输入net stop MongoDB停止服务,然后输入sc delete MongoDB删除服务,再删除log文件夹下的所有日志及删除db下的mongod.lock文件

2、输入下面命令重新创建具有认证的mongodb服务

mongod --dbpath "D:\MongoDB\Server\3.0\data\db" --logpath   "D:\MongoDB\Server\3.0\data\log\MongoDB.log" --auth --install --serviceName "MongoDB"

就是多了一个--auth参数设置认证

3、输入net start MongoDB或者直接找到服务启动,则启动了服务。

4、输入 mongo 127.0.0.1:/admin -u admin -p 123456就能进入进行各种操作,否则总是会有各种没有权限的报错。


重点在于客户端的登录

有了认证之后,你用mongo vue登录?不好意思,各种错误,就算你等进去了也进行不了任何操作。这不是你的错,因为mongovue对mongo3.0认证之类的支持度不好。

于是乎你可能用到Robomongo-0.8.5-i386之类的登录,不好意思,你仍然登录不了。

最后无奈之下,我找到了NoSQL Manager for MongoDB相当有用啊!!!

不过用NoSQL Manager for MongoDB需要注意,如果用admin超级用户登录,填入用户名和密码及选择认证数据库admin,发现全部数据库都显示了,没什么问题,选择任何数据库各种操作什么的都可以。但若是普通用户test只能对students操作,你会发现貌似登录进去了也没用,那是因为你填写用户名、密码、及选择了认证数据库students,还少填写了一个地方,在Edit MongoDB Connection的左边:Databases(数据库)->Allowed DataBases->填入students。然后发现连入students数据库,一切操作都正常!!!


最后再说一些mongo shell下的问题,如果你要切换用户输入db.auth("test","123456"),显示1则认证成功,也就是切换成功。但是因为test普通用户是students数据的,所以要先输入use students切换到该数据库下再认证切换用户。同理,对于像admin这一类属于admin数据库的超级用户,你也必须用use admin切换到admin下再认证,否则你会发现怎么我有这个用户的,怎么会认证不成功呢!!总之一句话,输入什么数据库的用户,先切入到该数据库再认证切换用户、


最后再说一句,monogdb可视化工具还是NoSQL Manager for MongoDB兼容性好!!!!其他工具,mongodb更高的版本不一定支持啊啊!!!



0 0