Nodejs Auth模式下连接Mongodb

原创
2016/08/27 09:00
阅读数 2.2K

前言

最近公司的项目涉及到使用Nodejs+Express的一些业务,其中涉及到使用mongodb的连接问题。默认情况下linux上安装的mongodb有以下缺点:

1.不能远程访问

2.没有验证情况,任何人都能登录

解决以上问题:请参考

mongodb 实现远程连接

MongoDB 用户角色授权与AUTH启用

Mongodb安全认证 - 给指定的数据库添加用户》

当然,我们主要解决NodeJs连接问题:

 

一.创建数据库管理员

(1)我们首先就要建立一个超级管理员,然后再用超级管理员建立其他帐号: 

>use admin
>db.addUser( { user: "root", pwd: "admin", roles: [ "userAdminAnyDatabase" ] } ) 
#角色默认是admin,我们可以通过 show roles命令查看所有可选角色

(2)为帐号启用admin数据库认证,这样他就可以操作admin数据库了。

>db.auth("admin", "admin")  #认证帐号 
>db.system.users.find(); #查看当前已有的用户信息 

(3)使用用刚才的超级帐号登录数据库(admin)

mongo --host 102.10.123.12 --port 27017  -u 'root'  -p 'admin' admin

现在,我们就可以为其他数据库添加用户了:

比如express数据库

>use express
>db.addUser("express"," express123")

授予这个用户的权限:(必须要,否则无法进行读写操作)

db.auth("express"," express123")

然后退出,直接连接express库的方式是

mongo --host 102.10.123.12 --port 27017  -u 'express'  -p 'express123' express

二.使用Nodejs+Express连接

默认情况下,express需要安装 mongo组建

>sudo npm install mongodb

然后我们连接我们指定的数据库express

普通方式连接mongodb

参考《mongodb - Db -官方文档》

 var  mongodb = require('mongodb');
  var  server  = new mongodb.Server('localhost', 27017, {auto_reconnect:true});
  var  db = new mongodb.Db('express', server, {safe:true});
  db.open(function(err,result){  //注意,必须打开数据库,然后登录验证

  db.authenticate('express','express123',function(err,result){
     if(!result)
     {
        console.log(result);
     }else{
        console.log('成功连接到数据库');
     }
  });

  });

当然,以上是旧版的mongodb连接驱动,如果是新版(2.0+)的连接驱动,那么我们可以使用MongoClient进行连接

使用MongoClient连接mongodb

参考

MongoClient connect - 官方文档》

Connection String URI Format - 官方文档》

var MongoClient = require('mongodb').MongoClient,
MongoClient.connect('mongodb://localhost:27017/test', function(err, db) {

   if(!err){ //如果连接未出错
     console.log('连接成功');
   }
});

当然,以上在非auth模式下的,在auth模式下,需要将连接url进行如下调整

mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]

我们这里连接方式如下

var MongoClient = require('mongodb').MongoClient,
MongoClient.connect('mongodb://express:express123@102.10.123.12:27017/express', function(err, db) {

   if(!err){ //如果连接未出错
     console.log('连接成功');
   }
});

 

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
1 收藏
0
分享
返回顶部
顶部