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 】
相关推荐:
Laravel中的withCount方法怎么高效统计关联模型数量
Laravel怎么实现微信登录_Laravel Socialite第三方登录集成
JavaScript如何实现音频处理_Web Audio API如何工作?
C语言设计一个闪闪的圣诞树
javascript基本数据类型及类型检测常用方法小结
百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】
bootstrap日历插件datetimepicker使用方法
教学论文网站制作软件有哪些,写论文用什么软件
?
如何将凡科建站内容保存为本地文件?
详解Android——蓝牙技术 带你实现终端间数据传输
如何用免费手机建站系统零基础打造专业网站?
猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?
如何在云服务器上快速搭建个人网站?
长沙企业网站制作哪家好,长沙水业集团官方网站?
如何快速生成高效建站系统源代码?
Laravel项目怎么部署到Linux_Laravel Nginx配置详解
Laravel如何创建自定义Artisan命令?(代码示例)
实现点击下箭头变上箭头来回切换的两种方法【推荐】
微信推文制作网站有哪些,怎么做微信推文,急?
Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道
如何在橙子建站上传落地页?操作指南详解
Laravel Seeder填充数据教程_Laravel模型工厂Factory使用
电视网站制作tvbox接口,云海电视怎样自定义添加电视源?
如何在阿里云虚拟主机上快速搭建个人网站?
Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
bing浏览器学术搜索入口_bing学术文献检索地址
Linux安全能力提升路径_长期防护思维说明【指导】
Claude怎样写约束型提示词_Claude约束提示词写法【教程】
Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全
HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】
HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】
如何在建站之星绑定自定义域名?
独立制作一个网站多少钱,建立网站需要花多少钱?
油猴 教程,油猴搜脚本为什么会网页无法显示?
什么是javascript作用域_全局和局部作用域有什么区别?
如何用5美元大硬盘VPS安全高效搭建个人网站?
IOS倒计时设置UIButton标题title的抖动问题
linux写shell需要注意的问题(必看)
如何在阿里云虚拟服务器快速搭建网站?
JavaScript如何操作视频_媒体API怎么控制播放
Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧
北京的网站制作公司有哪些,哪个视频网站最好?
PythonWeb开发入门教程_Flask快速构建Web应用
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
黑客如何通过漏洞一步步攻陷网站服务器?
高防服务器租用如何选择配置与防御等级?
Laravel怎么自定义错误页面_Laravel修改404和500页面模板

