为mongodb设置mongo 用户名密码登录后用robomongo登录提示Authorization failed!

&&&&&&&&&&&
在刚安装完mongodb后是没有管理员的,如果要为mongodb设置管理员在启动时需要以用户授权的方式启动:
/usr/local/webserver/mongodb/bin/mongod --dbpath=/usr/local/webserver/mongodb/data --logpath=/usr/local/webserver/mongodb/logs --auth &
启动后登陆mongodb
/usr/local/webserver/mongodb/bin/mongo
选择admin数据库
添加超级管理员
db.addUser('root','root');
退出后以超级管理员身份登陆
/usr/local/webserver/mongodb/bin/mongo -uroot -proot 192.168.1.106:27017/admin
接下来给数据库添加管理用户 以test数据库为例
db.addUser('test','1234');
这样就可以通过/usr/local/webserver/mongodb/bin/mongo -utest -p.1.106:27017/test
来登陆数据库了,这样test用户只能访问test数据库
使用PHP代码测试一下:
$m&=&new&Mongo("mongodb://test:.1.106:27017/test");
$db&=&$m-&test;&//选择数据库
$c&=&$db-&tb1;&//映射数据库中的集合
//根据_id来查询一条数据
$data&=&$c-&findOne(array('_id'=&new&MongoId("50a8d6e5b21b7fabbf2bd97a")));
print_r($data);
接下来税一下安装RockMongo对mongodb进行管理,首先到http://rockmongo.com/downloads下载
RockMongo,截止目前最新版本是RockMongo
v1.1.5,该版本需要PHP扩展版本&=1.3.0。安装过程没什么可说的,解压缩然后将文件放置到web服务器跟目录或子目录下,修改配置文
件config.php中的如下代码:
$MONGO["servers"][$i]["mongo_name"] = "服务器名称";//写一个好记的名字就可以了
$MONGO["servers"][$i]["mongo_host"] = "服务器IP";//千万不要弄错了
$MONGO["servers"][$i]["mongo_auth"] = //设置为true
修改后通过浏览器访问输入mongodb的用户名和密码即可进行管理了。
阅读(...) 评论()温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
查看日志,发现有一句:Failed to authenticate admin@admin with mechanism MONGODB-CR: AuthenticationFailed MONGODB-CR credentials missing in the user document&试了各种办法,百度查遍无一个可以解决,没办法只能问谷歌了,最终在一个国外网站发现原来还是mongodb数据库的版本问题,查询版本&解决思路:在非权限验证状态下 &首先,删除已有用户并;其次,修改version表的currentVersion,功能后在重新创建用户操作步骤: 1、删除用户:db.dropUser("admin"); 2、修改version:db.system.version.update({ "_id" : "authSchema"},{$set: {"currentVersion" : 3} }) &; 3、重新创建用户:db.createUser({user:"admin",pwd:"admin",roles:[{"role":"userAdminAnyDatabase","db":"admin"},{"role":"readWrite","db":"test"}]})&& 4、重启mongdb服务,再次测试,
& & & &&搞定收工了。
阅读(10373)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_',
blogTitle:'使用Robomongo 连接MongoDB 3.x 报 Authorization failed 解决办法',
blogAbstract:'最近安装了mongodb3.1.4,并启用了权限验证,在dos窗口下操作没有任何问题,为了维护方便就下载了一个客户端工具Robomongo 0.8.5,用户名、密码的等配置好点击测试,结果连接服务没有问题,权限验证没有通过,如图查看日志,发现有一句:Failed to authenticate admin@admin with mechanism MONGODB-CR: AuthenticationFailed MONGODB-CR credentials missing in the user document&试了各种办法,百度查遍无一个可以解决,没办法只能问谷歌了,最终在一个国外网站发现原来还是mongodb数据库的版本问题,查询版本',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:5,
permalink:'blog/static/',
commentCount:1,
mainCommentCount:1,
recommendCount:2,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}MongoDB 用户名密码登录 - 简书
MongoDB 用户名密码登录
Mongodb enable authentication
MongoDB 默认直接连接,无须身份验证,如果当前机器可以公网访问,且不注意Mongodb 端口(默认 27017)的开放状态,那么Mongodb就会产生安全风险,被利用此配置漏洞,入侵数据库。
容易遭受入侵的环境
使用默认 mongod 命令启动 Mongodb
机器可以被公网访问
在公网上开放了 Mongodb 端口
数据库隐私泄露
数据库被清空
数据库运行缓慢
1. 禁止公网访问 Mongodb 端口
1.1 网络配置
由于网络配置因人而异,需要根据自己实际环境进行配置,不作冗述。大致可以从以下方面禁止。
在路由器中关闭端口转发
防火墙 iptables 禁止访问
1.2 验证端口能否访问方式
在外网机器命令行中运行
telnet your.machine.open.ip 27017
2. 启用验证
2.1 创建用户管理员账户
当前数据库版本:Mongodb 3.4
使用 mongod 启动数据库
mongod --port 27017 --dbpath /data/db1
参数默认可以不加,若有自定义参数,才要加上,下同。
另起一个终端,运行下列命令
mongo --port 27017
db.createUser(
user: "adminUser",
pwd: "adminPass",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
管理员创建成功,现在拥有了用户管理员
用户名:adminUser
密码:adminPass
然后,断开 mongodb 连接, 关闭数据库
两个终端下 &C - c&
2.2 Mongodb 用户验证登陆
启动带访问控制的 Mongodb
mongod --auth --port 27017 --dbpath /data/db1
现在有两种方式进行用户身份的验证
第一种 (类似 MySql)
客户端连接时,指定用户名,密码,db名称
mongo --port 27017 -u "adminUser" -p "adminPass" --authenticationDatabase "admin"
客户端连接后,再进行验证
mongo --port 27017
db.auth("adminUser", "adminPass")
// 输出 1 表示验证成功
2.3 创建普通用户
过程类似创建管理员账户,只是 role 有所不同
db.createUser(
user: "simpleUser",
pwd: "simplePass",
roles: [ { role: "readWrite", db: "foo" },
{ role: "read", db: "bar" } ]
现在我们有了一个普通用户
用户名:simpleUser
密码:simplePass
权限:读写数据库 foo, 只读数据库 bar。
use foo表示用户在 foo 库中创建,就一定要 foo 库验证身份,即用户的信息跟随随数据库。比如上述 simpleUser 虽然有 bar 库的读取权限,但是一定要先在 foo 库进行身份验证,直接访问会提示验证失败。
db.auth("simpleUser", "simplePass")
show collections
还有一点需要注意,如果 admin 库没有任何用户的话,即使在其他数据库中创建了用户,启用身份验证,默认的连接方式依然会有超级权限
2.4 内建角色
Read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限
2.5 URI 形式的访问
生产中常用 URI 形式对数据库进行连接
mongodb://your.db.ip.address:27017/foo
添加用户名密码验证
mongodb://simpleUser:simplePass@your.db.ip.address:27017/foo
在使用数据库的过程中,一定要注意安全风险,由于 Mongodb 的默认配置,使得数据库有入侵风险,应该予以防范。
Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线)。分布式系统的协调导致了样板模式, 使用Spring Cloud开发人员可以快速地支持实现这些模式的服务和应用程序。他们将在任何分布式...
这里是阅读了《MongoDB权威指南》后做的相关笔记。 一、文档 文档是MongoDB的核心概念。文档就是键值对的一个有序集合。在JS中,文档被表示为对象: 文档的键是字符串。除了少数例外情况,键可以使用任意UTF-8字符。 键不能含有\0(空字符)。这个字符用于表示键的结...
http://www.cnblogs.com/zhoujinyi/p/4610050.html 创建用户,用户是跟着库走,哪个库下创建那个库下验证。 use testdb.createUser({user: &liyuhuan&,pwd: &jkinfo&,roles: [...
最后更新时间: 11:10:49 原始文章链接:http://www.lovebxm.com//mongodb_primer/ MongoDB - 简介 官网:https://www.mongodb.com/ MongoDB 是一个基...
背景: 阅读新闻 12C CDB模式下RMAN备份与恢复 [日期:] 来源:Linux社区 作者:wenzhongyan [字体:大 中 小] 12C 的RMAN和Oracle Enterprise Manager Cloud Control工具支持多租...
一直在寻找一种舞蹈的语汇,它非某种舞种的既定表现,也非舞者必备娴熟的舞蹈技巧。它的表现从独立的个体,心灵的体验开始.,它是自由的,强烈的,深刻的,它只属于某个人,但观者会发生共鸣与感动。 想真正自由地舞蹈,丢掉枷锁和无趣的经验。我惊喜地觅见了它。它让你身体的所有细胞都在舞蹈...
……想和你在一起 ……就像胖橘和二黑 ……你懂我的伤悲我懂你的欢愉
“空持百千偈,不如吃茶去。”拥有千百条高僧的偈语又如何?参尽枯禅皆不是,还不如放下一切,喝壶茶去。 对于有些人来说,这句话是人生几经沉浮之后的大悟大彻。而对于我这种还没见过世面的人来说,“不如吃茶去”却是逃避现实的一个很好的借口。拥有千百条高僧的偈语又怎样?人家都说还不如去...
前几日与挚友交流《七月与安生》观后感,她说,好羡慕七月,放下羁绊,独自远。或许,我们都应该尝试着拥有一场远行,是时候,和安生交换人生了吧!可是,我们都缺乏勇气,最主要的是我们缺乏金钱。而且, 我们终究是俗人,逃不过命运的牵绊。我们没有办法潇洒,因为,我们对家人与朋友还有爱,...
人山人海里你无迹可寻
我还以为错过了就是一世
缘何瞬间的转身
你站在距我不远的范围处
默默地笑着 看着本文参照:
本人也是按照此文章操作的,但是有些不妥,红色文字就是我实践后,需要改正的地方
一、关于权限的默认配置
&&&在默认情况下,mongod是监听在0.0.0.0之上的,任何客户端都可以直接连接27017,且没有认证。这样做的好处是,用户可以即时上手,不用担心被一堆配置弄的心烦意乱。然而坏处也是显而易见,如果直接在公网服务器上如此搭建MongoDB,那么所有人都可以直接访问并修改数据库数据了。
&&& 默认情况下,mongod也是没有管理员账户的。因此除非你在admin数据库中使用db.addUser()命令添加了管理员帐号,且使用&auth参数启动mongod,否则在数据库中任何人都可以无需认证执行所有命令。包括delete和shutdown。
&&& 此外,mongod还会默认监听28017端口,同样是绑定所有ip。这是。从中可以获取到数据库当前连接、log、状态、运行系统等信息。如果你开启了&rest参数,甚至可以直接通过web界面查询数据,执行mongod命令。
&&&&其实MongoDB本身有非常,显然开发者也是想到了,然而他是将安全的任务推给用户去解决,这本身的策略就是偏向易用性的,对于安全性,则得靠边站了。
&&& 二、MongoDB用户类型
&&&MongoDB的用户分为两种,一种是admin用户,另一种是特定数据库用户。admin用户拥有最高的权限,而特定数据库用户则只能访问特定的数据库。当MongoDB的admin库里没有任何用户的时候,也就是说整个MongoDB没有一个MongoDB用户的时候,即便&auth权限需求打开了,用户还是可以通过localhost界面进入MongoDB进行用户设置,否则的话整个MongoDB就完全没法访问了。而当这个用户创建完成之后,之后的用户登录和操作就需要授权了,不是直接登录就能使用的了。
MongoDB有一个比较奇怪的设置是,即便是一个admin用户,授权也必须在admin数据库下进行,而不能在其他数据库下进行。而授权之后admin用户就可以在任何数据库下进行任何操作了。当然数据库级别的用户在他自己的数据库下授权之后是不能到其他数据库进行操作的。举例来说:
&&& & use test&&& & db.auth(&someAdminUser&, password)
&&& 操作失败,提示还没有在admin数据库下对afmin用户进行授权。
&&&三、操作实例
&&&启动MongoDB,在cmd命令框里进入数据库的bin目录;
&&& 1. 输入命令:show dbs,你会发现它内置有两个数据库,一个名为admin,一个名为local;本文只对admin库进行描述
&&& 2. 输入命令:use admin,你会发现该DB下包含了一个名为system.user的collection,这是用户表,用来存放超级管理员的
备注:本文使用的数据库版本是2.0.1,没有默认的admin数据库,但是在执行第二步之后自动创建了一个admin库;&当然也没有默认的system.user表,运行后面的第三步后会自动创建 system.user和system.indexes&)
&&& 3. 输入命令:db.addUser('root','root'),这里我添加一个超级管理员用户,username为root,password也为root。先退出 (ctrl+c)程序,测试重启服务后再次连接MongoDB是否需要按提示输入用户名、密码进行操作。
&&& 4. 输入命令:use admin
&&& 5. 输入命令:show collections,查看该库下所有的表,你会发现,MongoDB并没有提示你输入用户名、密码,原因是,在文章最开始提到了,MongoDB默认设置为无权限访问限制,我们需要先把它设置成为需要权限访问
&&& 6.从新打开cmd,在mongodb路径的bin目录下,执行mongod --dbpath& d:\work\data\mongodb\db &--auth
&&& 7. 输入命令:use admin
&&& 8. 输入命令:show collections,提示:"$err" : "unauthorized db:admin lock type:-1 client:127.0.0.1"
&&& 显然,已经提示没有权限;用刚才设置的用户名、密码来访问集合
&&& 9. 输入命令:db.auth(&root&,&root&),输出一个结果值为1,说明这个用户匹配上了,如果用户名、密码不对,输出为0
&&& 10. 输入命令:show collections,将成功显示结果
继续操作,可以访问已经存在的数据库,但对于新建的数据库仍然没有权限;继续操作,先退出(ctrl+c)服务
&&& 11. 输入命令:mongo TestDB
&&& 12. 输入命令:show collections,提示:没有权限
&&& 13. 输入命令:db.auth(&root&, &root&),输出结果为0,说明用户名或者密码有问题,刚刚前面才创建,怎么会不对呢?原因在于:当我们单独访问MongoDB的数据库时,需要权限访问的情况下,用户名密码并非超级管理员,而是该库的system.user表中的用户,注意,我这里说的是单独访问的情况,什么是不单独访问的情况呢?后面再讲。针对上述情况,接下来操作:
&&& 14. 输入命令:db.addUser('test','111111'),仍然提示没有权限,新的数据库使用超级管理员也无法访问,创建用户也没有权限,不过即然设定了超级管理员用户,那它就一定有权限访问所有的库
&&& 15. 输入命令:use admin
&&& 16. 输入命令:db.auth(&root&, &root&)
&&& 17. 输入命令:use TestDB
&&& 18. 输入命令:show collections,之后可以利用超级管理员用户访问其它库了,这个就是不单独访问的情况。在上述操作过程中,我们是先进入admin库,再转到其它库来的,admin相当于是一个最高级别用户所在的区域,对数据库操作,需要经过最高级别用户,之后可以创建每个数据库的用户。
&&& 19. 输入命令:db.addUser('test','12345'),我们给TestDB库添加一个用户,以后每次访问该库,我都使用刚刚创建的这个用户,我们先退出(ctrl+c)
&&& 20. 输入命令:mongo TestDB
&&& 21. 输入命令:show collections,提示没有权限
&&& 22. 输入命令:db.auth('test','12345'),输出结果1,用户存在,验证成功
&&& 23. 输入命令:show collections,成功显示结果
四、启动和关闭MongoDB的各种参数
详见:http://blog.csdn.net/pgwindwind/article/details/8005262
比如要改变MongoDB的默认端口,则可以这样使用--port参数:
打开cmd,在mongodb路径的bin目录下,执行mongod --port 50107 --dbpath& d:\work\data\mongodb\db &--auth
这样访问MongoDB就是以50107的端口访问了
阅读(...) 评论()他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)

我要回帖

更多关于 mongo mongodb 区别 的文章

 

随机推荐