Mongodb 3.2 開啓密碼認證

[plain] view plain copy
  1. <span style="font-family: 'Microsoft YaHei'; background-color: rgb(255, 255, 255);">MongoDB 3.2 配置 用戶認證 和 角色總結</span>  


1安裝 MongoDB 3.2

官網上詳細的流程走走就ok

https://docs.mongodb.com/master/tutorial/install-mongodb-on-ubuntu


2MongoDB 如果不配置登陸的情況是等於遊客也是超級管理員的,但默認不支持外鏈接的


3基本的角色 

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

[plain] view plain copy
  1. root@iZ28ec5minyZ:~# mongo  
  2. MongoDB shell version: 3.2.6  
  3. connecting to: test  
  4. Server has startup warnings:   
  5. 2016-06-04T18:43:48.721+0800 I CONTROL  [initandlisten]   
  6. 2016-06-04T18:43:48.722+0800 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.  
  7. 2016-06-04T18:43:48.722+0800 I CONTROL  [initandlisten] **        We suggest setting it to 'never'  
  8. 2016-06-04T18:43:48.722+0800 I CONTROL  [initandlisten]   
  9. 2016-06-04T18:43:48.722+0800 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.  
  10. 2016-06-04T18:43:48.722+0800 I CONTROL  [initandlisten] **        We suggest setting it to 'never'  
  11. 2016-06-04T18:43:48.722+0800 I CONTROL  [initandlisten]   
  12. > show dbs  
  13. local  0.000GB  
  14. >   


默認mongo 進入的 是 test  ,執行 show dbs ,查看所有數據庫 我這新安裝的就 一個 local db

現在新建一個數據庫 admin 用來保存 新建的userAdminAnyDatabase角色 用戶(這個相當於人事部長啊)

[plain] view plain copy
  1. > use admin  
  2. switched to db admin  
  3. > db  
  4. admin  

有一個要注意的是我在那個數據庫創建的用戶就保存在哪個數據庫,像我現在在 db 輸出 admin,那我的用戶就保存在admin 數據庫。

創建人事部管理員 master

[html] view plain copy
  1. > db.createUser({user:"master",pwd:"123456",roles:[{"role":"userAdminAnyDatabase","db":"admin"}]})  
  2. Successfully added user: {  
  3.         "user" : "master",  
  4.         "roles" : [  
  5.                 {  
  6.                         "role" : "userAdminAnyDatabase",  
  7.                         "db" : "admin"  
  8.                 }  
  9.         ]  
  10. }  
  11. > show dbs  
  12. admin  0.000GB  
  13. local  0.000GB  
  14. >   

4配置mongodb

配置前先關閉mongodb

執行   service mongod stop (ubuntu 等系統) 沒有service 的系統如(Mac)執行 killall mongod


進入配置文件

(ubuntu 爲例子)  vi /etc/mongod.conf

修改 bindIp : 0.0.0.0

允許所有IP鏈接,外鏈


5 認證模式開啓

[plain] view plain copy
  1. mongod -f /etc/mongod.conf --fork --auth  

-f 是使用的配置文件  (--config)也可以

-fork 是 後臺服務運行

-auth 必須認證才能操作


6登陸到mongodb

[plain] view plain copy
  1. root@iZ28ec5minyZ:/var/lib# mongo  
  2. MongoDB shell version: 3.2.6  
  3. connecting to: test  
  4. > show dbs  
  5. 2016-06-04T20:29:20.205+0800 E QUERY    [thread1] Error: listDatabases failed:{  
  6.         "ok" : 0,  
  7.         "errmsg" : "not authorized on admin to execute command { listDatabases: 1.0 }",  
  8.         "code" : 13  
  9. } :  
  10. _getErrorWithCode@src/mongo/shell/utils.js:25:13  
  11. Mongo.prototype.getDBs@src/mongo/shell/mongo.js:62:1  
  12. shellHelper.show@src/mongo/shell/utils.js:760:19  
  13. shellHelper@src/mongo/shell/utils.js:650:15  
  14. @(shellhelp2):1:1  
  15.   
  16. >   

現在沒有權限了執行任何操作了,當然你能進入 終端

登陸

[plain] view plain copy
  1. > use admin  
  2. switched to db admin  
  3. > db.auth("master","123456")  
  4. 1  
  5. >   

這裏面要注意的是你在那註冊用戶的要去那個db裏認證,就像我是testdb數據庫createUser的,那我先要use testdb

在去db.auth("userName","password")


現在去創建用戶了

[plain] view plain copy
  1. > db.auth("master","123456")  
  2. 1  
  3. > db.createUser({user:"jimb55",pwd:"123456",roles:[{"role":"readWrite","db":"jimb55db"}]})  
  4. Successfully added user: {  
  5.         "user" : "jimb55",  
  6.         "roles" : [  
  7.                 {  
  8.                         "role" : "readWrite",  
  9.                         "db" : "jimb55db"  
  10.                 }  
  11.         ]  
  12. }  
  13. >   
jimb55db 是我之前創建的一個db,現在我用master給這個db新建了用戶jimb55 role是 readWrite(讀寫權限)

db 作用的表(這個不是保存用戶和用戶認證的表,當前的表時admin,jimb55被保存到admin,下次登陸也是在admin登陸,當然你可以 use jimb55db 轉換到 jimb55db 後再運行 db.createUser({...}) ,那麼下次就可以再jimb55db登陸也沒問題)


現在創建成功,看看有認證看看

exit 退出終端 再次 mongo 進入終端

[plain] view plain copy
  1. > use jimb55db  
  2. switched to db jimb55db  
  3. > db.auth("jimb55","123456")  
  4. Error: Authentication failed.  
  5. 0  
  6. > use admin  
  7. switched to db admin  
  8. > db.auth("jimb55","123456")  
  9. 1  

看,你在jimb55db 認證失敗了吧

現在看看對 jimb55db 的讀寫操作

[plain] view plain copy
  1. > use jimb55db  
  2. switched to db jimb55db  
  3. > db  
  4. jimb55db  
  5. > db.jimb55test.find()  
  6. { "_id" : ObjectId("5752cb4cba5ab543f74727a5"), "name" : "jimb55" }  
  7. > db.jimb55test.insert({name:"jimb55 bTyh"})  
  8. WriteResult({ "nInserted" : 1 })  
  9. > db.jimb55test.find()  
  10. { "_id" : ObjectId("5752cb4cba5ab543f74727a5"), "name" : "jimb55" }  
  11. { "_id" : ObjectId("5752cdea305e84a053d6cc83"), "name" : "jimb55 bTyh" }  
  12. >   

沒有問題了吧。當然我們要做到像mysql那樣遠程鏈接操作並且有個可視化的界面

我現在用的是 robomongo,隨便百度一下下載一個

但填寫資料後發現



認證失敗,要注意的是 robomongo 等認證不過,那是mongodb 版本錯了,這裏要執行命令校正mongodb、版本


先退出 mongod 服務

killall mongod 

再在無認證情況下打開 mongod

mongod -f /etc/mongod.conf --fork

進入終端:mongo

[plain] view plain copy
  1. > use admin  
  2. switched to db admin  
  3. > db.dropUser("jimb55")  
  4. true  
  5. > db.system.version.update({ "_id" : "authSchema"},{$set: {"currentVersion" : 3} })   
  6. WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })  
  7. > db.createUser({user:"jimb55",pwd:"123456",roles:[{"role":"readWrite","db":"jimb55db"}]})  
  8. Successfully added user: {  
  9.         "user" : "jimb55",  
  10.         "roles" : [  
  11.                 {  
  12.                         "role" : "readWrite",  
  13.                         "db" : "jimb55db"  
  14.                 }  
  15.         ]  
  16. }  
  17. >   
換成版本3了,進入admin 刪除用戶,更改版本version號碼,再重新創建用戶

退出mongo ,killall mongod  ,再在認證模式打開mongod

mongod -f /etc/mongod.conf --fork --auth

現在再進入 robomongodb 看看





參考資料:http://liyanjie918.blog.163.com/blog/static/2022729020156261410274/


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章