mongoDB開啓密碼驗證
使用mongoDB開發測試一直在裸奔,今天在登陸系統時一直報錯,鏈接上數據庫才發現“我方防禦塔被摧毀”,
萬惡的黑客!
幸虧我的數據庫沒有什麼真實數據,而且是用docker方式啓動的,
思來想去,痛定思痛,原因還是在自己,偷懶了。爲了避免以後仍然發生這種事情,開發也得加上用戶驗證配置。
下面記錄自己配置用戶和密碼的步驟
配置流程
爲mongodb增加用戶名和密碼分爲以下幾步:
1.在啓動時加上--auth
配置開啓驗證,
docker使用以下命令:
sudo docker run -itd --name mongo_auth -p 27017:27017 mongo --auth
2.進入docker
sudo docker exec -it mongo_auth /bin/bash
如果是非docker,可直接省略此步驟
3.進入數據庫shell
mongo
4.創建數據庫超級管理員
執行
use admin; //切換admin庫
db.createUser(
{
user:"root",
pwd:"pwd",
roles:["root"]
}
);//創建用戶
db.auth("root",'root')//驗證是否設置成功,返回1位通過,返回0爲失敗
注意,這裏的用戶不是業務數據庫的用戶,這是一個管理用戶的用戶。業務數據庫用戶是綁定在數據庫中的,下面會創建。創建與用戶相關操作都在 admin
數據庫下進行,所以先要切換至admin
5.創建業務數據庫管理員
db.createUser({
user:"user01",
pwd:"iamhappy",
roles:[
{role:"readWrite",db:"testdb1"},
{role:"readWrite",db:"testdb2"},
]
});
db.auth("root",'root');//驗證是否設置成功,返回1位通過,返回0爲失敗
use testdb1;//切換數據庫
show users;;//顯示該庫下所有用戶
權限含義分別如下
- 數據庫用戶角色:read、readWrite;
- 數據庫管理角色:dbAdmin、dbOwner、userAdmin;
- 集羣管理角色:clusterAdmin、clusterManager、4. clusterMonitor、hostManage;
- 備份恢復角色:backup、restore;
- 所有數據庫角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
- 超級用戶角色:root
- 內部角色:__system
- Read:允許用戶讀取指定數據庫
- readWrite:允許用戶讀寫指定數據庫
- dbAdmin:允許用戶在指定數據庫中執行管理函數,如索引創建、刪除,查看統計或訪問system.profile
- userAdmin:允許用戶向system.users集合寫入,可以在指定數據庫裏創建、刪除和管理用戶
- clusterAdmin:只在admin數據庫中可用,賦予用戶所有分片和複製集相關函數的管理權限。
- readAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的讀權限
- readWriteAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的讀寫權限
- userAdminAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的userAdmin權限
- dbAdminAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的dbAdmin權限。
- root:只在admin數據庫中可用。超級賬號,超級權限
可以配置一個用戶對多個數據庫的權限,一般配置一個就行
6.重啓mongodb
sudo docker restart mongo; //docker
非docker 直接停止,然後 執行 mongo --auth
mongoose鏈接配置
# mongodb 爲協議
# username: 連接數據庫的用戶
# password: 該用戶的密碼
# localhost: 本地的地址(因爲這是本地環境)非本地環境使用數據庫所在域名或者地址
# 27017: mongodb的端口號(這個一般是默認值,也可以進行修改)
# dbname: 數據庫的名字
var db = 'mongodb://username:password@localhost:27017/dbname'
參考鏈接
https://segmentfault.com/a/1190000015603831#item-0-9
https://www.jianshu.com/p/a6b82fd5bbc1