02、MongoDB -- MongoDB 的安全配置(創建用戶、設置用戶權限、啟動安全控制、操作數據庫命令演示、mongodb 的幫助系統介紹)

目錄

  • MongoDB 的安全配置
    • 演示前準備:啟動 mongodb 服務器 和 客戶端 :
      • 1、啟動單機模式的 mongodb 服務器
      • 2、啟動 mongodb 的客戶端
    • MongoDB 的安全配置
      • 啟動演示用到的 mongodb 服務器 和 客戶端
        • 啟動單機模式的 mongodb 服務器:
        • 啟動 mongodb 的客戶端
      • MongoDB 操作數據庫命令
      • MongoDB 的幫助系統
      • 在 客戶端 創建用戶:
        • 1、切換到 admin 數據庫
        • 2、創建管理員 admin
        • 3、創建超級管理員 root
        • 4、再創建兩個普通的用戶 LJHAAA 和 LJHBBB
        • 5、刪除用戶演示
      • MongoDB 所支持的權限
      • 啟動 MongoDB 安全控制
        • 1、修改 mongod.conf 配置文件
        • 2、重啟 mongodb 客戶端
        • 3、用戶登錄 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 的安全配置

在默認情況下,MongoDB 并不需要安全認證即可直接進入,就像前面配置副本集時,直接使用 mongo.exe(客戶端)即可連接 mongodb 服務器。

這樣明顯不安全,接下來給 mongodb 搞個安全配置–創建用戶及權限名、啟用Mongodb安全控制、mongodb 權限的設計


啟動演示用到的 mongodb 服務器 和 客戶端

接下來的演示:啟動單機模式的mongodb服務器和客戶端服務器就可以了


啟動單機模式的 mongodb 服務器:
mongod.exe --config "E:\install\mongodb\mongodb-4.2.25\mongod.conf"

在這里插入圖片描述


啟動 mongodb 的客戶端

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

mongo mongodb://192.168.0.107:27017

在這里插入圖片描述

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



MongoDB 操作數據庫命令

在介紹配置用戶之前,先介紹 MongoDB 操作數據庫的命令:

show databases:查看當前節點的所有數據庫(和MySQL相同)

show users: 查看當前數據庫中的用戶

db:查看當前連接的數據庫。
有可能當前所在的數據庫其實根本不存在。

use 數據庫名:切換 或 創建 數據庫(和MySQL相似)。

對 mongodb 來說,如果切換的數據庫不存在,該命令就會自動創建數據庫,這意味著你永遠不會切換失敗;

但是,只有當新數據庫中插入文檔之后才會真正創建該數據庫。

從此處可以看到,在MongoDB,你通常并不需要顯式創建數據庫。

db.dropDatabase():刪除數據庫。無需指定數據庫名,該命令總是刪除當前連接的數據庫。

db.dropUser(“用戶名”): 刪除指定用戶


上面的命令大概就是這個邏輯:

在這里插入圖片描述


MongoDB 的幫助系統

什么是MongoDB的幫助系統?

在這里插入圖片描述

除了show、use 等特殊命令之外,其他命令要么是 rs.* 開頭的,要么是 db.* 開頭的,

這是因為MongoDB命令系統采用了“面向對象”的設計方式,它認為:

1、所有與副本集有關的命令都相當于rs對象的方法,

2、所有與數據庫有關的命令都相當于db對象的方法。

這樣設計的好處就是可以非常方便使用這些命令的幫助系統。

比如想知道db對象包含哪些方法(命令),只要輸入db.help()。


如圖:這些 rs.help() 、 db.help() 這種命令, 可以在命令行窗口查看有哪些命令方法可用的【命令行幫助】,就是 mongodb 的幫助系統

如圖:輸入 db.help() :查看當前連接的數據庫包含哪些方法(命令)

上面有關 db 開頭的命令,在如下圖片都可以找到。

在這里插入圖片描述

輸入 rs.help() 查看副本集有哪些命令可用。
在這里插入圖片描述


一些解釋:

rs 對象:代表副本集,

副本集是一種用于提供數據冗余和高可用性的數據庫部署方式。
副本集包含多個MongoDB實例(節點),其中一個是主節點(primary),其余的是從節點(secondary)。
副本集為應用程序提供了數據冗余和故障恢復能力,同時還允許讀操作(查詢)可以在多個節點上進行。

db 對象:代表當前所連接的數據庫


如之前測試過的這些命令:

這些命令是操作副本集的,所以是 rs 開頭的:

rs.initiate(rs_conf):在 mongodb 客戶端初始化副本集

rs.conf() :查看副本集的配置。

rs.status() :查看副本集的狀態,可看到副本集內誰是主節點,誰是副節點,誰是仲裁節點等詳細信息。

rs.slaveOk(boolean) :該命令設置副節點上是否可查看數據

這些命令是操作 db 對象的,所以是 db 開頭的:

db.isMaster() :查看當前連接是否為主節點。


在 客戶端 創建用戶:

現在要在 admin 數據庫里面添加兩個用戶:超級管理員 root 和 管理員 admin
賬號:root;密碼:123456
賬號:admin:密碼:123456


通過 MongoDB 客戶端執行如下命令:

1、切換到 admin 數據庫

這個命令,表示切換到 admin 這個數據庫,這樣的話,后面創建的用戶將會保存在 admin 數據庫中

use admin  

在這里插入圖片描述


2、創建管理員 admin

這條命令就是創建一個 admin 用戶,且該用戶保存 admin 數據庫中。基本上它是一個 管理員。
( 數據庫叫 admin ,我這里創建一個叫 admin 的用戶,并不會有任何沖突,創建的用戶名按個人喜好即可)

db.createUser({ user: "admin",pwd: "123456",roles: [{ role: "readWriteAnyDatabase", db: "admin" },{ role: "userAdminAnyDatabase", db: "admin" },{ role: "dbAdminAnyDatabase", db: "admin" }]});

上面命令的解釋:

roles 是個數組,里面的 role 就是具體的權限。

如 :role: readWriteAnyDatabase 表示有讀寫任意數據庫的權限,
db: “admin” 表示: 【role這個讀寫任意數據庫的權限】只對 【admin】 這個數據庫生效

admin 這個數據庫,是 mongodb 的一個管理級的一個特殊的數據庫,是有特殊意義的,所以【readWriteAnyDatabase 】 這個權限在名義上只對【admin】這個數據庫起作用,
但是實際上,【admin 】數據庫里面擁有【readWriteAnyDatabase 】這個權限的 【admin】 這個用戶,對任意數據庫都具有讀寫的功能,不會只局限在【admin】 這個數據里面。

注意點:也只有【admin】這個數據庫,才能有【readWriteAnyDatabase 】這個操作任意數據庫的權限,如果是我自己創建的一個數據庫,是無法為用戶設置【readWriteAnyDatabase 】這種類型的權限的,會報錯該數據庫沒有這個權限的用戶。

在這里插入圖片描述


3、創建超級管理員 root

這條命令就是創建一個 root 用戶,且該用戶保存 admin 數據庫中。基本上它是一個 超級管理員。
(root 這個權限也只能放在 admin 這種特殊的數據庫里面才能生效)
(root 是最高權限,可以做任何事情)

db.createUser({ user: "root",pwd: "123456",roles: [{ role: "root", db: "admin" }]});

在這里插入圖片描述

4、再創建兩個普通的用戶 LJHAAA 和 LJHBBB

賬號: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" }]});

在這里插入圖片描述


賬號:LJHBBB
密碼:123456

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

在這里插入圖片描述


5、刪除用戶演示

再添加 LJHCCC 這個用戶,然后演示刪除。

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

添加后可以輸入:show users 查看有哪些用戶

可以看到 LJHCCC 這個用戶已經創建成功

在這里插入圖片描述


db.dropUser(“LJHCCC”): 刪除指定用戶

true 表示刪除 LJHCCC 這個用戶成功,再用 show users 命令查看已經沒有這個用戶存在了

在這里插入圖片描述


MongoDB 所支持的權限

read:允許讀取指定數據庫中數據的權限。

readWrite:允許讀、寫指定數據庫中數據的權限。

dbAdmin:允許對指定數據庫中執行管理函數的權限,如索引創建、刪除,查看統計或訪問 system.profile。

userAdmin:允許對指定數據庫執行用戶管理的權限,比如創建、刪除和修改用戶。

clusterAdmin:只對admin數據庫可用,授予用戶所有分片和副本集相關函數的管理權限。表明分配該權限時,后面的db屬性值只能是admin。

readAnyDatabase:只對admin數據庫可用,授予用戶對所有數據庫的read權限。

readWriteAnyDatabase:只對admin數據庫可用,授予用戶對所有數據庫的readWrite權限。

userAdminAnyDatabase:只對admin數據庫可用,授予用戶對所有數據庫的userAdmin權限。

dbAdminAnyDatabase:只對admin數據庫可用,授予用戶對所有數據庫的dbAdmin權限。

root:只對admin數據庫可用。超級賬號,超級權限。


啟動 MongoDB 安全控制


1、修改 mongod.conf 配置文件

先停止 mongodb 的客戶端,然后修改 mongod.conf 文件,

在該文件后面增加如下配置:

# 啟用安全控制
security:authorization: enabled

在這里插入圖片描述

再次啟動 mongodb 的客戶端,這樣 MongoDB 的 用戶和安全控制 都配置完成了。


2、重啟 mongodb 客戶端

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

mongo mongodb://192.168.0.107:27017

在這里插入圖片描述

簡而言之:就是先修改配置文件:增加 security 的設置;然后重啟客戶端即可。


3、用戶登錄 mongodb 演示

【切記】: 當你登錄 MongoDB 時,你必須要先進入保存了登錄用戶的數據庫。
(就是我們上面創建的用戶都是保存在 admin 這個數據庫里面的,所以需要先進去到 admin 這個數據庫,然后再進行用戶登錄驗證)

如圖:剛登錄 mongodb 時,連接的數據庫是test,需要切換到 admin 數據庫,才能登錄成功,因為創建的用戶都是保存在 admin 數據庫的。

在這里插入圖片描述




好奇為什么這個 mongodb 服務器不用重啟,而只是 客戶端 需要重啟。

在這里插入圖片描述




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

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

相關文章

【數據結構】19 平衡二叉樹

定義 平衡二叉樹又稱為AVL樹,是具有以下性質的非空搜索樹: 任一結點的左、右子樹均為AVL樹。根節點的左、右子樹高度差的絕對值不超過1. 對于二叉樹的任一結點T,其平衡因子(BF)定義為BF(T) h L ? h R h_L- h_R hL…

acwing算法提高之搜索--雙向廣搜BFS與A星算法

目錄 1 專題說明2 訓練 1 專題說明 本專題用來記錄使用雙向廣搜BFS和A星算法求解的題目。 2 訓練 題目1&#xff1a;190字串變換 考點&#xff1a;從起點開始搜&#xff0c;從終點開始搜&#xff0c;即雙向廣搜。 C代碼如下&#xff0c; #include <iostream> #incl…

攻防世界-get_post

題目信息 相關知識 -G&#xff1a;表示GET請求&#xff0c;缺省POST -d參數用于發送 POST 請求的數據體 使用-d參數以后&#xff0c;HTTP 請求會自動加上標頭Content-Type : application/x-www-form-urlencoded。并且會自動將請求轉為 POST 方法&#xff0c;因此可以省略-X PO…

使用GPTQ進行4位LLM量化

使用GPTQ進行4位LLM量化 最佳腦量化GPTQ算法步驟1:任意順序洞察步驟2:延遲批量更新第三步:喬爾斯基重塑 用AutoGPTQ量化LLM結論References 權重量化的最新進展使我們能夠在消費級硬件上運行大量大型語言模型&#xff0c;例如在RTX 3090 GPU上運行LLaMA-30B模型。這要歸功于性能…

信息收集2.0版本

內網滲透之信息收集 whois查詢 1.1.1.1. 在線網站查詢 輸入相關的域名即可進行查詢。 &#xff08;1&#xff09;站長之家&#xff1a;whois域名查詢&#xff1a;http://whois.chinaz.com/ &#xff08;2&#xff09;愛站工具網&#xff1a;whois域名查詢&#xff1a;站長…

mysql數據庫操作小寄巧

目錄 json字段查詢時間相關只有日期只有時間又有時間又有日期時間比較時間運算 某字段同的取最新數據&#xff08;軟性的新數據覆蓋舊數據查找&#xff09;sql_modeonly_full_group_by的解決辦法優化思路 json字段查詢 查詢某個json字段&#xff08;xx&#xff09;的某個屬性下…

【考研數學】零基礎備考全年計劃

25考研數學基礎差&#xff0c;一定要重視基礎的復習&#xff01; 基礎不牢&#xff0c;地動山搖&#xff0c;這句話在如今的考研更加貼切 24考研的新形勢&#xff1a; 重基礎、計算量大、反押題 每一個變化對于基礎差的同學都不是好消息。 做過近幾年考研真題的人都會發現…

AI時代編程新寵!如何讓孩子成為未來的編程大師?

文章目錄 一、了解編程的基礎概念二、選擇適合的編程工具三、激發孩子的興趣四、注重基礎能力的培養五、提供實踐機會六、鼓勵孩子與他人合作七、持續支持與鼓勵《信息學奧賽一本通關》本書定位內容簡介作者簡介目錄 隨著科技的迅猛發展&#xff0c;編程已經從一種專業技能轉變…

Java實戰:PO、VO、DAO、BO、DTO與POJO在何處何場景下精準應用?

引言 在Java企業級應用開發中&#xff0c;良好的架構設計和清晰的數據模型劃分是保證代碼可讀性、可維護性和擴展性的基石。本文將深入剖析Java開發中常見的六大對象模型——PO&#xff08;Persistent Object&#xff09;、VO&#xff08;Value Object&#xff09;、DAO&#…

代碼隨想錄第二十五天 78.子集 90.子集II 491.非遞減子序列

LeetCode 78 子集 題目描述 給你一個整數數組 nums &#xff0c;數組中的元素 互不相同 。返回該數組所有可能的子集&#xff08;冪集&#xff09;。 解集 不能 包含重復的子集。你可以按 任意順序 返回解集。 示例 1&#xff1a; 輸入&#xff1a;nums [1,2,3] 輸出&…

24計算機考研 | 渤海大學

渤海大學丨省重點實驗室24年碩士招生&#xff08;調劑&#xff09; 考研調劑招生信息 學校:渤海大學 專業:工學->化學工程與技術->化學工藝 工學->材料科學與工程->材料學 工學->化學工程與技術->應用化學 工學->計算機科學與技術->計算機應用技…

iOS卡頓原因與優化

iOS卡頓原因與優化 1. 卡頓簡介 卡頓&#xff1a; 指用戶在使用過程中出現了一段時間的阻塞&#xff0c;使得用戶在這一段時間內無法進行操作&#xff0c;屏幕上的內容也沒有任何的變化。 卡頓作為App的重要性能指標&#xff0c;不僅影響著用戶體驗&#xff0c;更關系到用戶留…

Maven插件之 maven-dependency-plugin 分析依賴復制文件

目錄 插件簡介使用示例配置依賴&#xff1a;執行 mvn dependency:analyze輸出結果&#xff1a; 結尾 插件簡介 Apache Maven Dependency Plugin是Apache Maven構建工具的一個插件&#xff0c;用于管理項目的依賴項。 該插件提供了一系列目標&#xff08;goals&#xff09;&…

Linux: shm_xx系列函數使用詳解

目錄 一、shmget/shmctl/shmat/shmdt函數1、shmget2、shmctl3、shmat4、shmdt5、補充&#xff1a;ftok函數6、示例代碼 二、shm_open/shm_unlink函數1、shm_open2、shm_unlink3、示例代碼 三、課外閱讀 一、shmget/shmctl/shmat/shmdt函數 shm_xx系列函數是用于操作共享內存的一…

SpringBoot整合JdbcTemplate

?作者簡介:大家好,我是Leo,熱愛Java后端開發者,一個想要與大家共同進步的男人???? ??個人主頁:Leo的博客 ??當前專欄: 循序漸進學SpringBoot ?特色專欄: MySQL學習 ??本文內容:SpringBoot整合JdbcTemplate ??個人知識庫: Leo知識庫,歡迎大家訪問 目錄 …

設置文字之間的間距應該如何實現

設置文字之間的間距&#xff0c;通常指的是字母之間&#xff08;字符間距&#xff09;或單詞之間的間距。在CSS中&#xff0c;這可以通過letter-spacing和word-spacing屬性來實現。 字符間距&#xff08;letter-spacing&#xff09; letter-spacing屬性用于調整字符之間的間距…

【Git學習筆記】提交PR

step1 克隆一個倉庫 git clone .....step2 創建一個分支 (Creating a branch) # 創建并切換到本地新分支&#xff0c;分支的命名盡量簡潔&#xff0c;并與解決的問題相關 git checkout -b delete-unused-linkstep3 做出修改 (Make changes) step4 提交修改 # 保存本地修…

DDR5內存相比DDR4內存的優勢和區別?選擇哪一個服務器內存配置能避免丟包和延遲高?

根據幻獸帕魯服務器的實際案例分析&#xff0c;選擇合適的DDR4與DDR5內存大小以避免丟包和延遲高&#xff0c;需要考慮以下幾個方面&#xff1a; 性能與延遲&#xff1a;DDR5內存相比DDR4在傳輸速率、帶寬、工作電壓等方面都有顯著提升&#xff0c;但同時也伴隨著更高的延遲。D…

PostgreSQL開發與實戰(4)查詢性能Top SQL

作者&#xff1a;太陽 一、查詢當前正在運行的Top SQL 查詢當前正在運行的會話中耗時最長的Top SQL&#xff0c;where條件可按需修改SELECT pgsa.datname AS database_name, pgsa.usename AS user_name, pgsa.client_addr AS client_addr, pgsa.application_name AS applicat…

你知道什么是回調函數嗎?

c語言中的小小白-CSDN博客c語言中的小小白關注算法,c,c語言,貪心算法,鏈表,mysql,動態規劃,后端,線性回歸,數據結構,排序算法領域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 給大家分享一句我很喜歡我話&#xff1a; 知不足而奮進&#xff0c;望遠山而前行&am…