Nodejs Auth模式下链接Mongodb

前言

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

1.不能远程访问node

2.没有验证状况,任何人都能登陆linux

解决以上问题:请参考git

mongodb 实现远程链接github

MongoDB 用户角色受权与AUTH启用mongodb

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

固然,咱们主要解决NodeJs链接问题:express

 

一.建立数据库管理员

(1)咱们首先就要创建一个超级管理员,而后再用超级管理员创建其余账号: npm

>use admin
>db.addUser( { user: "root", pwd: "admin", roles: [ "userAdminAnyDatabase" ] } ) 
#角色默认是admin,咱们能够经过 show roles命令查看全部可选角色

(2)为账号启用admin数据库认证,这样他就能够操做admin数据库了。api

>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('链接成功');
   }
});
相关文章
相关标签/搜索