官方手冊中啟動 MongoDB 服務時沒有任何參數,一旦用戶端串連後可以對資料庫任意操作,而且可以遠端存取資料庫,所以推薦開發階段可以不設定任何參數,但對於生產環境還是要仔細考慮一下安全方面的因素,而提高 MongoDB 資料庫安全有幾個方面: 綁定IP內網地址訪問MongoDB服務 設定監聽連接埠 使用使用者名稱和口令登入
綁定IP 內網地址訪問MongoDB服務
MongoDB 可以限制只允許某一特定 IP 來訪問,只要在啟動時加一個參數 bind_ip 即可,如下: 服務端限制只有192.168.1.103這個IP可以訪問MongoDB 服務
[root@localhost bin]# ./mongod --bind_ip 192.168.1.103
設定監聽連接埠
官方預設的監聽連接埠是27017,為了安全起見,一般都會修改這個監聽連接埠,避免惡意的串連嘗試,具體如下: 將服務端監聽連接埠修改為28018
[root@localhost bin]# ./mongod --bind_ip 192.168.1.103 --port 28018
使用使用者名稱和口令登入
MongoDB預設的啟動是不驗證使用者名稱和密碼的,啟動MongoDB後,可以直接用MongoDB串連上來,對所有的庫具有root許可權。所以啟動的時候指定參數,可以阻止用戶端的訪問和串連。
先啟用系統的登入驗證模組, 只需在啟動時指定 auth 參數即可,如
[root@localhost bin]# ./mongod --auth
建立系統root帳號
在admin庫中新添一個使用者root:
[root@localhost bin]# ./mongo
MongoDB shell version: 1.8.1 connecting to: test > db.addUser("root","111") { "user" : "root", "readOnly" : false, "pwd" : "e54950178e2fa777b1d174e9b106b6ab" } > db.auth("root","111")
本地用戶端串連,指定使用者,結果如下:
[root@localhost bin]# ./mongo -u root -p
MongoDB shell version: 1.8.1 Enter password: connecting to: test > show collections; system.indexes system.users
建立指定許可權使用者
MongoDB 也支援為某個特定的資料庫來設定使用者,如我們為 test 庫設一個唯讀使用者user_reader: [root@localhost bin]# ./mongo -u root -p MongoDB shell version: 1.8.1 Enter password: connecting to: test > show collections; system.indexes system.users > use test switched to db test > db.addUser("user_reader", "user_pwd", true) { "user" : "user_reader", "readOnly" : true, "pwd" : "0809760bb61ee027199e513c5ecdedc6"
}