Mongodb3.X版本的 的用戶認證


一直使用公司的mongodb環境,本地的mongodb沒有開啟認證,為了環境更一致,決定加上本地mongodb的認證,不過在這個過程中發生了點波折。

我使用的是window版本的3.2,公司使用的是2.6的版本,在認證上是有區別的,mongodb從3.0版本開始加入了SCRAM-HAS-1方式,但是PHP里不支持,支持的2.X版本里的MONGODB-CR模式,這個就需要修改下配置了。有人說在配置文檔里加 setParameter

setParameter:  
    authenticationMechanisms: MONGODB-CR

需要注意一點,配置文件的縮進是用空格的,制表符會報錯的。

但是沒有起作用,可能針對3.2之前的版本可以吧,也或者某些細節沒注意到,然后繼續靠網絡和文檔,發現了另一種方法,需要下面6步驟:

為了兼容 3.0之前的版本,需要進行下面幾步
1、在不開啟auth的模式進入mongo
use admin;
db.createUser({user:'shang',pwd:'shang',roles:[{role:'root',db:'admin'}]});//因為不執行這一步,db.system.version里不會有數據
2、修改 authcurrentVersion
var schema = db.system.version.findOne({'_id':'authSchema'});
schema.currentVersion=3;
db.system.version.save(schema);
3、需要drop掉之前使用 SCRAM-HAS-1 認證的用戶 shang
db.dropUser('shang');
4、以不開啟auth的模式重啟后創建新的用戶
db.shutdownServer();
mongo.exe
use admin;
db.createUser({user:'shang',pwd:'shang',roles:[{role:'root',db:'admin'}]});//現在創建的是使用 MONGODB-CR認證的用戶
5、以開啟 auth的模式重啟
use admin;
db.auth('shang', 'shang');
6、現在還可以創建其他用戶
use robo;
db.createUser({user:'robo',pwd:'robo',roles:[{role:'readWrite',db:'robo'}]});//經測試,使用Robomongo連接,選擇兩種認證都可以聯通

后來發現起始修改的是 參數 authSchemaVersion 不知道直接在配置文件里加入下面的代碼可行嗎?可以找時間試試,經證實不可以,會提示 “BadValue: Cannot use --setParameter to set "authSchemaVersion" at startup”。

setParameter:
    authSchemaVersion: 3

 下面還有關於配置文件和使用配置文件安裝到window服務和啟動的命令

配置文件 mongo.cfg
systemLog:
    destination: file
    path: D:/mongodb/data/log/mongod.log
storage:
    dbPath: D:/mongodb/data/db
net:
    bindIp: 127.0.0.1
    port: 27017
security:  
    authorization: enabled
setParameter:  
    authenticationMechanisms: MONGODB-CR
    enableLocalhostAuthBypass: false
    logLevel: 4

使用配置文件啟動和安裝到window服務
mongod.exe --config D:/mongodb/mongod.cfg --install
net start MongoDB
net stop MongoDB

 最后說下關於認證里面的角色

基本的角色 
userAdminAnyDatabase 這個角色擁有分配角色和用戶的權限,但沒有查寫的缺陷
root  這是超級管理員
readWrite  有讀寫權限
read    有讀權限

關閉服務
db.shutdownServer();

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM