首頁 > 軟體

MongoDB資料庫許可權管理詳解

2022-07-07 14:05:03

前幾天網友問MongoDB資料庫許可權方面的問題。當時大致的瞭解了一下,這周仔細瞭解了一下。對於一個資料庫不可能隨意的存取,肯定要有寫存取限制。

在瞭解這個之前首先熟悉下shell使用者端。開啟shell使用者端的方法:mongo.關閉資料庫引擎的話可以使用db.shutdownServer().

一、shell命令

MongoDB的shell提供了一些命令,可以從shell提示符執行它們。

  • help<option>:用於為MongoDB的shell命令顯示語法幫助。option引數允許指定你想得到幫助的特定領域。
  • use<database>:更改當前database控制程式碼。資料庫操作將在當前資料庫控制程式碼上處理。
  • show<option>:根據option引數顯示清單.
  • dbs:顯示資料庫清單。
  • collections:顯示當前資料庫的集合清單。
  • profile:顯示時間超過1毫秒的最新的system.profile條目。
  • log[name]:顯示登入記憶的最後一段。如果沒指定name,那麼使用global。
  • exit:退出資料庫。

二、shell方法

MongoDB中的shell提供了許多用於執行管理功能的方法。

  • load(script):在shell內部載入和執行Javascript檔案。要對資料庫指令碼操作,使用它是一種最好的方式。
  • UUID(string):把一個32位元組的十六進位制字串轉換成BSON的UUID。
  • db.auth(username,password):在當前資料庫進行身份認證。

三、使用shell編寫指令碼

命令、方法和MongoDB shell的資料結構都是基於互動式Javascript的。管理MongoDB的一個很好的方法是建立可以執行多次的指令碼,或者可以隨時在特定的時間執行的指令碼,如在升級時執行的指令碼。指令碼檔案可以包含任意數量的MongoDB命令,使用javascript程式碼,如條件語句和迴圈。有兩種執行MongoDB shell指令碼的方式。

1.使用--eval

該--eval引數接受一個Javascript字串或Javascript檔案並啟動MongoDB的shell,並立即執行Javascript。

2.使用load(script_path)方法執行MongoDB指令碼。

四、管理使用者賬號

1.建立使用者賬號

不管是建立使用者管理員賬號還是資料庫管理員賬號都是用addUser()方法新增使用者賬戶,MongoDB 3.0之後用createUser()代替,再用adduser()會提示adduser()不是function,下面的截圖能看到提示,該方法接受一個document物件,允許指定該使用者的使用者名稱、角色和密碼。下面是document物件可以指定的欄位:

  • user string 指定一個唯一的使用者名稱
  • roles array 指定使用者角色的陣列。MongoDB提供了大量可以分配給使用者的角色。角色不同對應的許可權也不一樣,這篇主要還是在角色上
  • pwd hashorstring (可選)指定使用者的密碼。在建立使用者時,這可能是一個雜湊值或字串,然而它以雜湊值被儲存在資料庫中。
  • userSource <database> (可選)代替pwd欄位,指向具有相同的使用者定義的另一個資料庫。pwd或那個資料庫的userSource然後被用作該使用者的憑據。userSource欄位和pwd欄位是相互排斥的,一個檔案不能同時包含兩者。
  • otherDBRoles {<database>:[array],<database>:[array]} :(可選) 允許指定這個使用者在其他資料庫中的擁有的角色。它的格式是一個檔案,該檔案用資料庫名稱作為鍵,包括那個資料庫適用於該使用者的角色的陣列。

2.角色

使用者和角色是多對多的關係,一個使用者可以對應多個角色,一個角色可以擁有多個使用者。使用者角色的不同對應的許可權也是不一樣的。下面是一些分配給使用者的常見的角色。

  • read 允許使用者從資料庫的任何集合中讀取資料
  • readAnyDatabase 同read,但針對所有資料庫
  • readwrite提供read的所有功能,並允許使用者寫資料庫中的任何集合,包括插入、刪除和更新檔案,以及建立、重新命名和刪除集合
  • readWriteAnyDatabase 同readWrite,只是針對所有資料庫
  • dbAdmin 允許使用者讀取和寫入資料庫,以及清理、修改、壓縮、得到統計概要,並進行驗證
  • dbAdminAnyDatabase 同dbadmin,但針對所有資料庫
  • clusterAdmin 允許使用者對MongoDB執行一般的管理,包括連線、叢集、複製、列出資料庫、建立資料庫和刪除資料庫
  • userAdmin 允許使用者建立和修改資料庫的使用者賬號
  • userAdminAnyDatabase 同userAdmin,但針對所有的資料庫

3.刪除使用者賬號

可以使用removeUser(<username>)方法刪除MongoDB的使用者。需要先切換到該使用者所在的資料庫。在MongoDB 3.0後使用dropUser(<username>),下面設定時截圖就能看到提示。

五、設定存取控制

MongoDB提供在資料庫級別上的驗證和授權,意味著使用者存在於單個資料庫的上下文中。為了實現基本的身份驗證,MongoDB把使用者憑據儲存在每個資料中名為system.users的集合中。

當還沒在admin資料庫中定義使用者時,MongoDB允許在本地主機上的連線有對資料庫的完全管理存取。因此,設定新的MongoDB範例的第一步是建立使用者管理員和資料庫管理員賬戶。使用者管理員具有在admin和其他資料庫中建立使用者賬戶的功能。還需要建立一個可以當作超級使用者使用的資料庫管理員賬戶,用來管理資料庫、叢集、複製和MongoDB的其他方面。

1.建立使用者管理員

使用者管理員賬號應只有建立使用者的許可權,而沒有管理資料庫或其他管理功能。使資料庫管理和使用者賬戶管理完全分離。使用者管理賬戶應該以userAdminAnyDatabase作為唯一的角色來建立。

上面截圖可以看到使用使用者管理員賬戶來查詢collection是報錯,這是因為使用者管理員賬戶只是用來管理使用者的,不能管理資料庫。

2.開啟身份驗證

使用者管理員賬戶已經建立需要使用--auth引數重啟MongoDB資料庫

3.建立資料庫管理員

上面截圖中建立了一個admin資料庫的資料庫管理員,使用資料庫管理員顯示collections是可以顯示的,而使用使用者管理員顯示時報錯。

到此這篇關於MongoDB資料庫許可權管理的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com