介紹使用 MongodDB Enabled Authentication 時的設定方式。
前言
之前有提到,MongoDB 預設是未啟用安全驗證模式,當然我們為了確保資料庫的安全性與使用者的控管,在實際運行時就必須要使用安全驗證模式,本篇就來介紹一下如何啟用安全驗證模式。
角色
首先,先釐清在 MongoDB 中,各種不同的角色有什麼區別,基本的角色種類如下。
資料庫使用者角色
read : 讀取特定資料庫的權限,例如 find() 等方法。
readWrite : 讀取與寫入特定資料庫的權限,例如 insert(), remove() 及 update() 等方法。
資料庫管理角色
dbAdmin : 提供特定資料庫管理權限,例如 create(), createCollection() 及 drop() 等方法,另外只有此角色可讀取 system.profile 集合。
userAdmin : 提供特定資料庫可讀寫 system.users 集合權限。
管理角色
clusterAdmin : 提供多個資料庫管理權限,適用於管理資料庫,無法訪問本地或設定資料庫。
任意資料庫管理角色
readAnyDatabase : 同樣只提供讀取功能,但可以訪問 MongoDB 中任意的資料庫。
readWriteAnyDatabase : 同樣只提供讀取與寫入功能,但可以訪問 MongoDB 中任意資料庫。
userAdminAnyDatabase : 權限同等於 userAdmin ,但可以訪問 MongoDB 中任意資料庫。
dbAdminAnyDatabse : 權限同等於 dbAdmin ,但可以訪問 MongoDB 中任意的資料庫。
如需要詳細的權限說明,可參考 User Privilege Roles in MongoDB 文件。
啟用 MongoDB 安全驗證模式
在將 MongoDB 以安全驗證模式啟動之前,必須要先加入資料庫管理員帳號,這需要注意的是 MongoDB 的資料庫帳號於每個不同資料庫都各自獨立,也就意味著在 Database1 中建立的帳號在 Database2 中並不存在,且如建立同名帳號權限也可以是不一樣的 。而在啟動安全驗證之前,必須要先在 admin 資料庫建立一個管理帳號 ( admin 資料庫名大小寫必須一致),如未在 admin 先建立管理帳戶,之後在使用 --auth 啟動 MongoDB 時就會發生 ERROR 1067 服務啟動失敗問題。
連線至 MongoDB 切換到 admin 資料庫,指令如下。
切換完成後接著輸入 addUser 來建立總管理帳號,指令如下。
完成後返回以下內容即完成新增。
"user" : "arvin",
"pwd" : "fa7eafa2b8492e286a744b778ec19aa7",
"roles" : [ "userAdminAnyDatabase","readWriteAnyDatabase", ],
"_id" : ObjectId("530595cddd0ae160b82444cb")
}
接下來需要調整啟動 MongoDB 時使用安全驗證模式,在啟動時增加一個參數 --auth 即可,如下指令。
如果是使用設定檔的方式,只需要在設定檔中增加 auth = true 即可,如下。
logpath = D:\MongoDB\log\mongo.log
logappend = true
auth = true
到此可以測試看看安全驗證是否設定成功,連接入 MongoDB shell ,輸入 show collections 指令會發現跳出無權限訊息,如下圖。
接著進行登入動作,輸入以下指令,看到回傳 1 則表示登入成功。
登入後再嘗試輸入 show collections 查看所有集合就能夠讀取了,如下圖。
如果針對特定資料庫設定使用者帳號,這時就可以透過這個總管理帳號至不同資料庫使用 addUser() 指令新增,例如需要在 test 資料庫加入一個新使用者帳號並只給予 readWrite 權限。
程式碼使用安全驗證連線 MongoDB
在 MongoDB 設定好安全驗證後,原本程式碼的部分就需要調整成安全驗證的連線方式,有兩種方式可以調整,如下。
1.修改連線字串
範例
2.建立安全憑證物件
// 建立 Server 位置物件
var serverAddress = new MongoServerAddress("localhost", 27017);
// 建立安全證書物件
var credential = MongoCredential.CreateMongoCRCredential("test", "testdbo", "password");
// 設定 Client 物件
var clientSettings = new MongoClientSettings
{
Server = serverAddress,
Credentials = new[] { credential }
};
// 產生 MongoClient 物件
_mongoClient = new MongoClient(clientSettings);
// 取得 MongoServer 物件
_mongoServer = _mongoClient.GetServer();
// 取得 MongoDatabase 物件
_mongoDatabase = _mongoServer.GetDatabase("test");
// 取得 Collection
_mongoCollection = _mongoDatabase.GetCollection<Product>("Products");
以上就是針對於 MongoDB 如使用安全驗證之後需要進行的設定與調整介紹。
參考資料
Authenticate to MongoDB with the C# Driver
以上文章敘述如有錯誤及觀念不正確,請不吝嗇指教
如有侵權內容也請您與我反應~謝謝您 :)