每日一句

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>" }, ... ] } )

常用的内置角色:

  • 数据库用户角色:readreadWrite
  • 所有数据库用户角色:readAnyDatabasereadWriteAnyDatabaseuserAdminAnyDatabasedbAdminAnyDatabase
  • 数据库管理角色:dbAdmindbOwneruserAdmin
  • 集群管理角色:clusterAdminclusterManagerclusterMonitorhostManager
  • 备份恢复角色:backuprestore
  • 超级用户角色: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 安全认证的更多相关文章

  1. mongodb的认证(authentication)与授权(authorization)

    一小白瞎整mongodb,认证部分被折磨的惨不忍睹,看厮可怜,特查了一下文档,浅显地总结一下mongodb认证(authentication)与授权(authorization)的联系. 创建的所有用 ...

  2. Mongodb安全认证

    Mongodb安全认证在单实例和副本集两种情况下不太一样,单实例相对简单,只要在启动时加上 --auth参数即可,但副本集则需要keyfile. 一.单实例 1.启动服务(先不要加auth参数) 2. ...

  3. Mongodb安全认证及Java调用

    Mongodb安全认证在单实例和副本集两种情况下不太一样,单实例相对简单,只要在启动时加上 --auth参数即可,但副本集则需要keyfile. 一.单实例 1.启动服务(先不要加auth参数) 2. ...

  4. MongoDB 权限认证

    MongoDB已经使用很长一段时间了,基于MongoDB的数据存储也一直没有使用到权限访问(MongoDB默认设置为无权限访问限制),因为考虑到数据安全的原因特地花了一点时间研究了一下,网上搜出来的解 ...

  5. mongodb带认证的副本集搭建

    Mongodb副本集带用户认证的 概述 本次实验是在一台虚拟机上做的,正式环境一定要分开实现,以免影响服务的正常使用和性能. 准备工作: 操作系统:centos7.2 Mongodb版本:3.4.1 ...

  6. mongodb授权认证 介绍

    mongodb存储所有的用户信息在admin 数据库的集合system.users中,保存用户名.密码和数据库信息.mongodb默认不启用授权认证,只要能连接到该服务器,就可连接到mongod.若要 ...

  7. springboot集成mongoDB 异常认证

    1.springboot连接mongoDB 出现异常认证 异常详情: com.mongodb.MongoSecurityException: Exception authenticating Mong ...

  8. mongodb分片认证

    启动configsvr 1. 确保mongdb的configsvr是采用service模式启动的,即从/etc/init.d下的脚本启动的,其用户是mongod. 2. 确保mongod的配置文件完全 ...

  9. mongodb连接认证失败

          版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qq_29143909/arti ...

随机推荐

  1. Head标签里面的dns-prefetch,preconnect,prefetch和prerender

    开始 今天突然心血来潮想起前端性能优化的问题,这基本是老生常谈的事情了,面试随便都能说上几个,但是还是有点疑问:就是Head标签了,记忆中Head可是藏龙卧虎,各种技能都有,当然这些不可能都一一记住, ...

  2. 基于vue2.0的在线电影APP,

    基于vue2.0构建的在线电影网[film],webpack + vue + vuex + vue-loader + keepAlive + muse-ui + cordova 全家桶,cordova ...

  3. 前端webpack workflow(二)——Webpack基本使用

    作者:Jogis原文链接:https://github.com/yesvods/Blog/issues/3转载请注明原文链接以及作者信息 前一篇文章介绍了webpack以及安装方法,这次将会介绍web ...

  4. 为什么局部内部类访问外边的局部变量必须为final

    6.局部内部类访问外边的局部变量时,此变量必须为final类型 马克-to-win:由于技术方面的限制,java的设计者们做出如下语法规定:局部内部类访问外边的局部变量时,此变量必须为final类型, ...

  5. HTML表格CSS美化

    效果展示 style.css html{ width: 100%; height: 100%; overflow: hidden;}body{ width: 100%; height: 100%; f ...

  6. JAVA环境搭建之MyEclipse10+jdk1.8+tomcat8环境搭建详解

    一.安装JDK 1.下载得到jdk-8u11-windows-i586.1406279697.exe,直接双击运行安装,一直next就可以,默认是安装到系统盘下面Program Files, 我这里装 ...

  7. web.xml 配置 contextConfigLocation

    web.xml中classpath:和classpath*:  有什么区别? classpath:只会到你的class路径中查找找文件; classpath*:不仅包含class路径,还包括jar文件 ...

  8. vue后台管理系统组件弹窗

    //addFormVisibleIcon可在data中设置true与falsehttps://element.eleme.io/#/zh-CN/component/installation <e ...

  9. linux中查看端口号使用情况

    百度一圈,以下是整理来的操作命令. 1.netstat -anp |grep (端口号) 这个方法可以直观看到对应端口号是否被使用. 2.netstat -nultp 这个方法可以看到该机上所有以用的 ...

  10. SpringMVC-自定义转换器

    1.定义转换器类实现Converter接口 import org.springframework.core.convert.converter.Converter; import java.text. ...