MongoDB 安全认证
每日一句
Sometimes your whole life boils down to one insane move.
人一生中出人头地的机会不多,一旦有了一定要抓住!
概述
默认情况下,MongoDB实例启动运行时是没有启用用户访问权限控制的,也就是说,在实例本机服务器上都可以随意连接到实例进行各种操作,MongoDB不会对连接客户端进行用户验证,这是非常危险的。
可以通过以下的几种方式来保障 MongoDB的安全:
- 使用新的端口,默认的 27017 端口如果一旦知道了IP就能连接上,不太安全
- 设置MongoDB的网络环境。最好将MongoDB部署到公司服务器内网,这样外网是访问不到的。公司内部访问使用VPN等。
- 开启安全认证。认证要同时设置服务器之间的内部认证方式,同时设置客户端连接到集群的账号密码认证方式。
为了强制开启用户访问控制(用户验证),则需要在MongoDB实例启动时使用选项 --auth 或在指定启动配置文件中添加选项 auth=true
相关概念
启动访问控制
MongoDB使用的是基于角色的访问控制(Role-Based-Access-Control,RBAC)来管理用户对实例的访问。通过对用户授予一个或多个角色来控制用户访问数据库资源的权限和数据库操作的权限,在对用户分配角色之前,用户无法访问实例。
角色
在MongoDB中通过角色对用户授予相应数据库资源的操作权限。每个角色当中的权限可以显式指定,也可以通过继承其他角色的权限,或者两者都存在的权限。
权限
权限由指定的数据库资源(resource)以及允许在指定资源上进行的操作(action)组成。
- 资源(resource):数据库、集合、部分集合和集群
- 操作(action):对资源进行的增、删、改、查(CRUD)操作
角色
在角色定义时可以包含一个或多个已存在的角色,新创建的角色会继承包含的角色所有的权限。在同一个数据库中,新创建角色可以继承其他角色的权限,在 admin 数据库中创建的角色可以继承在其它任意数据库中角色的权限。
角色相关命令
# 查询所有角色权限(仅用户自定义角色)
db.runCommand({ rolesInfo: 1 })
# 查询所有角色权限(包含内置角色)
db.runCommand({ rolesInfo: 1, showBuiltinRoles: true })
# 查询当前数据库中的某角色的权限
db.runCommand({ rolesInfo: "<rolename>" })
# 查询其它数据库中指定的角色权限
db.runCommand({ rolesInfo: { role: "<rolename>", db: "<database>" } }
# 查询多个角色权限
db.runCommand( { rolesInfo: [ "<rolename>", { role: "<rolename>", db: "<database>" }, ... ] } )
常用的内置角色:
- 数据库用户角色:
read、readWrite - 所有数据库用户角色:
readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase - 数据库管理角色:
dbAdmin、dbOwner、userAdmin; - 集群管理角色:
clusterAdmin、clusterManager、clusterMonitor、hostManager; - 备份恢复角色:
backup、restore; - 超级用户角色:
root - 内部角色:
system
角色说明:
| 角色 | 权限描述 |
| read | 可以读取指定数据库中任何数据。 |
| readWrite | 可以读写指定数据库中任何数据,包括创建、重命名、删除集合。 |
| readAnyDatabase | 可以读取所有数据库中任何数据(除了数据库confifig和local之外)。 |
| readWriteAnyDatabase | 可以读写所有数据库中任何数据(除了数据库confifig和local之外)。 |
| userAdminAnyDatabase | 可以在指定数据库创建和修改用户(除了数据库confifig和local之外)。 |
| dbAdminAnyDatabase | 可以读取任何数据库以及对数据库进行清理、修改、压缩、获取统计信息、执行检查等操作(除了数据库confifig和local之外)。 |
| dbAdmin | 可以读取指定数据库以及对数据库进行清理、修改、压缩、获取统计信息、执行检查等操作。 |
| userAdmin | 可以在指定数据库创建和修改用户。 |
| clusterAdmin | 可以对整个集群或数据库系统进行管理操作。 |
| backup | 备份MongoDB数据最小的权限。 |
| restore | 从备份文件中还原恢复MongoDB数据(除了system.profifile集合)的权限。 |
| root | 超级账号,超级权限 |
美文佳句
人生其实就像一场旅行,不必在乎目的地,在乎的是沿途的风景以及看风景的心情。忙碌的生活中懂得适时停下脚步欣赏一路走来的风景,是一种享受,是一种需要,是一种智慧,更是一种对待人生的态度。
花随风落,雨伴云晴,过客匆匆,相逢有期。路过的风景,经过的往事,放在心间就好。感恩生活的所有,珍惜所有的有缘人,努力让自己活得更幸福快乐一点。
你好,我是yltrcc,日常分享技术点滴,欢迎关注我的公众号:ylcoder
MongoDB 安全认证的更多相关文章
- mongodb的认证(authentication)与授权(authorization)
一小白瞎整mongodb,认证部分被折磨的惨不忍睹,看厮可怜,特查了一下文档,浅显地总结一下mongodb认证(authentication)与授权(authorization)的联系. 创建的所有用 ...
- Mongodb安全认证
Mongodb安全认证在单实例和副本集两种情况下不太一样,单实例相对简单,只要在启动时加上 --auth参数即可,但副本集则需要keyfile. 一.单实例 1.启动服务(先不要加auth参数) 2. ...
- Mongodb安全认证及Java调用
Mongodb安全认证在单实例和副本集两种情况下不太一样,单实例相对简单,只要在启动时加上 --auth参数即可,但副本集则需要keyfile. 一.单实例 1.启动服务(先不要加auth参数) 2. ...
- MongoDB 权限认证
MongoDB已经使用很长一段时间了,基于MongoDB的数据存储也一直没有使用到权限访问(MongoDB默认设置为无权限访问限制),因为考虑到数据安全的原因特地花了一点时间研究了一下,网上搜出来的解 ...
- mongodb带认证的副本集搭建
Mongodb副本集带用户认证的 概述 本次实验是在一台虚拟机上做的,正式环境一定要分开实现,以免影响服务的正常使用和性能. 准备工作: 操作系统:centos7.2 Mongodb版本:3.4.1 ...
- mongodb授权认证 介绍
mongodb存储所有的用户信息在admin 数据库的集合system.users中,保存用户名.密码和数据库信息.mongodb默认不启用授权认证,只要能连接到该服务器,就可连接到mongod.若要 ...
- springboot集成mongoDB 异常认证
1.springboot连接mongoDB 出现异常认证 异常详情: com.mongodb.MongoSecurityException: Exception authenticating Mong ...
- mongodb分片认证
启动configsvr 1. 确保mongdb的configsvr是采用service模式启动的,即从/etc/init.d下的脚本启动的,其用户是mongod. 2. 确保mongod的配置文件完全 ...
- mongodb连接认证失败
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qq_29143909/arti ...
随机推荐
- 带你玩转prefetch, preload, dns-prefetch,defer和async
现代浏览器性能优化-JS篇 众所周知,JS的加载和执行会阻塞浏览器渲染,所以目前业界普遍推荐把script放到</body>之前,以解决js执行时找不到dom等问题.但随着现代浏览器的普及 ...
- 一个让我很不爽的外包项目——奔驰Smart2015新官网
七月份的下半个月,有幸做了奔驰 Smart 2015年新官网,包括手机端和PC端的宣传页,地址: PC端 手机端 这里,为了证明这个是一个事实,我还特意的留存了两张截图: 这里只想说明这么几个问题: ...
- H5使用Canvas绘图
一.什么是Canvas Canvas 是H5的一部分,允许脚本语言动态渲染图像.Canvas 定义一个区域,可以由html属性定义该区域的宽高,javascript代码可以访问该区域,通过一整套完整的 ...
- 人机交互大作业---C#WinForm酒店预订系统(纯界面)
登录: 所有界面: 源代码:最近较忙,后续会上传至github 材料参考:扬中菲尔斯金陵大酒店
- 动态添加HTML时onclick函数参数传递
onclick函数动态传参 1.参数为数值类型时: var tmp = 123; var strHTML = "<div onclick=func(" + tmp + &qu ...
- java中如何按一定的格式输出时间, 必须给出例子
题目2: 按一定的格式输出时间 import java.util.*;import java.text.SimpleDateFormat;public class Test { public s ...
- [ Perl ] 对文本文件进行行列翻转
https://www.cnblogs.com/yeungchie/ code #!/usr/bin/env perl #----------------------------- # Program ...
- Vue整合Quill富文本编辑器
Quill介绍 Quill是一款开源的富文本编辑器,基于可扩展的架构设计,提供丰富的 API 进行定制.截止2021年1月,在github上面已有28.8k的star. Quill项目地址:https ...
- 基于Spring接口,集成Caffeine+Redis两级缓存
原创:微信公众号 码农参上,欢迎分享,转载请保留出处. 在上一篇文章Redis+Caffeine两级缓存,让访问速度纵享丝滑中,我们介绍了3种整合Caffeine和Redis作为两级缓存使用的方法,虽 ...
- innodb源码解析 - mem0_.c - 基本内存管理
The basic element of the memory management is called a memoryheap. A memory heap is conceptually ast ...
