1. 程式人生 > >win環境下MongoDB安裝與配置成auth驗證服務

win環境下MongoDB安裝與配置成auth驗證服務

今天重新安裝了MongoDB(Windows),並且想要把它配置成需要驗證使用者密碼的服務。
1.官網上獲取msi檔案並安裝
MongoDB社群版
這裡寫圖片描述

下載完成後直接執行msi檔案
注意要選擇custom
這裡寫圖片描述

這裡寫圖片描述

之後就一直next即可(記得不要勾選install compass【圖形化工具】,勾選的話安裝很慢)

本人是安裝到D:/MongoDB資料夾
這裡寫圖片描述

測試驗證:
win+R再輸入cmd
進入MongoDB目錄的bin資料夾
執行如下命令 mongod.exe –dbpath D:\MongoDB\data
注意圖片與我的命令有出入,但是大致意思是這樣(原因是這圖是我參考別人的,路徑有出入)
這裡寫圖片描述

如果執行成功之後回顯示如下資訊:
這裡寫圖片描述

27017是mongodb的預設埠 可通過瀏覽器輸入網址測試是否成功: 127.0.0.1:27017 安裝成功之後訪問會顯示該提示
這裡寫圖片描述

以上已經安裝成功MongoDB
參考文章:https://blog.csdn.net/pizi995/article/details/53171139

配置環境變數
原因:不配置環境變數的話每次要啟動MongoDB服務時候都要進入到MongoDB目錄的bin目錄中執行mongod.exe檔案

今天我們說一下如何配置MongoDB的環境變數及好處,因為每次我們啟動MongoDB服務的時候
都需要在黑視窗(dos視窗)中切換到MongoDB所在路徑,然後執行 net start mongodb(代表已經安裝了window服務) 命令來開
啟服務。所以每次手動開機開啟MongoDB服務的時候都特別的麻煩,為了解決這個問題。我們可以
將MongoDB配置到系統環境變數中。 下次在開機的時候可以直接開啟黑視窗或者以管理員身份打
開(dos視窗)輸入 net start mongodb(安裝服務會稍後講解) 命令,無需切換到MongoDB所在路徑進行啟動。

將你的 bin 目錄加入到環境變數中的path中,儲存退出。
驗證:在控制檯輸入mongod –help會有幫助文件

分兩步走
1.新建系統變數MONGODB_HOME
2.在系統變數加上%MONGODB_HOME%\bin
這裡寫圖片描述

這裡寫圖片描述

參考連結:https://blog.csdn.net/pizi995/article/details/53171851
到這裡你就可以在任何路徑下啟動MongoDB伺服器了。

接下來我們將mongodb放到windows的服務中

認識兩個命令

刪除windows服務
sc delete servicename(doc視窗下)

新建MongoDB的Windows服務
mongod.exe –logpath d:/MongoDB/log/mongodb.log –logappend –dbpath d:/MongoDB/data –directoryperdb –auth –serviceName MongoDB –install

引數解析
–install:安裝MongoDB服務
–logappend:以每天為單位自動切割日誌
–serviceName:安裝Windows服務時使用的服務名
–logpath:MongoDB日誌輸出檔名稱。雖說該引數直譯是“日誌路徑”,其實要指定的是一個具體的完整檔名。
–dbpath:指定MongoDB資料存放的路徑。這個就是最關鍵的引數了,不僅該目錄要存在,並且最好不要以“\”結尾。
–directoryperdb:這個引數很好理解,讓MongoDB按照資料庫的不同,針對每一個數據庫都建立一個目錄,所謂的“目錄每資料庫”。

–auth:開啟驗證的服務,即需要登入驗證

完成後開啟服務後 (win+R->services.msc) 發現 MongoDB 已經在我們的服務項中了
若安裝成功,在管理服務中會新增一個MongoDB服務並且能夠啟動成功。、
這裡寫圖片描述

若這個服務新建成功,對特定的資料庫需要特定的使用者才能操作
安裝完成並啟動服務後再任何路徑下輸入mongo皆可進入MongoDB shell
這裡寫圖片描述

安裝完Windows服務後,
需要新增管理使用者
需要建立一個使用者在admin資料庫中,它的許可權用來新增或者賦予別的使用者對別的資料庫的操作許可權
1.use admin(轉到admin庫)
2.新增資料庫管理員
db.createUser(
{
user: “mama”,
pwd: “123456”,
roles: [ { role: “userAdminAnyDatabase”, db: “admin” } ]
}
)
role的可選值與解析
具體角色:

read:允許使用者讀取指定資料庫
readWrite:允許使用者讀寫指定資料庫
dbAdmin:允許使用者在指定資料庫中執行管理函式,如索引建立、刪除,檢視統計或訪問system.profile
userAdmin:允許使用者向system.users集合寫入,可以找指定資料庫裡建立、刪除和管理使用者
clusterAdmin:只在admin資料庫中可用,賦予使用者所有分片和複製集相關函式的管理許可權。
readAnyDatabase:只在admin資料庫中可用,賦予使用者所有資料庫的讀許可權
readWriteAnyDatabase:只在admin資料庫中可用,賦予使用者所有資料庫的讀寫許可權
userAdminAnyDatabase:只在admin資料庫中可用,賦予使用者所有資料庫的userAdmin許可權
dbAdminAnyDatabase:只在admin資料庫中可用,賦予使用者所有資料庫的dbAdmin許可權。
root:只在admin資料庫中可用。超級賬號,超級許可權

3.驗證
db.auth(‘mama’,’123456’)

這裡寫圖片描述

注意我們建立的mama這個角色時針對admin庫的,他沒有許可權操作admin以外的資料庫。即資料庫是跟著使用者走的。而且他也只能擁有管理建立使用者的許可權,沒有檢視使用者的許可權即檢視admin庫中的collection的許可權,不過root許可權使用者有

這裡寫圖片描述

mama角色無法檢視admin下的collection
root無法連線到littleblog資料庫

以下為用mongoose連線MongoDB

//資料庫連線
var mongoose = require('mongoose');
var config={mongodb:'mongodb://leo:[email protected]:27017/littleblog'};
//leo為賬號 123456為密碼,littleblog為資料庫名稱
mongoose.connect(config.mongodb, { useNewUrlParser: true }, function(error) {
    //這個回撥怎麼都會執行,但是error可能是null
    // if error is truthy, the initial connection failed.
    if (error) {
        console.log('error');
    }
});
var db = mongoose.connection;
db.on("error", function(error) {
    console.log(error);
    throw error;
});

db.on("open", function(error) {
    if (error) {
        console.log(error);
        throw error;
    }
    console.log("db connect success.");
});

整個過程遇到的問題
1.啟動MongoBD時報錯:window不能再本地計算機啟動MongoDB,如下:
這裡寫圖片描述

解決:D:\MongoDB\data目錄下全部刪除
這裡寫圖片描述

2.另一種方式新建windows服務(不成功,倘若哪位大神知道解決方法,懇請告知小弟)
1.D:\MongoDB\bin下新建一個mongodb.conf檔案
內容如下:

#資料庫資料存放目錄
dbpath= D:\MongoDB\data
#資料庫日誌存放目錄
logpath=D:\MongoDB\log\mongodb.log 
#以追加的方式記錄日誌
logappend = true 
#埠號 預設為27017
port=27017
#以後臺方式執行程序
fork=true 
#開啟使用者認證
auth=true
#啟用日誌檔案,預設啟用
journal=true 
#這個選項可以過濾掉一些無用的日誌資訊,若需要除錯使用請設定為false
quiet=true

參考:https://www.jianshu.com/p/5844fdfa9511
2.新建服務的命令為


sc create MongoDB binPath="D:\MongoDB\bin\mongod.exe --service --config=D:\MongoDB\bin\mongodb.conf"

結果:能建立成功,但是services.msc中啟動不了服務
引數錯誤

其他參考文章(注以下文章只是參考幫助理解,並沒有按照其步驟完全執行)
https://www.imooc.com/article/28742?block_id=tuijian_wz
https://blog.csdn.net/woainimax/article/details/78208588
https://yq.aliyun.com/articles/70338