MongoDB3.0.x版本使用者授權配置(單機環境)

來源:互聯網
上載者:User

MongoDB3.0.x版本使用者授權配置(單機環境)

MongoDB資料庫預設情況下是沒有做許可權控制的,只要能夠串連所開放的連接埠就能進行訪問,而且擁有root層級的許可權;對於生產環境而言是極不安全的,所以需要建立使用者,進行授權控制。

  • 單機環境下的使用者授權模組配置:

MongoDB的社區版本中有兩個模組可以控制使用者的訪問:

--auth: 在mongod啟動項中加入--auth,mongodb啟動後,就可以完成授權模組的啟用); PS:雖然auth模組啟用後本機還能否登陸到資料庫,但是不具備增刪改查的許可權了,所以啟動auth模組之前就應該建立一個超級使用者--keyFile <file>: 主要用於分區叢集與複本集相互之間的授權使用,在單機情況下只要用到auth,如果是在叢集(分區+複本集)環境下,就必須要用到該參數;security.authorization: 在MongoDB 2.6版本開始,mongod/mongos的啟動設定檔增加了YAML格式的寫法,功能更auth是一樣的,後面的操作中,都是採用該格式security.keyFile: 格式與security.authorization相同,功能與--keyFile相同。
  • 首先驗證下非配置認證模組的訪問:
[root@fo169 bin]# ./mongoMongoDB shell version: 3.0.7connecting to: testServer has startup warnings:2015-10-29T15:12:14.257+0800 I CONTROL  [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.2015-10-29T15:12:14.257+0800 I CONTROL  [initandlisten]> show dbslocal  0.000GB

 在沒有配置的情況下,登入到資料庫後,可以做任何操作。

  • 配置認證模組及重啟服務: 

編寫了一個啟動設定檔:mongodb.conf(檔案中標紅部分就為auth的授權模組)

[root@fo169 bin]# cat mongodb.conf systemLog:   destination: file   path: "/data/auth/log/mongod.log"                                      logAppend: truestorage:   journal:                                                                    enabled: true   dbPath: "/data/auth/db"                                                      directoryPerDB: true                                                    engine: wiredTiger                                                              wiredTiger:                                                                    engineConfig:         cacheSizeGB: 4                                                                  directoryForIndexes: true                                                   journalCompressor: zlib      collectionConfig:                                                                blockCompressor: zlib      indexConfig:                                                                          prefixCompression: truenet:                                                                        port: 27017processManagement:                                                              fork: truesecurity:   authorization: enabled                                                      
  • 建立授權使用者(超級管理員): 

MongoDB在V3.0版本之後內建了root 角色,也就是結合了readWriteAnyDatabase、dbAdminAnyDatabase、userAdminAnyDatabase、clusterAdmin4個角色許可權,類似於Oracle的sysdba角色,但是MongoDB的超級管理使用者名稱是可以隨便定義的:

[root@fo169 bin]# ./mongoMongoDB shell version: 3.0.7connecting to: testServer has startup warnings: 2015-10-30T16:24:36.127+0800 I CONTROL  [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.2015-10-30T16:24:36.127+0800 I CONTROL  [initandlisten] > use adminswitched to db admin> db.createUser(...    {...      user: "ljaiadmin",...      pwd: "123456",...     roles: [ { role: "root", db: "admin" } ]...   }... )Successfully added user: {        "user" : "ljaiadmin",        "roles" : [                {                        "role" : "root",                        "db" : "admin"                }        ]}

這樣就建立好一個ljaiadmin的超級管理使用者,建立全域使用者或者超級使用者,需要在MongoDB的admin資料庫中建立(在其他庫也可以建立,但是沒有該角色功能),重啟完mongod進程後,接下來做一下許可權的驗證:

[root@fo169 bin]# ./mongoMongoDB shell version: 3.0.7connecting to: test> show dbs  (註:此時查看已提示沒有授權執行listDatabases命令了)2015-10-30T16:41:31.131+0800 E QUERY    Error: listDatabases failed:{        "ok" : 0,        "errmsg" : "not authorized on admin to execute command { listDatabases: 1.0 }",        "code" : 13}    at Error (<anonymous>)    at Mongo.getDBs (src/mongo/shell/mongo.js:47:15)    at shellHelper.show (src/mongo/shell/utils.js:630:33)    at shellHelper (src/mongo/shell/utils.js:524:36)    at (shellhelp2):1:1 at src/mongo/shell/mongo.js:47> use adminswitched to db admin> db.auth('ljaiadmin','123456') (註:切換到admin使用者進行授權驗證)1> show dbs                      (註:驗證完成後,就可以讀寫等操作)admin    0.000GBlocal    0.000GBtest100  0.000GBtest2    0.000GB> use test2switched to db test2> show tablestesttest2> db.test2.find(){ "_id" : ObjectId("5632cf116207909a76446af7"), "name" : "1" }> db.test2.drop()true> db.dropDatabase(){ "dropped" : "test2", "ok" : 1 }> show dbsadmin    0.000GBlocal    0.000GBtest100  0.000GB> use test100switched to db test100> db.test111.insert({"test":"test"})WriteResult({ "nInserted" : 1 })> db.test111.find(){ "_id" : ObjectId("56332db373f771b3d95638bb"), "test" : "test" }> use adminswitched to db admin> show users{        "_id" : "admin.ljaiadmin",        "user" : "ljaiadmin",        "db" : "admin",        "roles" : [                {                        "role" : "root",                        "db" : "admin"                }        ]}> 
  • 建立普通使用者

用可以對test123資料庫讀寫的rwtest123使用者為例:

> use test123switched to db test123> db.createUser(...    {...      user: "rwtest123",...      pwd: "123456",...     roles: [ { role: "readWrite", db: "test123" } ]...   }... )Successfully added user: {        "user" : "rwtest123",        "roles" : [                {                        "role" : "readWrite",                        "db" : "test123"                }        ]}
#所建的rwtest123使用者可以在test123資料庫中進行增刪改查操作,但是其他動作就不行了>db.auth('rwtest123','123456')switched to db test123> db.test123.insert({"test":"test"})WriteResult({ "nInserted" : 1 })> db.test123.find(){ "_id" : ObjectId("563332ebc8a59ae4fe96bbf5"), "test" : "test" }> db.test123.drop()true> use test100switched to db test100> db.test100.find()Error: error: { "$err" : "not authorized for query on test100.test100", "code" : 13 }>
  • 配置參考:

 MongoDB資料庫的使用者權限控制許可權還是比較多的,有系統內建的,已經定義好的角色,也可以自己定義角色許可權,需要根據業務需要進行許可權分配:

內建角色的說明(一般內建的角色基本上就可以滿足生產環境需求了):

https://docs.mongodb.org/manual/core/security-built-in-roles/

使用者自行定義角色的說明:

https://docs.mongodb.org/manual/core/security-user-defined-roles/

使用者管理配置的說明

https://docs.mongodb.org/manual/reference/method/#user-management-methods

更多MongoDB相關內容可以看看以下的有用連結: 

MongoDB 3.0 正式版發布下載 

CentOS編譯安裝MongoDB

CentOS 編譯安裝 MongoDB與mongoDB的php擴充

CentOS 6 使用 yum 安裝MongoDB及伺服器端配置

Ubuntu 13.04下安裝MongoDB2.4.3

MongoDB入門必讀(概念與實戰並重)

Ubunu 14.04下MongoDB的安裝指南

《MongoDB 權威指南》(MongoDB: The Definitive Guide)英文文字版[PDF]

Nagios監控MongoDB分區叢集服務實戰

基於CentOS 6.5作業系統搭建MongoDB服務

MongoDB 的詳細介紹:請點這裡
MongoDB 的:請點這裡

本文永久更新連結地址:

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.