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
更多相關文章
  • 創建表 插入數據 查詢結果顯示,如下截圖: 問題: 1.計算每個人的總成績併排名(要求顯示欄位:姓名,總成績) select name,SUM(score) as allscore from dbo.stuscore group by name order by allscore; View Cod ...
  • 今天在思考postgresql裡面鎖是怎麼實現的,討論了暫時認為是master進程維護一張表,在各個語句獲取鎖的時候,查詢該表能獲取對應的鎖就繼續,否則就等待,執行完成後釋放鎖。 後面我再去研究到底怎麼實現的,今天先實現怎麼查看某表當前有哪些鎖在上面。 會話1: 事物不提交,在事物2中查詢表test ...
  • 《SQL Server 從入門到精通》 第1章 資料庫基礎 1.2 資料庫的體繫結構 1.2.1 資料庫三級模式結構 1. 模式 模式也稱邏輯模式或概念模式,它是資料庫中 ,是所有用戶的公共數據視圖。一個資料庫只有一個模式,模式處於三級結構的中間層。 2. 外模式 外模式也稱用戶模式,它是 ,`是數 ...
  • 在MS SQL Server中,我們想判斷一個字元串中是否包含有特殊字元。由於徨字元集過多,我們可以使用正則來實現。除了大小字母和數字之外全是特殊字元,因此可以使用這個表達式:[^a-zA-Z0-9]參考下麵代碼示例: ...
  • 昨晚有實現一個小功能,就是在MS SQL Server中,檢查字元串是否包含有大小寫字母。通常應用在字元串的複雜度。 DECLARE @s NVARCHAR(40) = N'SDFfgGRYJhhTYUJ' IF LOWER(@s) COLLATE Latin1_General_CS_AS <> @ ...
  • 在SQL Server中啟用CLR,可以執行下麵SQL語句: EXEC sp_configure 'clr enabled'; EXEC sp_configure 'clr enabled' , '1'; RECONFIGURE; ...
  • 1. 找到MySQL的配置文件,一般在MySQL的安裝目錄下,例如我的: C:\Program Files\MySQL\MySQL Server 5.7 ,打開下麵的一個配置文件: my-default.ini ,在最後面添加一行配置: show_compatibility_56 = 1 。 2. ... ...
  • zookeeper的安裝(圖文詳解。。。來點擊哦!) 一、伺服器的配置 三台伺服器: 192.168.83.133 sunshine 192.168.83.134 sunshineMin 192.168.83.135 sunshineMax 在每台伺服器的hosts文件中添加:(命令:vi /etc ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...