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('鏈接成功');
   }
});
相關文章
相關標籤/搜索