Mongodb 3.x 安裝及許可權配置
Intro
Mongodb本身已經是比較成熟並已經廣泛使用的一款nosql產品。瞭解該產品最好的方式當然是官網,考慮到網路和語言習慣,一些具有中文站則會給我們更大的便利。這篇文章主要記錄一下折騰Mongodb3.x的一些步驟,其中所有的內容都是通過閱讀官方文件瞭解的。
一、Mongodb安裝
由於大部分時候Mongodb serever都是跑在Linux環境下,所以這裡預設作業系統都是Linux centos6。Mongodb版本為當前最新,v3.4.2。
- tgz包下載
wget 'https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.4.2.tgz'
- 解壓縮
tar zxvf mongodb-linux-x86_64-amazon-3.4.2.tgz cd mongodb-linux-x86_64-amazon-3.4.2/bin
這裡會看到所有Mongodb相關的可執行檔案,目前只關注
executable | desc |
---|---|
mongod | Server啟動程式 |
mongo | Client啟動程式 |
二、Mongodb啟動
1. 啟動Server
知道了Mongodb server的啟動檔案是mongod,那麼猜想 ./mongod既能啟動server,但是很自然我們首先會關注這樣幾個問題。
1) 預設監聽埠是多少,如果設定我自己想用的埠號
2) 執行日誌在哪裡看
3) 持久化的資料檔案放在哪裡
4) 是否有配置檔案支援更多細節的配置
啟動命令
./mongod --port 27017 --dbpath /mongodb/data --logpath /logs/mongodb.log -f /mongodb/server.conf
以上命令解答上面提到的4個問題。
--port 指定客戶端連線埠號,預設27017 --dbpath 持久化資料所在路徑,啟動前該路徑必須存在 --logpath 日誌檔案 -f 指定配置檔案,簡單的properties檔案,自己建立即可
如果個性化引數都寫在配置檔案中會讓啟動命令變得清爽一些,我自己是這樣做的
./mongod -f /mongodb/server.conf
配置檔案 cat /mongodb/server.conf
port=27017 logpath=/logs/mongodb.log logappend=true #日誌生產方式 (追加/覆蓋) dbpath=/mongodb/data
2. 客戶端連線
Mongodb client的啟動檔案是mongo,而我們又知道mongodb服務的ip:port,猜都能猜到客戶端連線命令
./mongo 127.0.0.1:27017
如果連線成功,mongodb的安裝就到此結束了。
三、許可權配置
現在mongodb已經安裝啟動可以使用了,但是很奇怪,一直都沒有遇到過許可權問題,如果其他人也能隨意連上我的資料篡改資料豈不是麻煩了。那下一個要解決的問題 就是為我的資料庫加上許可權控制。
總的來說是以下幾步:
1. 開啟許可權驗證
在server.conf中加上一行
auth=true
2. 新增管理員賬號
這裡所說的管理員賬號不是像linux裡面無所不能的root,而是一個能分配賬號的賬號。在server所在的系統,用客戶端連線上server,執行以下程式碼
use admin db.createUser({ user:'admin', pwd:'123456', roles:[{role:'userAdminAnyDatabase', db:'admin'}] })
這樣就建立了一個賬號,user為admin, 密碼為123456,他能在admin庫中管理任何庫的使用者。
3. 新增資料操作賬號
一旦開啟的許可權管理,接下來所有的操作都必須用合適的賬號去做,剛剛我們能成功的新增使用者,是因為這是我們的第一個賬號(第一就有特權,呵)。我們建立的admin賬號只能管理使用者,而我們真正需要的賬號是要能用來讀寫資料的,那就需要建立一個可讀寫資料的賬號。
接下來,我們要為一個名為”testDatabase”的庫新增讀寫使用者rwuser。
use admin db.auth("admin","123456") use testDatabase db.createUser({ user:'rwuser', pwd:'123456', roles:[{role:'readWrite', db:'testDatabase'}] })
使用exit退出連線後,我們就可以使用該賬號連線server了
./mongo 127.0.0.1:27017/testDatabase -urwuser -p123456
四. mongodb相關概念
mongodb也存在和mysql類似的“庫”概念,大體概念是相似的,同樣預設會有一個test庫。Collection的概念則對應mysql中的表。
相關的命令:
command | desc |
---|---|
use ${databaseName} | 切換到databaseName |
db | 當前所在庫名 |
show collections | 列出當前所在庫中所有collection名字 |
show dbs | 列出所有庫 |
在這裡“庫”的概念之下,我們回頭看新增賬號時的一些操作。
//use testDatabase => use admin db.createUser({ user:'rwuser', pwd:'123456', roles:[{role:'readWrite', db:'testDatabase'}] })
admin賬號登入後,為testDatabase庫建立賬號時,做了一次庫切換use testDatabase
,可明明在roles:[{role:'readWrite', db:'testDatabase'}]
這一行程式碼裡已經指明給該賬號的是testDatabase庫的讀寫許可權,還需要多此一舉嗎。在mongodb裡,這確實是有意義的。簡單的說來,就是在某個庫下建立的賬號,只能用來登入到這個庫,若再要操作其他庫,則需要先做庫切換。舉個例子,如果上一節中use testDatabase改成use admin,登入命令則需要改成:
./mongo 127.0.0.1:27017/admin -urwuser -p123456
而此時連線成功後是登入到admin庫,然後需要use testDatabase才能做後續的讀寫操作。