1. 程式人生 > 其它 >MongoDB的訪問控制

MongoDB的訪問控制

技術標籤:MongoDB資料庫

windows環境下完成mongodb的訪問控制

windows環境下安裝好的mongodb預設是沒有訪問控制、管理使用者的,這樣是有很大的安全風險的。

本文通過cmd命令列來完成

一、環境

win10,MongoDB4.0.2

安裝路徑:E:\Program Files\MongoDB4.0

二、沒有訪問控制的情形

沒有開啟訪問控制的情況下,只需要知道ip地址,埠就能連線,並且可以操作資料庫。

就拿本地來說:

1、cmd進入到E:\Program Files\MongoDB4.0\bin,輸入mongo開啟mongo shell
E:\Program Files\MongoDB4.0\bin>
mongo # 顯示資訊 MongoDB shell version v4.0.21 connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb Implicit session: session { "id" : UUID("8931512b-f690-437b-9c42-0261e7631d1e") } MongoDB server version: 4.0.21 Server has startup warnings: 2020-11-20T10:33:49.327+0800 I CONTROL [initandlisten]
2020-11-20T10:33:49.327+0800 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database. 2020-11-20T10:33:49.327+0800 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted. 2020-11-20T10:33:49.327+0800 I CONTROL [initandlisten] 2020-11-20T10:33:49.327+0800 I CONTROL [
initandlisten] ** WARNING: This server is bound to localhost. 2020-11-20T10:33:49.327+0800 I CONTROL [initandlisten] ** Remote systems will be unable to connect to this server. 2020-11-20T10:33:49.327+0800 I CONTROL [initandlisten] ** Start the server with --bind_ip <address> to specify which IP 2020-11-20T10:33:49.327+0800 I CONTROL [initandlisten] ** addresses it should serve responses from, or with --bind_ip_all to 2020-11-20T10:33:49.327+0800 I CONTROL [initandlisten] ** bind to all interfaces. If this behavior is desired, start the 2020-11-20T10:33:49.327+0800 I CONTROL [initandlisten] ** server with --bind_ip 127.0.0.1 to disable this warning. 2020-11-20T10:33:49.327+0800 I CONTROL [initandlisten] --- Enable MongoDB's free cloud-based monitoring service, which will then receive and display metrics about your deployment (disk utilization, CPU, operation statistics, etc). The monitoring data will be available on a MongoDB website with a unique URL accessible to you and anyone you share the URL with. MongoDB may use this information to make product improvements and to suggest MongoDB products and deployment options to you. To enable free monitoring, run the following command: db.enableFreeMonitoring() To permanently disable this reminder, run the following command: db.disableFreeMonitoring() ---

可以看到顯示出很多的warning資訊,比如服務繫結只有本地,需要開放,還有許可權控制等。

2、進入到shell中,輸入show dbs

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-VSEeBJOI-1611563165988)(mongodb訪問控制.assets/image-20201120132622213.png)]

直接就能看到所有資料集的資訊。

三、新增訪問控制

1、利用db.createUser()命令建立超級管理使用者,該使用者可以用來建立下級使用者,可以用作身份認證,也可以操作所有資料集。
db.createUser({
    "user" : "admin",
    "pwd" : 可以明文設定密碼
    "roles" : [ 
        {
            "role" : "root",
            "db" : "admin"
        }
    ]
})

具體其他的使用者級別可以自行查詢。建立完畢後可以使用show users檢視建立好的使用者。

2、使用者建立好之後需要開啟訪問控制(命令列開啟方式)

windows環境下可以先刪除當前的服務(例項還是存在磁碟中)。如何刪除呢。

再開一個cmd並且以管理員許可權進入,進去後如下:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-ShXHmTQj-1611563165991)(mongodb訪問控制.assets/image-20201120134551549.png)]

使用sc delete 服務名刪除服務,成功如下:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-ilodJb9s-1611563165993)(mongodb訪問控制.assets/image-20201120134727566.png)]

然後進入到mongodb安裝目錄下的bin目錄,如圖:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-HbH7nvZW-1611563166002)(mongodb訪問控制.assets/image-20201120134942624.png)]

注意,此時要去windows服務裡面將該服務徹底刪掉,cmd裡面刪除了,但是服務裡面還會掛著,雖然掛著也沒用。不然會影響服務重新安裝。

再次以開啟認證(–auth)的方式安裝服務:

E:\Program Files\MongoDB4.0\bin>mongod.exe --auth --dbpath "E:\Program Files\MongoDB4.0\data" --logpath "E:\Program Files\MongoDB4.0\log\mongod.log" --logappend --serviceName MongoDB --install

# 各種路徑根據自己的去更改

注:dbpath之類的後面路徑如果有空格,則路徑要加上雙引號,否則報錯。

安裝成功情況下是不會出現任何資訊,直接跳出下一個或輸入命令列。

windows下可以進入服務檢視服務是否啟動成功。然後便可以按照之前的方法連線mongodb,試著輸入show dbs,會發現什麼輸出都沒有,那是因為沒有許可權,這時可以使用db.auth("使用者名稱", "密碼")進行認證。

當然也可以在連線時使用mongo -u "user" -p "pwd"進行連線,然後show dbs就能看到資訊了。

3、除了命令列開啟方法,還有以配置檔案開啟(待補充)

四、建立管理使用者下的其他使用者

有了超級管理使用者,就可以分配資料庫了,可以限制新使用者只能讀、寫或讀寫特定資料庫,可以建立新的資料庫——use test,然後建立使用者只能讀寫該資料庫

> use test
> db.createUser({
	"user" : "testUser",
	"roles" : [
		{
			"role" : "readWrite",
			"db" : "test"
		}
	]
})

然後以該使用者連線mongodb例項,直接show dbs

在這裡插入圖片描述

可以發現只有test資料庫能看到。