03、MongoDB -- MongoDB 權限的設計

目錄

  • MongoDB 權限的設計
    • 演示前準備:啟動 mongodb 服務器 和 客戶端 :
      • 1、啟動單機模式的 mongodb 服務器
      • 2、啟動 mongodb 的客戶端
    • MongoDB 權限的設計
      • 1、MongoDB 的每個數據庫都可以保存用戶,不止admin數據庫可以保存用戶。
      • 2、保存用戶的數據庫和該用戶有權限操作的數據庫完全可以是不同的。
      • 3、當用戶登錄時,必須在保存該用戶的數據庫中才能登錄。
      • 4、該用戶登錄之后,能否操作哪個數據庫,才能看出來該用戶對哪些數據庫有操作權限。
      • 5、在MongoDB中創建一個數據庫之后,應該在該數據庫中創建自己存儲的用戶,否則就無法在初始連接時僅通過該數據庫建立連接

MongoDB 權限的設計

演示前準備:啟動 mongodb 服務器 和 客戶端 :

本次演示,只需要啟動一個 單機模式的 mongodb 服務器 和 一個 mongodb 的客戶端,

1、啟動單機模式的 mongodb 服務器


打開命令行窗口,執行如下命令即可啟動 MongoDB 服務器了

mongod.exe --config "E:\install\mongodb\mongodb-4.2.25\mongod.conf"

就是只啟動一個 mongodb 的服務器

在這里插入圖片描述


2、啟動 mongodb 的客戶端

啟動 mongodb 的客戶端,指定要連接的 mongodb 服務器的端口號:

mongo mongodb://192.168.0.107:27017

即可啟動 mongodb 的客戶端

啟動成功,如圖:

在這里插入圖片描述

之所以只需要輸入 mongo 就能啟動 mongodb 的客戶端,是因為我之前把 mongodb 的 bin 目錄添加到 path 環境變量里面 。


MongoDB 權限的設計


1、MongoDB 的每個數據庫都可以保存用戶,不止admin數據庫可以保存用戶。

這一點和傳統數據庫只能使用系統數據庫來保存用戶是截然不同的。


2、保存用戶的數據庫和該用戶有權限操作的數據庫完全可以是不同的。

比如 ljh 這個用戶保存在 【admin】這個數據庫里面,但是創建 ljh 這個用戶的時候,只給這個用戶操作【springboot】這個數據庫的權限。
所以雖然 ljh 這個用戶是在【admin】 這個數據庫創建的,當時確沒有操作【admin】數據庫的權限。


3、當用戶登錄時,必須在保存該用戶的數據庫中才能登錄。

比如我登錄到 admin 這個數據庫

mongo mongodb://192.168.0.107:27017/admin -u admin -p 123456

然后創建一個數據【hahaha】
在這里插入圖片描述

在【hahaha】數據庫添加一個用戶叫 AAA,然后這個用戶對這個數據庫有讀寫的權限
userAdmin:允許對指定數據庫執行用戶管理的權限,比如創建、刪除和修改用戶

db.createUser({ user: "AAA",pwd: "123456",roles: [{ role: "readWrite", db: "hahaha" },{ role: "userAdmin", db: "hahaha" }]});

重點來了:這個用戶是創建在【hahaha】這個數據庫里面的。

在這里插入圖片描述

演示用戶登錄時,先演示登錄到保存該用戶的數據中

mongo mongodb://192.168.0.107:27017/hahaha -u AAA -p 123456

如圖,登錄成功,還能執行查看用戶的操作,說明登錄成功沒問題。
因為 【AAA】這個用戶是保存在【hahaha】這個數據庫中的,說明當用戶登錄時,必須在保存該用戶的數據庫中才能登錄。
在這里插入圖片描述


AAA 用戶是保存在【hahaha】數據庫的,現在看能不能登錄到 admin 數據庫

mongo mongodb://192.168.0.107:27017/admin -u AAA -p 123456

如圖:登錄失敗,這就說明了當用戶登錄時,必須在保存該用戶的數據庫中才能登錄。

在這里插入圖片描述

【注意】此時的【hahaha】數據庫只是添加了 【AAA】這個用戶,還不算是真正創建出這個數據庫來,
所以給這個數據庫添加一條數據,【hahaha】數據庫才算是真正創建出來。

在這里插入圖片描述


4、該用戶登錄之后,能否操作哪個數據庫,才能看出來該用戶對哪些數據庫有操作權限。

【切記:】 用戶保存在哪個數據庫中,用戶初始登錄時就必須連接該數據庫——只有連接該數據庫才能驗證用戶。

這個在第3點也說了,就是 【AAA】這個用戶,是保存在【hahaha】這個數據庫里面的,所以在初始登錄的時候,【AAA】這個用戶只有指定是登錄【hahaha】這個數據庫,才能登錄成功,授權成功。


這里再演示一遍:

登錄mongodb時,【admin -u admin -p 123456】這個指定【登錄的數據庫、賬號和密碼】,就是初始登錄時連接的數據

mongo mongodb://192.168.0.107:27017/admin -u admin -p 123456

1、登錄的是admin用戶,登錄的數據庫是保存admin用戶的【admin】數據庫,所以admin這個用戶可以正常使用命令查看數據庫

在這里插入圖片描述


2、登錄的是 AAA 用戶,AAA用戶是保存在【hahaha】數據庫里面的,但是此時的初始登錄,連接的是admin 數據庫

mongo mongodb://192.168.0.107:27017/admin -u AAA -p 123456

如圖:AAA用戶在初始登錄時,驗證授權沒通過,因為用戶保存在哪個數據庫中,用戶初始登錄時就必須連接該數據庫——只有連接該數據庫才能驗證用戶
在這里插入圖片描述


3、登錄的是 AAA 用戶,AAA用戶是保存在【hahaha】數據庫里面的,此時的初始登錄,連接的就是【hahaha】數據庫

mongo mongodb://192.168.0.107:27017/hahaha -u AAA -p 123456

如圖:AAA用戶登錄之后,能操作到【hahaha】數據庫這個數據庫,報名這個用戶有操作這個數據庫的權限。

但是如圖,它只能查看到 【hahaha】這個數據庫,也表明它只對這個數據庫有操作權限。

在這里插入圖片描述

注意:因為 AAA 用戶只有操作 【hahaha】 數據庫的權限,所以查看命令也只能查看到自己有權限操作的數據庫。
admin 之所以能查看所有數據庫,是因為在之前設置時,把它設置成管理員。


5、在MongoDB中創建一個數據庫之后,應該在該數據庫中創建自己存儲的用戶,否則就無法在初始連接時僅通過該數據庫建立連接

如圖:根據3、4點的解釋,來說明:登錄的是 AAA 用戶,AAA用戶是保存在【hahaha】數據庫里面的,但是此時的初始登錄,連接的是admin 數據庫,所以就無法在初始連接時與該數據庫建立連接。

在這里插入圖片描述


演示:

說明:如果你希望程序可以一開始就能連接你所創建的數據庫,

  1. 你應該在該數據庫中創建自己的用戶。

  2. 且要讓該用戶有操作本數據庫的權限——否則你只能登錄,登錄之后根本就無法訪問該數據庫。

    【通常:】 通常保存用戶的數據庫,跟用戶有權限操作的數據庫還是應該相同,這樣才更符合邏輯。

1、創建一個springboot的數據庫

在這里插入圖片描述

2、在springboot中創建一個用戶,且要讓該用戶有操作本數據庫的權限
(這個用戶只有讀寫的權限)

賬號:LJHCCC
密碼:123456

db.createUser({ user: "LJHCCC",pwd: "123456",roles: [{ role: "readWrite", db: "springboot" },{ role: "userAdmin", db: "springboot" }]});

在這里插入圖片描述

在啟動一個命令行窗口,登錄這個數據庫

mongo mongodb://192.168.0.107:27017/springboot -u LJHCCC -p 123456

如圖:在MongoDB中創建一個數據庫(springboot)之后,在該數據庫中創建自己存儲的用戶(LJHCCC),就可以在初始連接時通過該數據庫建立連接

因為 LJHCCC 這個用戶只能操作 springboot 這個數據庫,
所以查看有哪些數據庫時,也只能查到有他操作權限的那個數據庫

在這里插入圖片描述

在這里插入圖片描述







演示創建一個數據庫,然后添加一個用戶,這個數據庫還是沒有被真正創建出來,只有往該數據庫插入數據,才能算是正在創建出該數據庫。

賬號:LJHAAA
密碼:123456

db.createUser({ user: "LJHAAA",pwd: "123456",roles: [{ role: "readWrite", db: "local" },{ role: "userAdmin", db: "local" },{ role: "readWrite", db: "springboot" },{ role: "userAdmin", db: "springboot" }]});

在這里插入圖片描述

在這里插入圖片描述

添加一條數據的命令:db.test.insert({“aaa”:1})

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/714537.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/714537.shtml
英文地址,請注明出處:http://en.pswp.cn/news/714537.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux 學習筆記(8)

八、 啟動引導 1 、 Linux 的啟動流程 1) BIOS 自檢 2) 啟動 GRUB/LILO 3) 運行 Linux kernel 并檢測硬件 4) 掛載根文件系統 5) 運行 Linux 系統的第一個進程 init( 其 PID 永遠為 1 ,是所有其它進程的父進程 ) 6) init 讀取系統引導配置文件…

GD25Q32驅動

GD25Q32是一款基于SPI的Flash芯片,容量為32/84M bytes。它的引腳如下: 該芯片支持多種SPI操作方式,包括:Standard SPI(標準SPI)、Dual SPI(雙線 SPI)和Quad SPI(四線 SPI) 。有關SPI的介紹可以參考: SPI通信原理-CSDN…

flutter 文字一行顯示,超出換行

因為app有多語言,中文和其他語言長度不一致,可能導致英文會很長。 中文樣式 英文樣式 代碼 Row(mainAxisAlignment: MainAxisAlignment.end,crossAxisAlignment: CrossAxisAlignment.end,children: [Visibility(visible: controller.info.fee ! null,ch…

探尋2024年國內熱門低代碼平臺排行!| 功能特點一覽

低代碼開發是一項革命性的技術,主要目的是盡量避免程序研發的復雜性,讓外行開發者也能加入到應用程序的搭建中。低代碼平臺的核心概念和構成部分通常包括用戶界面和拖拽設計、預構件和模塊、自動化工作內容與數據庫集成和擴展應用,應用低代碼…

web前端css基本內容

web前端css 當我們用html的語法給內容規劃布局樣式時,可能會出現許多個相似的內容需要運用同一種樣式,復制粘貼太麻煩而且如果后期要改動的話比如把許多個地方從紅色改成藍色,就需要一個一個改了,這時候就需要引入css來操作了 把…

java-使用jacob刪除指定文件夾的郵件

總結見文章最后,具體代碼如下: ActiveXComponent outlook = new ActiveXComponent("Outlook.Application");Dispatch myNamespace = Dispatch.call(outlook, "GetNamespace", "MAPI").toDispatch();//指定搜索特定的文件Dispatch allFolders =…

我耀學IT—day05-Bootstrap下拉菜單與導航

一、Bootstrap5 下拉菜單 下拉菜單是可切換的&#xff0c;是以列表格式顯示鏈接的上下文菜單。 例&#xff1a; <div class"dropdown"><button type"button" class"btn btn-primary dropdown-toggle" data-bs-toggle"dropdown&…

U盤彈出提示“該設備正在使用中”:原因與解決方案

在日常使用U盤時&#xff0c;我們可能會遇到一個問題&#xff1a;當嘗試安全彈出U盤時&#xff0c;系統提示“該設備正在使用中”。這種情況可能會讓用戶感到困惑&#xff0c;擔心數據是否安全或是否會導致U盤損壞。本文旨在探討這一現象背后的原因&#xff0c;并提供相應的解決…

【前端素材】推薦優質后臺管理系統網頁Stisla平臺模板(附源碼)

一、需求分析 1、系統定義 后臺管理系統是一種用于管理和控制網站、應用程序或系統的管理界面。它通常被設計用來讓網站或應用程序的管理員或運營人員管理內容、用戶、數據以及其他相關功能。后臺管理系統是一種用于管理網站、應用程序或系統的工具&#xff0c;通常由管理員使…

鉛冶煉作業VR虛擬現實互動培訓平臺降低實操風險

在鋼鐵工業中&#xff0c;焦爐作業是一個關鍵的環節&#xff0c;也是一項技術要求高、操作復雜的任務。傳統焦爐作業的培訓通常需要在實際的焦爐上進行&#xff0c;這不僅對學員的身體素質和心理素質提出了較高的要求&#xff0c;而且也存在一定的安全風險。基于VR虛擬現實制作…

React富文本編輯器開發(三)

現在我們的編輯器顯示的內容很單一&#xff0c;這自然不是我們的目標&#xff0c;讓呈現的內容多元化是我們的追求。這就需要讓編輯器能夠接收多元素的定義。從初始數據的定義我們可以推斷數據的格式遠不止一種&#xff0c;那么其它類型的數據如何定義及呈現的呢&#xff0c;我…

基于單片機的AGV機器人設計的設計要求

基于單片機的AGV機器人設計的設計要求 1. 引言 本設計要求旨在設計一種基于單片機的自動導航車&#xff08;AGV&#xff09;機器人。AGV機器人可以在工廠、倉庫等場景中進行自動導航、物料搬運等任務。本設計要求包括機器人的硬件設計要求和軟件設計要求兩個方面。 2. 硬件設…

(Aliyun AI ACP 02)阿里云人工智能產品體系

文章目錄 阿里云人工智能工程師ACP認證考試知識點輔助閱讀&#xff08;Aliyun AI ACP 02&#xff09;阿里云人工智能產品體系引言阿里云AI產品總體架構基礎設施層&#xff1a;平臺層&#xff1a;算法與模型層&#xff1a;應用層&#xff1a;組成部分詳述&#xff1a;PAI產品家族…

手把手教你免費用Flashduty做消息通知

為什么需要消息通知&#xff1f; 如果有重要的情況發生&#xff0c;希望能通過各種媒介通知我們。可以舉幾個例子&#xff1a; 家里燃氣費沒有了&#xff0c;希望能有短信或者app通知api頻繁500報錯&#xff0c;希望及時感知&#xff0c;及時修復公司網站是https自簽名證書&a…

白話大模型① :AI分析能做什么?在實際落地中會碰到什么問題?

白話大模型系列共六篇文章&#xff0c;將通俗易懂的解讀大模型相關的專業術語。本文為第一篇&#xff1a;AI分析能做什么&#xff1f;在實際落地中會碰到什么問題&#xff1f; 作者&#xff1a;星環科技 人工智能產品部 我們使用一個簡單的應用實例來解析人工智能分析都在做什…

若依框架使用mars3d的環境配置,地球構建

因項目需要&#xff0c;原本使用過的cesium依賴&#xff0c;現在想使用火星科技mars3d的一些功能&#xff0c;所以需要引入mars3d依賴&#xff0c;整個過程非常的坎坷&#xff0c;以至于我都不知道到底是哪些部分是標準的。。。先把我認為對的記錄一下&#xff1a; 1.vue.conf…

[滲透教程]-200-網絡安全基本概念

文章目錄 1.0專業術語1.1資產1.2網絡安全 (cyber security)1.3 網絡空間 (cyberspace)1.4安全的屬性1.5 安全策略1.6 威脅模型1.7 威脅模型1.8 DREAD模型1.9 OCTAVE模型1.10 國內的安全2.安全策略(Security Policy)3.安全機制(Security Mechanism)4. 安全防護模型

sqlserver保存微信Emoji表情

首先將數據庫字段&#xff0c;設置類型為 nvarchar(200)一個emoji表情&#xff0c;占4字節就可以了&#xff0c;web前端展示不用改任何東西&#xff0c;直接提交數據保存&#xff1b;回顯也會沒有問題&#xff0c;C#代碼不用做任何處理&#xff1b; 不哭不鬧要睡覺&#x1f31…

【機器學習300問】24、模型評估的常見方法有哪些?

一、為什么要對模型進行評估&#xff1f; 對機器學習和神經網絡的模型進行評估是至關重要的&#xff0c;原因如下&#xff1a; 得知模型的泛化能力 模型評估的主要目的是了解模型在未見過的數據上的表現&#xff0c;即其泛化能力。這是因為模型的性能在訓練數據上可能會過擬合…

構建大語言模型的四個主要階段

大規模語言模型的發展歷程雖然只有短短不到五年的時間&#xff0c;但是發展速度相當驚人&#xff0c;國內外有超過百種大模型相繼發布。中國人民大學趙鑫教授團隊在文獻按照時間線給出 2019 年至 2023 年比較有影響力并且模型參數量超過 100 億的大規模語言模型。大規模語言模型…