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