mongodb經常被刪,原因是沒有設置賬戶密碼,相應的端口也沒有限。只要知道連接地址誰都可以刪庫。這要歸功於mongodb的默認機制沒有密碼,對新手接盤俠不太友好。
以mongo3.4.24為例,首先在mongo.conf中開啟認證。還沒創建用戶密碼的可以創建用戶了再開啟。
security:
authorization: enabled
登錄,創建用戶並授權,登錄用admin庫的用戶
普通登錄:bin/mongo 127.0.0.1:27017 認證登錄: bin/mongo 127.0.0.1:27017 -u user -p password --authenticationDatabase admin
查詢和刪除用戶命令
use admin
db.system.users.find();
db.system.users.remove({});
創建admin的用戶,注意admin這個庫要給root權限,否則開啟權限驗證登錄一些操作會顯示沒有權限
use admin db.createUser({ user: "root", pwd: "password", roles:[{role:"root",db: "admin"}]}); db.auth("root","admin");
特別注意:mongodb和spring-mongodb默認的認證機制不同,會導致項目中mongo連接不上!
1、mongodb的認證機制有2種:SCRAM-SHA-1和MONGODB-CR。3.0之后版本默認為:SCRAM-SHA-1;
2、spring-mongodb默認為:MONGODB-CR,並不支持設置認證方式;
db.system.version.findOne({"_id":"authSchema"}); db.system.version.insert({"_id":"authSchema","currentVersion":3}) db.system.version.update({"_id":"authSchema"},{$set:{"currentVersion":3}})
創建其他數據庫的用戶,mongo的每個庫的用戶是獨立的。你有多少個庫就要創建多少個用戶,即使用戶名一樣也要。
use addressbook db.createUser({user:"user",pwd:"password",roles:[{role:"readWrite", db:"addressbook"},{role:"dbAdmin",db:"addressbook"},{role:"dbOwner",db:"addressbook"}]}); db.auth("zaixiudb","password"); use imRoom db.createUser({user:"user",pwd:"password",roles:[{role:"readWrite", db:"imRoom"},{role:"dbAdmin",db:"imRoom"},{role:"dbOwner",db:"imRoom"}]}); db.auth("zaixiudb","password");
* 這里要特別注意權限從小到大,如下剛開始從網上copy了這句創建用戶。
db.createUser({user:"user",pwd:"password",roles:[{role:"read", db:"addressbook"},{role:"readWrite", db:"addressbook"},{role:"dbAdmin",db:"addressbook"},{role:"dbOwner",db:"addressbook"}]});
spring boot老是連接不上,報權限錯誤Command failed with error 13 (Unauthorized): 'not authorized on imapi to execute command
mongo compass卻可以連接上,原因是springboot項目中有寫入操作。因此去掉read權限,readWrite權限生效。
開啟conf中的認證模式,重啟啟動mongodb生效。
springboot中的配置
mongoconfig.uri=mongodb://user:password@127.0.0.1:28018 mongoconfig.dbName=imapi mongoconfig.mapPackage=cn.xyz.mianshi.vo mongoconfig.roomDbName=imRoom mongoconfig.username=user mongoconfig.password=password mongoconfig.connectTimeout=20000 mongoconfig.socketTimeout=20000 mongoconfig.maxWaitTime=20000