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