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