摘要:默認(rèn)是不開啟權(quán)限認(rèn)證的,而我也是一直這么做的。自從上次爆發(fā)了贖金門事件,必須重視下的權(quán)限認(rèn)證了。開啟認(rèn)證也很簡單,在配置文件默認(rèn)是里面加入這樣一行就行了。
MongoDB version: v3.4.4
MongoDB默認(rèn)是不開啟權(quán)限認(rèn)證的,而我也是一直這么做的。自從上次MongoDB爆發(fā)了贖金門事件,必須重視下MongoDB的權(quán)限認(rèn)證了。
開啟認(rèn)證也很簡單,在配置文件(默認(rèn)是/etc/mongodb.conf)里面加入auth = true這樣一行就行了。
這時(shí)你重啟MongoDB服務(wù)進(jìn)入mongo shell都是沒問題的。但是如果你想插入一條數(shù)據(jù),那么問題來了:
use foo; db.bar.insert({"faf": "faf"}) WriteResult({ "writeError" : { "code" : 13, "errmsg" : "not authorized on foo to execute command { insert: "bar", documents: [ { _id: ObjectId("5938e7f63be90aa05e12aecc"), faf: "faf" } ], ordered: true }" } })
說明權(quán)限認(rèn)證生效了,一個(gè)沒有認(rèn)證通過的用戶再也不能使用數(shù)據(jù)庫了(即使能進(jìn)mongo shell)。
那么問題又來了,我現(xiàn)在沒有用戶咋辦?這是一個(gè)雞和蛋的問題。怎么在沒有用戶的情況下新建用戶?
MongoDB的開發(fā)者早已經(jīng)想到了這一步。MongoDB自帶一個(gè)數(shù)據(jù)庫叫admin,這個(gè)數(shù)據(jù)庫用來管理所有數(shù)據(jù)庫的,類似于MySQL的mysql數(shù)據(jù)庫。如果這個(gè)數(shù)據(jù)庫的管理員賬戶還沒有建立,那么任何人都可以在admin數(shù)據(jù)庫里面新建管理員賬戶。
use admin; db.createUser({user: "admin", pwd: "adminer", roles: [{role: "userAdminAnyDatabase", db: "admin"}]})
先進(jìn)入admin數(shù)據(jù)庫,然后運(yùn)行db.createUser方法新建用戶。createUser方法必須傳入一個(gè)有user(用戶名)、pwd(密碼),roles(角色)三個(gè)屬性的JSON對象。user、pwd都可以理解,那這個(gè)角色又是啥?當(dāng)我們嘗試去管理一個(gè)數(shù)據(jù)庫的時(shí)候發(fā)現(xiàn),有很多權(quán)限需要處理,比如:數(shù)據(jù)庫讀、數(shù)據(jù)庫寫、數(shù)據(jù)庫用戶管理等等權(quán)限,我想建一個(gè)用戶的話,給一個(gè)用戶賦權(quán)限就十分復(fù)雜了?,F(xiàn)在一種流行的方式是:我先定義一個(gè)角色,這個(gè)角色對應(yīng)一組權(quán)限,那么我管理用戶時(shí)就只要賦予一個(gè)角色就行了。真是方便了不少。那么這個(gè)userAdminAnyDatabase角色就是這樣一個(gè)超級角色,有這個(gè)角色的用戶可以給任意數(shù)據(jù)庫新建用戶,并且賦予任何角色,真是個(gè)狠角色。那么我們應(yīng)該知道了,基本上所有的第一個(gè)建立的用戶的角色都應(yīng)該是userAdminAnyDatabase,好處就是以后可以用這個(gè)用戶來管理其他用戶了。
那么MongoDB內(nèi)置了哪些角色呢?按照類別來分主要有:
Database User Roles
Database Administration Roles
Cluster Administration Roles
Backup and Restoration Roles
All-Database Roles
Superuser Roles
Internal Role
十分復(fù)雜,為了簡單起見,就講其中兩個(gè):read、readWrite也就是常用的讀數(shù)據(jù)庫和讀寫數(shù)據(jù)庫。
建立了admin用戶之后,還必須登錄才行(必須在admin數(shù)據(jù)庫才能登錄),db.auth("admin", "adminer"),我再切換到foo數(shù)據(jù)庫就可以給foo數(shù)據(jù)庫創(chuàng)建用戶啦(這里有一個(gè)不大不小的坑,就是你要給其他數(shù)據(jù)庫創(chuàng)建用戶,都必須先到admin數(shù)據(jù)庫,認(rèn)證剛才新建的那個(gè)admin用戶,然后再切換到其他數(shù)據(jù)庫才能建立用戶)!
use foo; db.createUser({user: "foo", pwd: "bar", roles: [{role: "readWrite", db: "foo"}]}) db.auth("foo", "bar")
就可以往數(shù)據(jù)庫里面寫入啦?。?!
原文鏈接:生信人
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/19016.html
摘要:一步一步構(gòu)建一個(gè)應(yīng)用開篇地址通過不認(rèn)證的方式啟動連接實(shí)例創(chuàng)建用戶超級管理員重啟,加上訪問控制認(rèn)證連接時(shí)認(rèn)證連接后認(rèn)證為其他庫創(chuàng)建用戶添加對有讀寫權(quán)限,對有讀權(quán)限 [一步一步構(gòu)建一個(gè)react應(yīng)用-開篇](https://segmentfault.com/a/11... git地址 通過不認(rèn)證的方式啟動Mongodb mongod --port 3007 --config mongo...
摘要:一步一步構(gòu)建一個(gè)應(yīng)用開篇地址通過不認(rèn)證的方式啟動連接實(shí)例創(chuàng)建用戶超級管理員重啟,加上訪問控制認(rèn)證連接時(shí)認(rèn)證連接后認(rèn)證為其他庫創(chuàng)建用戶添加對有讀寫權(quán)限,對有讀權(quán)限 [一步一步構(gòu)建一個(gè)react應(yīng)用-開篇](https://segmentfault.com/a/11... git地址 通過不認(rèn)證的方式啟動Mongodb mongod --port 3007 --config mongo...
摘要:一下安裝數(shù)據(jù)庫進(jìn)入官網(wǎng),選擇相應(yīng)的版本下載,安裝時(shí)默認(rèn)勾選安裝服務(wù)和修改一些數(shù)據(jù)庫配置,如已有數(shù)據(jù)庫連接工具,可取消默認(rèn)勾選的安裝。 一、Win下安裝數(shù)據(jù)庫 進(jìn)入mongo官網(wǎng),選擇相應(yīng)的msi版本下載,安裝時(shí)默認(rèn)勾選安裝MongoD服務(wù)和修改一些數(shù)據(jù)庫配置,如已有數(shù)據(jù)庫連接工具Robo 3T,可取消默認(rèn)勾選的compass安裝。 若啟動服務(wù)報(bào)mp錯(cuò)誤,可修改binmongod.cfg...
閱讀 3086·2023-04-25 21:23
閱讀 3174·2021-09-22 15:24
閱讀 924·2019-08-30 12:55
閱讀 2175·2019-08-29 18:42
閱讀 2674·2019-08-29 16:27
閱讀 1022·2019-08-26 17:40
閱讀 2322·2019-08-26 13:29
閱讀 2679·2019-08-26 11:45