1安裝 MongoDB 3.2
官網(wǎng)上詳細(xì)的流程走走就ok
https://docs.mongodb.com/master/tutorial/install-mongodb-on-Ubuntu
2MongoDB 如果不配置登陸的情況是等于游客也是超級管理員的,但默認(rèn)不支持外鏈接的
3基本的角色
userAdminAnyDatabase 這個角色擁有分配角色和用戶的權(quán)限,但沒有查寫的缺陷root 這是超級管理員readWrite 有讀寫權(quán)限read 有讀權(quán)限[plain] view plain copyroot@iZ28ec5minyZ:~# mongo MongoDB shell version: 3.2.6 connecting to: test Server has startup warnings: 2016-06-04T18:43:48.721+0800 I CONTROL [initandlisten] 2016-06-04T18:43:48.722+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. 2016-06-04T18:43:48.722+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never' 2016-06-04T18:43:48.722+0800 I CONTROL [initandlisten] 2016-06-04T18:43:48.722+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'. 2016-06-04T18:43:48.722+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never' 2016-06-04T18:43:48.722+0800 I CONTROL [initandlisten] > show dbs local 0.000GB >默認(rèn)mongo 進(jìn)入的 是 test ,執(zhí)行 show dbs ,查看所有數(shù)據(jù)庫 我這新安裝的就 一個 local db
現(xiàn)在新建一個數(shù)據(jù)庫 admin 用來保存 新建的userAdminAnyDatabase角色 用戶(這個相當(dāng)于人事部長啊)
[plain] view plain copy> use admin switched to db admin > db admin 有一個要注意的是我在那個數(shù)據(jù)庫創(chuàng)建的用戶就保存在哪個數(shù)據(jù)庫,像我現(xiàn)在在 db 輸出 admin,那我的用戶就保存在admin 數(shù)據(jù)庫。創(chuàng)建人事部管理員 master
[html] view plain copy> db.createUser({user:"master",pwd:"123456",roles:[{"role":"userAdminAnyDatabase","db":"admin"}]}) Successfully added user: { "user" : "master", "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ] } > show dbs admin 0.000GB local 0.000GB >4配置mongodb
配置前先關(guān)閉mongodb
執(zhí)行 service mongod stop (ubuntu 等系統(tǒng)) 沒有service 的系統(tǒng)如(Mac)執(zhí)行 killall mongod
進(jìn)入配置文件
(ubuntu 為例子) vi /etc/mongod.conf
修改 bindip : 0.0.0.0
允許所有IP鏈接,外鏈
5 認(rèn)證模式開啟
[plain] view plain copymongod -f /etc/mongod.conf --fork --auth -f 是使用的配置文件 (--config)也可以-fork 是 后臺服務(wù)運(yùn)行
-auth 必須認(rèn)證才能操作
6登陸到mongodb
[plain] view plain copyroot@iZ28ec5minyZ:/var/lib# mongo MongoDB shell version: 3.2.6 connecting to: test > show dbs 2016-06-04T20:29:20.205+0800 E QUERY [thread1] Error: listDatabases failed:{ "ok" : 0, "errmsg" : "not authorized on admin to execute command { listDatabases: 1.0 }", "code" : 13 } : _getErrorWithCode@src/mongo/shell/utils.js:25:13 Mongo.PRototype.getDBs@src/mongo/shell/mongo.js:62:1 shellHelper.show@src/mongo/shell/utils.js:760:19 shellHelper@src/mongo/shell/utils.js:650:15 @(shellhelp2):1:1 > 現(xiàn)在沒有權(quán)限了執(zhí)行任何操作了,當(dāng)然你能進(jìn)入 終端登陸
[plain] view plain copy> use admin switched to db admin > db.auth("master","123456") 1 >這里面要注意的是你在那注冊用戶的要去那個db里認(rèn)證,就像我是testdb數(shù)據(jù)庫createUser的,那我先要use testdb
在去db.auth("userName","passWord")
現(xiàn)在去創(chuàng)建用戶了
[plain] view plain copy> db.auth("master","123456") 1 > db.createUser({user:"jimb55",pwd:"123456",roles:[{"role":"readWrite","db":"jimb55db"}]}) Successfully added user: { "user" : "jimb55", "roles" : [ { "role" : "readWrite", "db" : "jimb55db" } ] } > jimb55db 是我之前創(chuàng)建的一個db,現(xiàn)在我用master給這個db新建了用戶jimb55 role是 readWrite(讀寫權(quán)限)db 作用的表(這個不是保存用戶和用戶認(rèn)證的表,當(dāng)前的表時admin,jimb55被保存到admin,下次登陸也是在admin登陸,當(dāng)然你可以 use jimb55db 轉(zhuǎn)換到 jimb55db 后再運(yùn)行 db.createUser({...}) ,那么下次就可以再jimb55db登陸也沒問題)
現(xiàn)在創(chuàng)建成功,看看有認(rèn)證看看
exit 退出終端 再次 mongo 進(jìn)入終端
[plain] view plain copy> use jimb55db switched to db jimb55db > db.auth("jimb55","123456") Error: Authentication failed. 0 > use admin switched to db admin > db.auth("jimb55","123456") 1 看,你在jimb55db 認(rèn)證失敗了吧現(xiàn)在看看對 jimb55db 的讀寫操作
[plain] view plain copy> use jimb55db switched to db jimb55db > db jimb55db > db.jimb55test.find() { "_id" : ObjectId("5752cb4cba5ab543f74727a5"), "name" : "jimb55" } > db.jimb55test.insert({name:"jimb55 bTyh"}) WriteResult({ "nInserted" : 1 }) > db.jimb55test.find() { "_id" : ObjectId("5752cb4cba5ab543f74727a5"), "name" : "jimb55" } { "_id" : ObjectId("5752cdea305e84a053d6cc83"), "name" : "jimb55 bTyh" } > 沒有問題了吧。當(dāng)然我們要做到像MySQL那樣遠(yuǎn)程鏈接操作并且有個可視化的界面我現(xiàn)在用的是 robomongo,隨便百度一下下載一個
但填寫資料后發(fā)現(xiàn)
認(rèn)證失敗,要注意的是 robomongo 等認(rèn)證不過,那是mongodb 版本錯了,這里要執(zhí)行命令校正mongodb、版本
先退出 mongod 服務(wù)
killall mongod
再在無認(rèn)證情況下打開 mongod
mongod -f /etc/mongod.conf --fork
進(jìn)入終端:mongo
[plain] view plain copy> use admin switched to db admin > db.dropUser("jimb55") true > db.system.version.update({ "_id" : "authSchema"},{$set: {"currentVersion" : 3} }) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) > db.createUser({user:"jimb55",pwd:"123456",roles:[{"role":"readWrite","db":"jimb55db"}]}) Successfully added user: { "user" : "jimb55", "roles" : [ { "role" : "readWrite", "db" : "jimb55db" } ] } > 換成版本3了,進(jìn)入admin 刪除用戶,更改版本version號碼,再重新創(chuàng)建用戶退出mongo ,killall mongod ,再在認(rèn)證模式打開mongod
mongod -f /etc/mongod.conf --fork --auth
現(xiàn)在再進(jìn)入 robomongodb 看看
新聞熱點(diǎn)
疑難解答