伺服器配置文件分析 bin目錄下的mongod.cfg是伺服器的配置文件,文件中主要的配置參數: 1、資料庫文件的存放位置 2、伺服器日誌文件的存放位置 3、預設的IP地址、埠號 設置密碼 預設情況下,MongoDB的伺服器地址是127.0.0.1,埠號是27017,存儲資料庫管理員信息的adm ...
伺服器配置文件分析
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表示不通過。