前言
默認(rèn)情況下吭产,mogoDB 是沒有鑒權(quán)的,也就是只要知道他的地址和服務(wù)的端口格二,任何人都可以連接他并且可以完全控制他。這對于新手上手來說是比較方便的竣蹦,但是用在線上環(huán)境顯然就是不可接受的了顶猜。實際上 mongoDB 是提供了完整的認(rèn)證和授權(quán)機制的,只是需要對此進(jìn)行專門設(shè)置一下痘括。這里我們就簡要的介紹一下长窄。
本文的前提是已經(jīng)安裝了新的 mongoDB 并且還沒有設(shè)置需要鑒權(quán)。mongoDB 的安裝請參考 《CentOS7下 RPM 方式安裝 mongoDB 4》纲菌。
設(shè)置管理員賬號
首先挠日,默認(rèn)情況下,mongoDB 是沒有管理員賬號的驰后,我們將 mongoDB 設(shè)置為需要用戶認(rèn)證之前肆资,需要首先增加一個管理員賬號矗愧。否則就沒有辦法進(jìn)入 mongoDB 了灶芝。首先通過命令行連接到 mongoDB 交互環(huán)境
mongo --port 32937
進(jìn)入交互環(huán)境后,用如下的命令在 admin 數(shù)據(jù)庫中增加一個
use admin
db.createUser(
{
user: "admin",
pwd: "yourpassword",
roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
}
)
設(shè)置 mongoDB 啟用鑒權(quán)
要啟用鑒權(quán)唉韭,可以在命令行啟動 mongoDB 的時候增加 --auth 參數(shù)夜涕。我們是用配置文件的方式啟動的,所有直接在配置文件中增加啟用鑒權(quán)的設(shè)置即可属愤。在 /etc//mongod.conf 中增加如下的配置項
security:
authorization: enabled
然后用如下命令重新啟動 mongoDB 女器,再次訪問 mongoDB 就需要用戶認(rèn)證了
systemctl restart mongod
用戶認(rèn)證訪問 mongoDB
用戶認(rèn)證可以在命令行連接的時候指定如下所示
mongo --port 32937 -u 'admin' -p 'yourpassword'
這個的主要問題是別人從操作系統(tǒng)的命令歷史列表中能完整看到這個命令,從而暴露了密碼住诸。
也可以不指定驗證信息驾胆,連接上 mongoDB 后在做一次認(rèn)證即可。例如
[root@localhost ~]# mongo --port 32937
MongoDB shell version v4.0.5
connecting to: mongodb://127.0.0.1:32937/?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("aa4b9f06-a199-4833-9b12-4bbf6940c68f") }
MongoDB server version: 4.0.5
> use admin
switched to db admin
> db.auth('admin','yourpassword')
1
最后顯示了鑒權(quán)的結(jié)果為 1 贱呐,表示鑒權(quán)通過了丧诺。可以對數(shù)據(jù)庫進(jìn)行操作了奄薇。