`

MongoDB加认证后,nodejs连接不上问题

阅读更多

1. 加认证前,nodejs连mongoDB只需要

 

var mongojs = require('mongojs/index');
var db = mongojs("databaseName",[collection1,collection2,...]);

 

 

2. 要上线的项目使用mongoDB,出于安全考虑,都需要加认证,即创建操作数据库所使用的用户名密码。

    加认证的方法如下:

 

添加用户的时候必须满足以下两个条件:  
  
1.有相关权限的情况下(后面会说)。  
  
2.mongod没有加--auth的情况下(如果加了,你添加权限的话 会出现下面的情况)。  
  
  
> use admin         
switched to db admin      
   
> db.addUser('sa','sa')        
Fri Jul 22 14:31:13 uncaught exception: error {        
"$err" : "unauthorized db:admin lock type:-1 client:127.0.0.1",        
"code" : 10057         
}      
   
>      
所以我们添加用户时必须先在没有加--auth的时候添加个super  admin。  
  
服务起来后,进入./mongo。  
  
  
[root@:/usr/local/mongodb/bin]#./mongo      
MongoDB shell version: 1.8.2      
connecting to: test      
   
> use admin        
switched to db admin      
   
> db.adduser('sa','sa')        
Fri Jul 22 14:34:24 TypeError: db.adduser is not a function (shell):1      
   
> db.addUser('sa','sa')         
{      
"_id" : ObjectId("4e2914a585178da4e03a16c3"),      
"user" : "sa",      
"readOnly" : false,      
"pwd" : "75692b1d11c072c6c79332e248c4f699"      
}      
   
>      
这样就说明 已经成功建立了,然后我们试一下权限。  
  
> show collections        
system.indexes      
system.users     


在没有加--auth的情况下 可以正常访问admin喜爱默认的两个表。  
  
> db.system.users.find()        
{ "_id" : ObjectId("4e2914a585178da4e03a16c3"), "user" : "sa", "readOnly" : false, "pwd" : "75692b1d11c072c6c79332e248c4f699" }>      
已经成功建立。  
  
下面把服务加上--auth的选项,再进入./mongo。  
   
MongoDB shell version: 1.8.2        
connecting to: test      
   
> use admin         
switched to db admin      
   
> show collections         
Fri Jul 22 14:38:49 uncaught exception: error: {      
"$err" : "unauthorized db:admin lock type:-1 client:127.0.0.1",      
"code" : 10057      
}      
   
>      
可以看出已经没有访问权限了。  
  
我们就用自己的密钥登录下:  
  
  
> db.auth('sa','sa')        
1     
返回1说明验证成功!   
再show collections下就成功了。  
  
.....  
  
我们登录其它表试试:  
  
[root@:/usr/local/mongodb/bin]#./mongo      
MongoDB shell version: 1.8.2      
connecting to: test      
   
> use test         
switched to db test      
   
> show collections         
Fri Jul 22 14:40:47 uncaught exception: error: {       
"$err" : "unauthorized db:test lock type:-1 client:127.0.0.1",        
"code" : 10057        
}     
也需要验证,试试super admin登录:   
  
[root@:/usr/local/mongodb/bin]#./mongo      
MongoDB shell version: 1.8.2      
connecting to: test      
   
> use test         
switched to db test      
   
> show collections         
Fri Jul 22 14:40:47 uncaught exception: error: {        
"$err" : "unauthorized db:test lock type:-1 client:127.0.0.1",        
"code" : 10057        
}      
   
> db.auth('sa','sa')         
0     
返回0验证失败。   
  
好吧,不绕圈子,其实super admin必须从admin那么登录 然后 再use其它表才可以。       
   
> use admin     
switched to db admin      
   
> db.auth('sa','sa')        
1      
   
> use test      
switched to db test      
   
> show collections      
   
>      
如果想单独访问一个表,用独立的用户名,就需要在那个表里面建相应的user。  
  
[root@:/usr/local/mongodb/bin]#./mongo       
MongoDB shell version: 1.8.2        
connecting to: test      
   
> use admin       
switched to db admin      
   
> db.auth('sa','sa')        
1      
   
> use test        
switched to db test      
   
> db.addUser('test','test')        
{        
"user" : "test",       
"readOnly" : false,        
"pwd" : "a6de521abefc2fed4f5876855a3484f5"      
}      
   
>      
当然必须有相关权限才可以建立。  
 
再登录看看:  
  
[root@:/usr/local/mongodb/bin]#./mongo         
MongoDB shell version: 1.8.2         
connecting to: test      
   
> show collections        
Fri Jul 22 14:45:08 uncaught exception: error: {         
"$err" : "unauthorized db:test lock type:-1 client:127.0.0.1",         
"code" : 10057        
}      
   
> db.auth('test','test')         
1      
   
> show collections      
system.indexes      
system.users      
   
>      

 

 

3. nodejs 连接加认证后的mongoDB:

 

var mongojs = require('mongojs/index');
var db = mongojs('dbUserName:dbPassword@dbHost:dbPort/dbName',[collection1,collection2,...]);

 

 

注意:

        1.必须给所用到的数据库加用户名密码,只给admin设账号密码不够,nodejs连的时候会报错!

        2.MongoDB,第一次加完认证,需要重新安装启动服务,认证模式和非认证模式切换的时候,有可能会安装失败,有时会是原服务还在服务列表中,并且手动删除时,会报该服务“已标记为删除”的错误,这时候,只需要把服务窗口关闭,并安装Mongo服务。

 

 

参考:

        《MongoClient connect - 官方文档》

      《Connection String URI Format - 官方文档》

      《MongoDB权限管理之用户名和密码的操作

---------------- 侵删!---------------

 

分享到:
评论

相关推荐

    使用nodejs的koa框架连接MongoDB数据库.zip

    本教程将详细讲解如何使用Koa框架来连接和操作MongoDB数据库。 ### 1. 安装必要的库 首先,我们需要安装`koa`和`mongoose`。`mongoose`是Node.js中用于操作MongoDB的库,它提供了一套强大的API,简化了数据库操作...

    NodeJs+MongoDB实例

    MongoDB需要在本地或远程服务器上运行,并通过Mongo shell或连接工具(如Robo 3T)进行管理。 1. **安装依赖** 使用Node.js的npm,安装Express、Mongoose(一个用于Node.js的MongoDB对象模型工具)和其他必要的库...

    nodejs-mongodb-:使用Nodejs和mongodb数据库编写的登录注册小demo

    然后,我们需要连接到MongoDB数据库。这里假设你已经在MongoDB Atlas或本地安装了MongoDB,并已创建了一个数据库,如`mydatabase`: ```javascript mongoose.connect('mongodb://localhost/mydatabase', { ...

    nodejs+mongodb搭建简单博客

    3. **创建数据库连接**:使用Mongoose建立到MongoDB的连接,定义博客数据模型,如文章模型(ArticleSchema)和用户模型(UserSchema)。 4. **设置路由**:使用Express定义路由来处理HTTP请求,例如创建、读取、...

    Web Development with MongoDB and NodeJS, 2nd Edition

    Node.js之所以流行,很大程度上是因为它具有非阻塞I/O和事件驱动的特性,这让它能够处理大量并发连接,非常适合需要高性能和实时通信的Web应用程序。 MongoDB是一种面向文档的NoSQL数据库管理系统,它提供了一种...

    NodeJS+MongoDB+AngularJS WEB开发原版

    《NodeJS+MongoDB+AngularJS WEB开发原版》是一本深入探讨现代Web开发技术的书籍,特别关注了使用Node.js、MongoDB和AngularJS构建全栈应用的实践方法。Node.js是基于Chrome V8引擎的JavaScript运行环境,它允许...

    NodeJS MongoDB打造多人在线聊天室.zip

    在本项目"NodeJS MongoDB打造多人在线聊天室"中,我们将深入探讨如何使用Node.js和MongoDB构建一个实时、多用户交互的聊天平台。Node.js以其异步非阻塞I/O模型和高效的性能,成为构建实时应用的理想选择,而MongoDB...

    nodejs实现连接mongodb数据库的方法示例

    Node.js连接MongoDB数据库是许多基于Node.js开发的应用程序中常见的需求,下面详细讲解使用Node.js实现连接MongoDB数据库的方法和技巧。 首先,Node.js通过MongoDB官方提供的MongoDB Driver(一个npm包)来实现与...

    基于Vue+Nodejs+MongoDB小区社区综合治理管理系统源码案例设计.zip

    该压缩包文件“基于Vue+Nodejs+MongoDB小区社区综合治理管理系统源码案例设计.zip”包含了一套完整的小区社区综合治理管理系统的源代码实现,利用了前端的Vue.js框架、后端的Node.js以及数据库管理系统MongoDB。...

    采用NodeJs+Express+MongoDB构建的个人博客系统

    【标题】:“采用NodeJs+Express+MongoDB构建的个人博客系统” 【描述】:这个项目是基于Node.js、Express框架以及MongoDB数据库构建的个人博客系统,它展现了如何使用这些技术栈来创建一个功能完备的Web应用。Node...

    mongodblog:用nodejs expressjs jade mongodbpassport-local 编码的小博客

    **标题解析:** "mongodblog" 是一个基于 Node.js、...综上所述,mongodblog 是一个集成了多种关键 Web 开发技术的项目,适合学习 Node.js 后端开发、MongoDB 数据库操作、以及使用模板引擎和认证策略来构建动态网站。

    nodejs+mongodb+express的电影网站

    总的来说,"Node.js + MongoDB + Express 的电影网站"是一个典型的Web开发项目,涵盖了前后端交互、数据库操作、用户认证、数据安全等多个核心知识点,对于提升Web开发技能和理解现代Web应用架构有极大的帮助。

    监控系统nodejs+express+mongodb后台部分.zip

    监控系统是现代IT环境中不可或缺的一部分,它用于实时追踪和分析系统的运行状态,以便及时发现并解决问题。本项目是一个基于Node.js、Express框架和MongoDB数据库的后台系统,专为毕业设计而构建,旨在帮助学生掌握...

    Nodejs + mongoDB实战开发微博系统源码.zip

    《Node.js + MongoDB实战开发微博系统》 在现代Web开发中,Node.js以其异步非阻塞I/O和高效的性能,已经成为构建实时应用的理想选择。MongoDB作为一个强大的NoSQL数据库,以其灵活的数据模型和高性能,常被用于处理...

    博客系统(服务端渲染,nodejs + express + mongoDB ).zip

    这个压缩包"博客系统(服务端渲染,nodejs + express + mongoDB ).zip"包含了一个基于Node.js的博客平台,采用Express框架进行后端开发,并利用MongoDB作为数据库存储数据。下面将详细介绍这个系统的技术栈和相关知识...

    基于Vue+Nodejs+MongoDB校园二手信息发布平台设计源码案例设计.zip

    该压缩包文件“基于Vue+Nodejs+MongoDB校园二手信息发布平台设计源码案例设计.zip”包含了一个完整的校园二手信息发布平台的设计源码。这个平台利用了前端技术Vue.js、后端技术Node.js以及数据库管理系统MongoDB,是...

    基于Vue+NodeJs+MongoDB精品课程在线学习网站设计源码案例设计.zip

    通过研究这个源码案例,你可以学习到如何将Vue.js、Node.js和MongoDB结合使用,实现一个完整的Web应用程序,同时掌握前后端通信、数据库设计和用户认证等关键技能。对于想要提升全栈开发能力的开发者来说,这是一个...

    nodejs+mongodb+express+ejs+connect-mongo

    这样,当用户登录后,其session数据会被存储在MongoDB中,后续请求可以通过session恢复用户状态。注意处理session过期和安全性问题。 在实际项目中,你可能还需要考虑以下方面: - 错误处理:使用中间件捕获和处理...

    deploy-express-with-mongoose-on-heroku:在Heroku上使用MongoDB附加组件部署NodeJS应用程序

    完成上述步骤后,你的Node.js应用已经成功部署到Heroku,并使用MongoDB作为数据库。你可以在Heroku的应用页面查看状态,并测试是否可以正常运行。 这个过程展示了如何使用Express和Mongoose构建一个简单的web应用,...

    mongo nodejs版管理工具

    你可以输入服务器地址、端口、认证信息等,以便连接到你的MongoDB实例。 2. **集合管理**:在每个数据库下,你可以看到所有的集合,并进行CRUD(创建、读取、更新、删除)操作。这对于快速原型开发和调试非常有用。...

Global site tag (gtag.js) - Google Analytics