1. 程式人生 > >Mongodb 3.x 安裝及許可權配置

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才能做後續的讀寫操作。