MongoDB 安全和訪問許可權控制

来源:http://www.cnblogs.com/ljhdo/archive/2016/10/28/4863318.html
-Advertisement-
Play Games

MongoDB的訪問控制能夠有效保證資料庫的安全,訪問控制是指綁定Application監聽的IP地址,設置監聽埠,使用賬戶和密碼登錄 一,訪問控制的參數 1,綁定IP地址 mongod 參數:--bind_ip <ip address> 預設值是所有的IP地址都能訪問,該參數指定MongoDB對 ...


MongoDB的訪問控制能夠有效保證資料庫的安全,訪問控制是指綁定Application監聽的IP地址,設置監聽埠,使用賬戶和密碼登錄

一,訪問控制的參數

1,綁定IP地址

mongod 參數:--bind_ip <ip address>

預設值是所有的IP地址都能訪問,該參數指定MongoDB對外提供服務的綁定IP地址,用於監聽客戶端 Application的連接,客戶端只能使用綁定的IP地址才能訪問mongod,其他IP地址是無法訪問的。

2,設置監聽埠

mongod 參數:--port <port>

MongoDB 預設監聽的埠是27017,該參數顯式指定MongoDB實例監聽的TCP 埠,只有當客戶端Application連接的埠和MongoDB實例監聽的埠一致時,才能連接到MongoDB實例。

3,啟用用戶驗證

mongod 參數:--auth 

預設值是不需要驗證,即 --noauth,該參數啟用用戶訪問許可權控制;當mongod 使用該參數啟動時,MongoDB會驗證客戶端連接的賬戶和密碼,以確定其是否有訪問的許可權。如果認證不通過,那麼客戶端不能訪問MongoDB的資料庫。

Enables authorization to control user’s access to database resources and operations. When authorization is enabled, MongoDB requires all clients to authenticate themselves first in order to determine the access for the client.

4,許可權認證

mongo 參數:--username <username>, -u <username>
mongo 參數:--password <password>, -p <password>
mongo 參數:--authenticationDatabase <dbname>  指定創建User的資料庫;在特定的資料庫中創建User,該DB就是User的authentication database。

在連接mongo時,使用參數 --authenticationDatabase,會認證 -u 和 -p 參數指定的賬戶和密碼。如果沒有指定驗證資料庫,mongo使用連接字元串中指定的DB作為驗證數據塊。

二,基於角色的訪問控制(Role-Based Access Control)

角色是授予User在指定資源上執行指定操作的許可權,MongoDB官方手冊對角色的定義是:

A role grants privileges to perform the specified actions on resource.

MongoDB為了方便管理員管理許可權,在DB級別上預先定義了內置角色;如果用戶需要對許可權進行更為細緻的管理,MongoDB允許用戶創建自定義的角色,能夠在集合級別上控制User能夠執行的操作。
MongoDB使用角色(Role)授予User訪問資源的許可權,Role決定User能夠訪問的資料庫資源和執行的操作。一個User能夠被授予一個或多個Role,如果User沒有被授予Role,那麼就沒有訪問MongoDB系統的許可權。

A user is granted one or more roles that determine the user’s access to database resources and operations. Outside of role assignments, the user has no access to the system.

1,內置角色(Built-In Roles)

內置角色是MongoDB預定義的角色,操作的資源是在DB級別上。MongoDB擁有一個SuperUser的角色:root,擁有最大許可權,能夠在系統的所有資源上執行任意操作。

資料庫用戶角色(Database User Roles):

  • read:授予User只讀數據的許可權
  • readWrite:授予User讀寫數據的許可權

資料庫管理角色(Database Administration Roles):

  • dbAdmin:在當前dB中執行管理操作
  • dbOwner:在當前DB中執行任意操作
  • userAdmin:在當前DB中管理User

備份和還原角色(Backup and Restoration Roles):

  • backup
  • restore

跨庫角色(All-Database Roles):

  • readAnyDatabase:授予在所有資料庫上讀取數據的許可權
  • readWriteAnyDatabase:授予在所有資料庫上讀寫數據的許可權
  • userAdminAnyDatabase:授予在所有資料庫上管理User的許可權
  • dbAdminAnyDatabase:授予管理所有資料庫的許可權

集群管理角色(Cluster Administration Roles):

  • clusterAdmin:授予管理集群的最高許可權
  • clusterManager:授予管理和監控集群的許可權,A user with this role can access the config and local databases, which are used in sharding and replication, respectively.
  • clusterMonitor:授予監控集群的許可權,對監控工具具有readonly的許可權
  • hostManager:管理Server

2,用戶自定義的角色(User-Defined Roles)

內置角色只能控制User在DB級別上執行的操作,管理員可以創建自定義角色,控制用戶在集合級別(Collection-Level)上執行的操作,即,控制User在當前DB的特定集合上執行特定的操作。

在創建角色時,必須明確Role的四個特性:

  • Scope:角色作用的範圍,創建在Admin中的角色,能夠在其他DB中使用;在其他DB中創建的角色,只能在當前DB中使用;
  • Resource:角色控制的資源,表示授予在該資源上執行特定操作的許可權;
  • Privilege Actions:定義了User能夠在資源上執行的操作,系統定義Action是:Privilege Actions
  • Inherit:角色能夠繼承其他角色許可權

2.1 角色作用的範圍(Scope)

在admin 資料庫中創建的角色,Scope是全局的,能夠在admin,其他DB和集群中使用,並且能夠繼承其他DB的Role;而在非admin中創建的角色,Scope是當前資料庫,只能在當前DB中使用,只能繼承當前資料庫的角色。

A role created in the admin database can include privileges that apply to the admin database, other databases or to the cluster resource, and can inherit from roles in other databases as well as the admin database. Except for roles created in the admin database, a role can only include privileges that apply to its database and can only inherit from other roles in its database. 

2.2 許可權的操作(Privilege actions)

MongoDB的許可權包由:資源(Resource)和操作(Action)兩部分組成,Privilege Actions 定義User能夠在資源上執行的操作,例如:MongoDB在文檔級別(Document-Level)上執行的讀寫操作(Query and Write Actions)列表是

  • find
  • insert
  • remove
  • update

3,創建角色

使用db.CreateRole()在當前DB中創建角色,創建的語法示例如下:

use admin
db.createRole(
   {
     role: "new_role",
     privileges: [
       { resource: { cluster: true }, actions: [ "addShard" ] },
       { resource: { db: "config", collection: "" }, actions: [ "find", "update", "insert", "remove" ] },
       { resource: { db: "users", collection: "usersCollection" }, actions: [ "update", "insert", "remove" ] },
       { resource: { db: "", collection: "" }, actions: [ "find" ] }
     ],
     roles: [
       { role: "read", db: "admin" }
     ]
   },
   { w: "majority" , wtimeout: 5000 }
)

在roles數組中,指定被繼承的role,即,新建的new_role從roles數組中繼承許可權:

  • 如果被繼承的role在當前DB中,定義的格式是:roles:["role"];
  • 如果被繼承的role不在當前DB中,需要使用doc,指定該role所在的DB,定義的格式是:roles:[{role:"role_name", db:"db_name"}];

4,自定義角色管理函數

  • db.createRole() :Creates a role and specifies its privileges.
  • db.updateRole() :Updates a user-defined role.
  • db.dropRole() :Deletes a user-defined role.
  • db.dropAllRoles() :Deletes all user-defined roles associated with a database.
  • db.grantPrivilegesToRole() :Assigns privileges to a user-defined role.
  • db.revokePrivilegesFromRole() :Removes the specified privileges from a user-defined role.
  • db.grantRolesToRole() :Specifies roles from which a user-defined role inherits privileges.
  • db.revokeRolesFromRole() :Removes inherited roles from a role.
  • db.getRole() :Returns information for the specified role.
  • db.getRoles() :Returns information for all the user-defined roles in a database.

三,管理用戶和許可權

1,創建用戶

use db_name
db.createUser( { user:
"user_name", pwd: "user_pwd", roles: [ { role: "clusterAdmin", db: "admin" }, { role: "readAnyDatabase", db: "admin" }, "readWrite"
] } )

為新建的User,授予一個或多個角色,通過roles數組來實現:

  • 如果role存在於當前DB中,roles的格式:roles:["role"];
  • 如果role不存在於當前DB中,roles的格式:roles:[Role:"role_name", db:"db_name"];

2,許可權認證(Authenticate)

mongo連接到mongod,有兩種許可權認證的方式:

  • 在連接時認證用戶訪問的許可權,mongo 使用參數 --authenticationDatabase <dbname> 指定認證資料庫;
  • 在連接後,認證用戶訪問的許可權,mongo 沒有使用參數 --authenticationDatabase <dbname>,在連接到mongod之後,切換到驗證資料庫(authentication database)中,使用db.auth() 驗證User是否有許可權訪問當前資料庫;
use db_name
db.auth("user_name", "user_pwd" )

3,用戶管理函數

  • db.auth() :Authenticates a user to a database.
  • db.createUser() :Creates a new user.
  • db.updateUser() :Updates user data.
  • db.changeUserPassword() :Changes an existing user’s password.
  • db.dropAllUsers() :Deletes all users associated with a database.
  • db.dropUser() :Removes a single user.
  • db.grantRolesToUser() :Grants a role and its privileges to a user.
  • db.revokeRolesFromUser() :Removes a role from a user.
  • db.getUser() :Returns information about the specified user.
  • db.getUsers() :Returns information about all users associated with a database.

 

參考文檔:

Role-Based Access Control

Built-In Roles

Collection-Level Access Control

db.createRole()

db.createUser()

Enable Auth

Manage Users and Roles

mongod


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Oracle的推導參數(Derived Parameters)其實是初始化參數的一種。推導參數值通常來自於其它參數的運算,依賴其它參數計算得出。官方文檔關於推導參數(Derived Parameters)的概念如下: Derived Parameters Some initialization pa... ...
  • 1.在查詢結果中不顯示重覆記錄 查詢時不顯示重覆記錄主要應用了 DISTINCT 關鍵字,該關鍵字用於刪除重覆記錄。 在實現查詢操作時,如果查詢的選擇列表中包含一個表的主鍵,那麼每個查詢中的記錄都將是唯一的(因為主鍵在每一條記錄中有一個不同的值);如果主鍵不包含在查詢結果中,就可能出現重覆記錄。使用 ...
  • 【體繫結構】Oracle參數介紹 1 BLOG文檔結構圖 2 前言部分 2.1 導讀和註意事項 各位技術愛好者,看完本文後,你可以掌握如下的技能,也可以學到一些其它你所不知道的知識,~O(∩_∩)O~: ① Oracle中的各種參數介紹及其查詢方法 ② Oracle中V$PARAMETER及V$PA ...
  • 一、MySQL數據遷移(由遠端主機遷移到本地) 1、導出資料庫mysqldump -u root -p db > dump_db_date.sqlroot: 賬戶db: 需要導出的資料庫名 2、將導出的dump_db_date.sql文件scp到本地 3、在本地機器建立新資料庫mysql > cre ...
  • 今天在啟動Hadoop時遇到Name or service not knownstname這樣的錯誤 原因:slaves文件可能被污染了。 解決方法:刪除掉slaves文件,重新建立一個slaves文件,並配置好就可以了。 1 [root@master sbin]# ./start-all.sh 2 ...
  • 1.mysql 資料庫備份: 語法: 其中:USER 是用戶名,PASS 是密碼,DataBase 是資料庫名, Path 是資料庫備份存儲的位置。 備註:1)執行備份是在系統條件下,而非 mysql 狀態下。 2)請使用正確的文件地址,在文件地址中要使用雙斜杠 “\\” 來代替單斜杠 “\”。 2 ...
  • 存儲引擎(Storage Engine)是MongoDB的核心組件,負責管理數據如何存儲在硬碟(Disk)和記憶體(Memory)上。從MongoDB 3.2 版本開始,MongoDB 支持多數據存儲引擎(Storage Engine),MongoDB支持的存儲引擎有:WiredTiger,MMAPv ...
  • pt-pmp有兩方面的作用:一是獲取進程的堆棧信息,二是對這些堆棧信息進行彙總。 進程的堆棧信息是利用gdb獲取的,所以在獲取的過程中,會對mysql服務端的性能有一定的影響。 用官方的話說: pt-pmp腳本本身是用shell寫的,用法也比較簡單,唯一的要求是伺服器上已安裝gdb包。 不然會報如下 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...