1. 程式人生 > >mongodb在linux下需要使用者名稱密碼連線

mongodb在linux下需要使用者名稱密碼連線

注:

注意啟動時logpath /mongodb/logs 這裡是指向一個檔案,而不是目錄,如果不是指向檔案也是啟動不了

而dbpath 指向的是一個目錄

注:最好是下載符合linux系統版本的mongodb版本,因為安裝glibc很可能導致一系列問題。

MongoDB 預設是沒有設定鑑權的,業界大部分使用 MongoDB 的專案也沒有設定訪問許可權。這就意味著只要知道 MongoDB 伺服器的埠,任何能訪問到這臺伺服器的人都可以查詢和操作 MongoDB 資料庫的內容。在一些專案當中,這種使用方式會被看成是一種安全漏洞

一、開啟認證的方式

可以通過設定使用者名稱、密碼來連線mongodb

執行mongodb時,新增--auth引數,即可開啟認證

./mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/logs --logappend  --port=27017 --fork --auth

--fork指定後臺執行

--auth開啟驗證

--dbpath指定資料庫目錄

--logpath指定日誌檔案

--logappend日誌累積新增

二、建立mongodb使用者

開啟認證後,連線mongodb時,就需要提供使用者名稱和密碼。

mongodb的使用者分兩種,一種是管理員,一種是普通使用者。

管理員管理普通使用者、普通使用者管理資料庫資料,所以我們要先建立管理員

(1)建立管理員必須要在admin資料庫下建立,首先關閉認證,即用一下命令執行mongodb

./mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/logs --logappend  --port=27017 --fork
(2)建立管理員

先連線mongodb

mongo 127.0.0.1:27017

db必須為admin

use admin
db.createUser({user:'admin',pwd:'123456',roles:[{role:'readWriteAnyDatabase',db:'admin'}]})


readAnyDatabase:在admin資料庫下建立,可以讀取所有資料庫的資訊

readWriteAnyDatabase:在admin資料庫下建立,可以讀寫所有資料庫的資訊

userAdminAnyDatabase:在admin資料庫下建立,可以管理所有資料庫的使用者

dbAdminAnyDatabase:在admin資料庫下建立,可以管理所有資料庫的資訊(類似於所有資料庫的dbAdmin賬戶)

這裡我們用readWriteAnyDatabase

(3)建立普通使用者

db為要操作的資料庫

use isdb
db.createUser({user:'dev',pwd:'123456',roles:[{role:'dbOwner',db:'isdb'}]}) 


三、開啟認證執行

嘗試用客戶端工具連線mongodb

注:jar依賴版本較新的情況下,是不需要修改mongodb的認證版本的,直接用currentVersion = 5的版本即可,因為本人後來引用版本較高的mongodb依賴後,不需要修改mongodb的認證版本,java也能夠正常連線到mongodb

開啟認證執行mongodb時,發現報錯

 MONGODB-CR credentials missing in the user document

(1)修改mongodb的authSchema版本為3

網上查詢資料後發現,是因為admin資料庫裡面system.version文件裡面的authSchema版本為5,應該修改成3就可以。

原因:客戶端的認證版本較低,mongodb3.x的認證版本是5,需要把mongodb3.x的認證版本改成3即可

先關閉認證,把authSchema的版本修改為3

var schema = db.system.version.findOne({"_id" : "authSchema"}) 
schema.currentVersion = 3 
db.system.version.save(schema)

注:jar依賴版本較新的情況下,是不需要修改mongodb的認證版本的,直接用currentVersion = 5的版本即可,因為本人後來引用版本較高的mongodb依賴後,不需要修改mongodb的認證版本,java也能夠正常連線到mongodb

(2)重新建立管理員使用者和普通使用者

如果你現在開啟認證,仍然會提示AuthenticationFailed MONGODB-CR credentials missing in the user document   原因是原來建立的使用者已經使用了SCRAM-SHA-1認證方式

故先刪除管理員和普通使用者,再重新建立。操作之前,mongodb必須以無需認證的方式執行

use admin
db.dropUser("admin")
db.createUser({user:'admin',pwd:'123456',roles:[{role:'readWriteAnyDatabase',db:'admin'}]})
use isdb
db.dropUser("dev")
db.createUser({user:'dev',pwd:'123456',roles:[{role:'dbOwner',db:'isdb'}]})

(3)開啟認證執行mongodb

如果要操作is資料庫,則需要用普通使用者登入,雖然管理員使用者admin角色是可以操作其他資料庫。但是java程式中用admin使用者沒辦法正常操作is資料庫,

只能用普通使用者dev去操作資料庫

四、開機啟動

編譯檔案

vim /etc/rc.local

新增以下指令

/usr/local/mongodb/mongodb-linux-x86_64-rhel70-3.4.7/bin/mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/logs --logappend --port=27017 --fork --auth