MongoDB安全及身份认证(实例讲解)

发布时间 - 2026-01-11 02:25:22    点击率:

前面的话

本文将详细介绍MongoDB安全相关的内容

概述

MongoDB安全主要包括以下4个方面

1、物理隔离

系统不论设计的多么完善,在实施过程中,总会存在一些漏洞。如果能够把不安全的使用方与MongoDB数据库做物理上的隔离,即通过任何手段都不能连接到数据库,这是最安全的防护。但,通常这是不现实的。一些重要的数据可能会保存下来,放置到物理隔离的机房中

2、网络隔离

许多公司的开发机处于内网环境中。即使数据库存在漏洞,外部环境也没有机会利用,因为根本无法访问内网

3、防火墙隔离

可以利用防火墙配置IP白名单,只允许某些IP访问数据库,也可以从一定程度上增加MongoDB的安全性

4、用户名密码鉴权

相对于以上3种方式,用户名密码鉴权机制是最常见的MongoDB安全措施。如果密码设置的比较简单,或者连接环境不是加密环境,很可能被第三方获取到用户名和密码,从而造成MongoDB数据库的危险

权限认证

mongodb存储所有的用户信息在admin数据库的集合system.users中,保存用户名、密码和数据库信息。mongodb默认不启用权限认证,只要能连接到该服务器,就可连接到mongod。若要启用安全认证,需要更改配置文件参数authorization,也可以简写为auth。

然后,重启mongod。查看日志文件,发现权限认证已经开启

但是,不使用用户名和密码依然可以连接到数据库。这是因为,我们还没有创建用户。在用户创建,并且开启权限认证之后,如果不使用用户名和密码将不能够连接到数据库

角色管理

在进行用户管理之前,首先要先了解角色管理

MongoDB支持基于角色的访问控制(RBAC)来管理对MongoDB系统的访问。一个用户可以被授权一个或者多个:ref:角色 <roles> 以决定该用户对数据库资源和操作的访问权限。在权限以外,用户是无法访问系统的

数据库角色在创建用户中的role参数中设置。角色分为内建角色和自定义角色

【内建角色】

MongoDB内建角色包括以下几类

1、数据库用户角色

read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库

2、数据库管理员角色

dbAdmin:允许用户进行索引创建、删除,查看统计或访问system.profile,但没有角色和用户管理的权限
userAdmin:提供了在当前数据库中创建和修改角色和用户的能力
dbOwner: 提供对数据库执行任何管理操作的能力。这个角色组合了readWrite、dbAdmin和userAdmin角色授予的特权。

3、集群管理角色

clusterAdmin : 提供最强大的集群管理访问。组合clusterManager、clusterMonitor和hostManager角色的能力。还提供了dropDatabase操作
clusterManager : 在集群上提供管理和监视操作。可以访问配置和本地数据库,这些数据库分别用于分片和复制
clusterMonitor : 提供对监控工具的只读访问,例如MongoDB云管理器和Ops管理器监控代理。
hostManager : 提供监视和管理服务器的能力。

4、备份恢复角色

backup : 提供备份数据所需的能力,使用MongoDB云管理器备份代理、Ops管理器备份代理或使用mongodump
restore : 提供使用mongorestore恢复数据所需的能力

5、所有数据库角色

readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限 
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限 
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限 
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。 

6、超级用户角色

root:提供对readWriteAnyDatabase、dbAdminAnyDatabase、userAdminAnyDatabase、clusterAdmin、restore和backup的所有资源的访问

7、内部角色

__system : 提供对数据库中任何对象的任何操作的特权

【自定义角色】

除了使用内建的角色之外,MongoDB还支持使用db.createRole()方法来自定义角色

[注意]只能在admin数据库中创建角色,否则会失败

role: 自定义角色的名称

privileges: 权限操作 

roles:继承的角色。如果没有继承的角色,可以设置为空数组 

use admin
db.createRole(
  {
   role: "myClusterwideAdmin",
   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 }
)

用户管理

【创建用户】

使用createUser命令来创建用户

user: 用户名 pwd: 密码

customData: 对用户名密码的说明(可选项)

roles: {role:继承自什么角色类型,db:数据库名称}

db.createUser({user: "...",pwd: "...",customDate:"...",roles:[{role: "...",db: "..."}]})

1、创建管理员用户

MongoDB没有默认管理员账号,所以要先添加管理员账号。切换到admin数据库,添加的账号才是管理员账号

在admin数据库中,添加一个用户并赋予userAdminAnyDatabase角色

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

2、重新登录数据库,并验证权限

如果auth()方法返回0则代表授权失败,返回1代表授权成功

db.auth()

3、添加普通用户

一旦经过认证的用户管理员,可以使用db.createUser()去创建额外的用户。 可以分配mongodb内置的角色或用户自定义的角色给用户

[注意]需要在admin数据库下进行认证,否则认证不成功

由于该用户只有读权限,所以会写入数据失败

4、创建超级用户

【查看用户】

db.system.users.find()

【删除用户】

db.dropUser()

【添加用户权限】

db.grantRolesToUser()

给在db1数据库中只读的x用户,添加写权限

【修改密码】

db.changeUserPassword()

以上这篇MongoDB安全及身份认证(实例讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


# 身份认证  # 基于Docker的MongoDB实现授权访问的方法  # 浅析MongoDB之安全认证  # python连接mongodb密码认证实例  # MongoDB开启权限认证的方法步骤详解  # Java开发之spring security实现基于MongoDB的认证功能  # 关于Mongodb 认证鉴权你需要知道的一些事  # Mongodb 3.2.9开启用户权限认证问题的步骤详解  # mongodb 3.4下远程连接认证失败的解决方法  # MongoDB数据库授权认证的实现  # 数据库中  # 自定义  # 只在  # 管理器  # 内建  # 连接到  # 这是  # 所需  # 给大家  # 要先  # 该用户  # 内网  # 无法访问  # 还没有  # 多个  # 才是  # 也没  # 有机会  # 希望能  # 如果没有 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: C语言设计一个闪闪的圣诞树  如何快速查询网站的真实建站时间?  如何在云主机上快速搭建网站?  智能起名网站制作软件有哪些,制作logo的软件?  魔方云NAT建站如何实现端口转发?  Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】  如何快速搭建支持数据库操作的智能建站平台?  高防服务器租用首荐平台,企业级优惠套餐快速部署  如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】  韩国服务器如何优化跨境访问实现高效连接?  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  Linux系统命令中tree命令详解  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧  如何用AWS免费套餐快速搭建高效网站?  如何快速建站并高效导出源代码?  如何在建站主机中优化服务器配置?  Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】  JavaScript Ajax实现异步通信  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  图册素材网站设计制作软件,图册的导出方式有几种?  Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】  jQuery validate插件功能与用法详解  北京企业网站设计制作公司,北京铁路集团官方网站?  Laravel如何生成URL和重定向?(路由助手函数)  jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】  如何在万网ECS上快速搭建专属网站?  郑州企业网站制作公司,郑州招聘网站有哪些?  iOS验证手机号的正则表达式  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  打造顶配客厅影院,这份100寸电视推荐名单请查收  Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理  JS中页面与页面之间超链接跳转中文乱码问题的解决办法  如何在阿里云完成域名注册与建站?  Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程  如何在阿里云虚拟服务器快速搭建网站?  Laravel如何实现一对一模型关联?(Eloquent示例)  微信小程序 五星评分(包括半颗星评分)实例代码  HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】  Laravel如何实现用户密码重置功能?(完整流程代码)  Python文件异常处理策略_健壮性说明【指导】  Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】  Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程  活动邀请函制作网站有哪些,活动邀请函文案?  html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】  Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】  C#如何调用原生C++ COM对象详解  大连 网站制作,大连天途有线官网?