前言
MongoDb在安裝之后,默認使用27017端口,也不會提供默認的用戶,更不會開啟身份認證,這意味著只要有人知道你服務器的ip就可以鏈接上你的數據庫,進行任何操縱,這無疑是,這無異于自家的大門對別人敞開,數據毫無安全性可言,所以這篇文章教大家怎么創建用戶并開啟安全驗證。
認證方法
用戶名,密碼驗證
創建用戶
查看用戶信息
查看單個用戶
db.getUser('userName');
查看所有用戶信息
db.getUsers();
給Mongdb創建一個用戶管理員
1、先進入【admin】數據庫,使用use admin
2、使用db.createUser( userObj , writeConcern )
創建用戶
db.createUser({
user:"myadmin",
pwd:"123qwezxc",
roles:[
{
role:"userAdminAnyDatabase",
db:"admin"
}
]
})
解釋 : 通過上面的代碼給【admin】數據庫添加了一個擁有【userAdminAnyDatabase】【readWriteAnyDatabase】權限的用戶,userAdminAnyDatabase所具有的權限主要是創建用戶,給用戶授予或撤銷角色,readWriteAnyDatabase擁有對數據庫擁有讀寫權限。mondb的官方文檔對于角色做了詳細的說明,想了解一些可以戳這里
開啟身份驗證的兩種方式
1、連接時使用命令參數 --auth
mongod --auth --port 27017 --dbpath '數據庫文件的絕對路徑'
2、修改mongod.conf文件
如果你使用配置文件啟動mongodb,在配置文件中加入下列內容,這里有兩種寫法:
- YMAL的配置文件格式(mongodb2.6版本之后引入的配置文件格式)
注意:這里有一個大坑,yaml格式的配置文件,要求是同冒號+空格來分隔鍵值對,否則會解析錯誤。(當時折騰了很久)
security:
authorization: enabled
可以使用命令
mongod -f /etc/mongod.conf
啟動mongodb,如果解析錯誤,會在終端打印出失敗的原因,沒有信息說明mongod實例啟動成功了!
- 2.6版本之前的配置文件格式(向后兼容的,所以兩種格式的配置可以混用)
auth=true
以上兩種修改方式,大家選擇一種即可,修改完之后使用命令sudo service mongod restart
重啟服務,再使用命令service mongod status
查看服務是不是真的啟動了,如果顯示mongod start/running
說明啟動成功。之后就啟用了角色訪問控制,用戶只能訪問已被授予權限的數據庫資源和操作。
小貼士:windows用戶可以參考如下命令,將mongodb安裝為服務,這樣就不用每次都去啟動mongod實例
#安裝服務
mongod --config "E:\someSoftWare\MongoDB\mongodb.config" --install --serviceName "mongo"
#卸載服務
mongod --dbpath "E:\someSoftWare\data\db" --logpath "E:\someSoftWare\data\log\mongodb.log" --remove
#啟動服務
net start mongo
注意:這里config文件的路徑要加雙引號("),否則會一直提示找不到文件
使用用戶管理員登錄數據庫
在連接期間進行身份驗證
mongo --port 27017 -u "登錄名" -p "密碼" --authenticationDatabase "數據庫名"
如果驗證失敗會在命令行打印如下信息
連接成功之后再認證
#連接
mongo --port 27017
#進入admin數據庫
use admin
#在admin數據庫中認證
db.auth('用戶管理員名稱','密碼')
驗證成功打印1,失敗打印0.
使用用戶管理員創建其他用戶,細化管理。
給某個數據創建具有讀權限的用戶
#給test數據庫添加
db.createUser({
user:"readUser",
pwd:'123qwezxc',
roles:[
{
role:"read",
db:"test"
}
]
})
創建具有讀寫權限的用戶
db.createUser({
user:"readWriteUser",
pwd:'123qwezxc',
roles:[
{
role:"readWrite",
db:"test"
}
]
})
創建具有數據備份權限的用戶(只能在admin數據庫中添加)
db.createUser({
user:"backupUser",
pwd:'123qwezxc',
roles:[
{
role:"backup",
db:"admin"
}
]
})
注意:db只能指定admin,因為backup和restore角色都在admin數據據庫中
創建具有數據備份權限的用戶(只能在admin數據庫中添加)
db.createUser({
user:"restoreUser",
pwd:'123qwezxc',
roles:[
{
role:"restore",
db:"admin"
}
]
})
mongodb系統內置了很多角色,這里就不一一列舉了,可以查看mognodb內置角色,創建符合自己需求的用戶。
寫在最后
mongodb的用戶角色管理還是相當靈活的,除了系統內置的一些角色,我們還可以使用db.createRole()
去定制自己的角色,感興趣的大家自行了解角色管理