服務器配置文件分析
bin目錄下的mongod.cfg是服務器的配置文件,文件中主要的配置參數:
1、數據庫文件的存放位置
2、服務器日志文件的存放位置
3、默認的IP地址、端口號
設置密碼
默認情況下,MongoDB的服務器地址是127.0.0.1,端口號是27017,存儲數據庫管理員信息的admin數據庫是空的,即沒有管理員賬戶,任何客戶端可以直接連接服務器,不需要認證。
好處是,用戶可以即時上手,不用擔心被一堆配置弄的心煩意亂。壞處是,所有人都可以直接訪問並修改數據庫數據。
1、使用admin數據庫,創建一個管理員賬戶
use admin
db.createUser({user:"chy",pwd:"abc",roles:[{role:"userAdminAnyDatabase",db:"admin"}]})
會提示創建成功。role指定賬戶角色(權限),db指定此賬戶管理的是哪個db。因為是roles:[],數組,所以可同時設置多個role。
如果是role中帶有AnyDatabase,則可管理所有數據庫。
如果role中不帶AnyDatabase,則只能管理指定的db。
不管是哪種,這個賬戶只能進入指定的db。比如權限指定為"userAdminAnyDatabase",db指定為"admin",此賬戶只能通過數據庫admin的驗證,不能通過其他數據庫的驗證。要進入admin數據庫后,在admin數據庫中管理所有數據庫。
"userAdminAnyDatabase"是管理所有數據庫,可進行刪除某個數據庫之類的操作,是管理,並不能對某個數據庫進行讀寫。
mongodb的內置role
1. 數據庫用戶角色:read、readWrite;
2. 數據庫管理角色:dbAdmin、dbOwner、userAdmin;
3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
4. 備份恢復角色:backup、restore;
5. 所有數據庫角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
6. 超級用戶角色:root
7. 內部角色:__system
2、修改配置文件mongod.cfg,使用密碼。
我們看到默認是注釋了的,不使用安全驗證。
取消注釋,修改如下:
注意空格、縮進,authorization冒號后面有一個空格。
security:
authorization: enabled
3、重啟MongoDB服務。
4、
exit //先退出客戶端
mongo
use admin
db.auth("username","password") //驗證密碼。1表示通過驗證,0表示不通過。
剛才創建的賬戶可進入所有db。可創建某個db的賬戶。
db.createUser({user:'chy1',pwd:'abc1',roles:[{role:'readWrite',db:'test'}]})
讀寫權限,此賬戶只能操作數據庫test,且只能對test進行讀寫。
創建好之后就可以使用 mongodb://username:password@host[:port]/database 進行連接了(需要先 mongo 進入客戶端 )。
注意:
- MongoDB系統的最高權限是root,根權限
- 某個數據庫的最高權限是dbOwner,數據庫所有者,可創建索引、進行讀寫等操作。
- MongoDB的數據庫是相互獨立的,每個數據庫都有單獨的密碼、權限,互不通用。
- 給某個數據庫創建賬號,必須限use進入該數據庫,然后db.createUser(),要指定roles中的db為該數據庫。是在該數據庫中創建該數據庫的賬號,不是說都是在admin數據庫中創建賬號。在admin數據庫中創建的賬號只能用於admin數據庫的驗證,不能用於其他數據庫的驗證。
- 可以用db.auth("username","pwd") 驗證賬戶,1表示通過,0表示不通過。