MongoDB 用户名密码登录

Mongodb enable authentication

MongoDB 默认直接连接,无须身份验证,如果当前机器可以公网访问,且不注意Mongodb 端口(默认 27017)的开放状态,那么Mongodb就会产生安全风险,被利用此配置漏洞,入侵数据库。

容易遭受入侵的环境

  • 使用默认 mongod 命令启动 Mongodb
  • 机器可以被公网访问
  • 在公网上开放了 Mongodb 端口

安全风险

  • 数据库隐私泄露
  • 数据库被清空
  • 数据库运行缓慢

解决方案

1. 禁止公网访问 Mongodb 端口

1.1 网络配置

由于网络配置因人而异,需要根据自己实际环境进行配置,不作冗述。大致可以从以下方面禁止。

  • 在路由器中关闭端口转发
  • 防火墙 iptables 禁止访问

1.2 验证端口能否访问方式

在外网机器命令行中运行

telnet your.machine.open.ip 27017

2. 启用验证

2.1 创建用户管理员账户

当前数据库版本:Mongodb 3.4

使用 mongod 启动数据库
新建终端

mongod --port 27017 --dbpath /data/db1

参数默认可以不加,若有自定义参数,才要加上,下同。

另起一个终端,运行下列命令

mongo --port 27017

use admin

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

管理员创建成功,现在拥有了用户管理员
用户名:adminUser
密码:adminPass
然后,断开 mongodb 连接, 关闭数据库
两个终端下 <C - c>

2.2 Mongodb 用户验证登陆

启动带访问控制的 Mongodb
新建终端

mongod --auth --port 27017 --dbpath /data/db1

现在有两种方式进行用户身份的验证
第一种 (类似 MySql)
客户端连接时,指定用户名,密码,db名称

mongo --port 27017 -u "adminUser" -p "adminPass" --authenticationDatabase "admin"

第二种
客户端连接后,再进行验证

mongo --port 27017

use admin
db.auth("adminUser", "adminPass")

// 输出 1 表示验证成功

2.3 创建普通用户

过程类似创建管理员账户,只是 role 有所不同

use foo

db.createUser(
  {
    user: "simpleUser",
    pwd: "simplePass",
    roles: [ { role: "readWrite", db: "foo" },
             { role: "read", db: "bar" } ]
  }
)

现在我们有了一个普通用户
用户名:simpleUser
密码:simplePass
权限:读写数据库 foo, 只读数据库 bar。

注意
NOTE
WARN
use foo表示用户在 foo 库中创建,就一定要 foo 库验证身份,即用户的信息跟随随数据库。比如上述 simpleUser 虽然有 bar 库的读取权限,但是一定要先在 foo 库进行身份验证,直接访问会提示验证失败。

use foo
db.auth("simpleUser", "simplePass")

use bar
show collections

还有一点需要注意,如果 admin 库没有任何用户的话,即使在其他数据库中创建了用户,启用身份验证,默认的连接方式依然会有超级权限

2.4 内建角色

  • Read:允许用户读取指定数据库
  • readWrite:允许用户读写指定数据库
  • dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
  • userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
  • clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
  • readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
  • readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
  • userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
  • dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
  • root:只在admin数据库中可用。超级账号,超级权限

2.5 URI 形式的访问

生产中常用 URI 形式对数据库进行连接

mongodb://your.db.ip.address:27017/foo

添加用户名密码验证

mongodb://simpleUser:[email protected]:27017/foo

参考链接

结语

在使用数据库的过程中,一定要注意安全风险,由于 Mongodb 的默认配置,使得数据库有入侵风险,应该予以防范。

作者:kimoCHG
链接:https://www.jianshu.com/p/79caa1cc49a5
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

原文地址:https://www.cnblogs.com/ExMan/p/9696227.html

时间: 2024-08-27 19:34:12

MongoDB 用户名密码登录的相关文章

关于spring-data-mongodb用户名密码登录报错问题:Failed to authenticate to database

一.问题 1.spring-data-mongodb用户名密码登录报错问题:Failed to authenticate to database  org.springframework.data.mongodb.CannotGetMongoDbConnectionException: Failed to authenticate to database [ashop], username = [ashop], password = [g***********4] org.springframe

使用openssh实现免密码登录,免用户名+密码登录

有时候经常登录某台主机,会懒得输入密码,输入个用户名登录,像我这种更懒的,密码也懒得输入: 创建虚拟机:centos7 HuaiqingdeMBP:~ huaiqingcheng$ vagrant box add centos7 /Users/huaiqingcheng/Downloads/centos-7.0-x86_64.box ==> box: Box file was not detected as metadata. Adding it directly... ==> box: Ad

zabbix3.0 监控mysql服务免用户名密码登录的问题故障处理详细过程

1,My.cnf中用户名密码无效 在azure云上面,使用Zabbix监控mysql中,发现在/usr/local/mysql/my.cnf里面设置的默认用户名密码无效,出不来数据,而且在zabbix服务器上,使用zabbix_get也报错failed,如下 [[email protected]_serv_121_12 ~]#/usr/local/zabbix/bin/zabbix_get -s 192.168.13.13 -p10050 -kmysql.status[Uptime] /usr/

安装openvpn并使用证书+用户名密码登录

openvpn是一个vpn工具,用于创建虚拟专用网络(Virtual Private Network)加密通道的免费开源软件,提供证书验证功能,也支持用户名密码认证登录方式,当然也支持两者合一,为服务器登录和连接提供更加安全的方式,可以在不同网络访问场所之间搭建类似于局域网的专用网络通道,配合特定的代理服务器,可用于访问特定受限网站(你懂得)或者突破内部网络限制. 安装 模拟运行环境:centos6系列系统 # 关闭selinux setenforce 0 sed -i '/^SELINUX=/

Spring Security之用户名+密码登录

自定义用户认证逻辑 处理用户信息获取逻辑 实现UserDetailsService接口 @Service public class MyUserDetailsService implements UserDetailsService { private Logger logger = LoggerFactory.getLogger(getClass()); @Override public UserDetails loadUserByUsername(String username) throw

【Python练习】文件引用用户名密码登录系统

1 #coding=utf-8 2 from selenium import webdriver 3 #from selenium.common.exceptions import NosuchElementException 4 import unittest,os,time 5 6 source=open("F:\\script\\py_scripts\\login_parameter\\username.txt","r")#用户名文件 7 un = sourc

Vue(vue+node.js+mongodb)_登录注册(密码登录)

一.前言 1.密码登录(分析) 2.验证码部分 3.提交表单 4.保存显示 5.完善功能,首页中如果登录成功之后显示的是图标,没有登录显示的是“注册登录” 6.处理bug(当我们一刷新之后当前登录的信息都没有了) 二.主要内容 1.密码登录(分析) (1)第一步用户输入先提交登录表单信息 2.验证码部分 这里显示的验证码,在通过异步调用获取到,并且在后端存进session中 (1)前端部分 <!--获取验证码:前端--> <input type="text" maxl

Oracle 10g 默认安装带来的用户名/密码

ORACLE数据库创建的时候,创建了一系列默认的用户和表空间 Oracle 10g 默认安装带来的用户名/密码 Username Password Description See Also CTXSYS CTXSYS The Oracle Text account Oracle Text Reference DBSNMP DBSNMP The account used by the Management Agent component of Oracle Enterprise Manager t

MongoDB安装及用户名密码管理

安装 一.tar包进行安装 1.百度网盘 http://pan.baidu.com/s/1FOH2m 2.https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6.tgz 二.yum源进行安装 Configure the package management system (yum).改变 创建一个 /etc/yum.repos.d/mongodb-org-3.0.repo 文件,如此你就可以直接用yum安装MongoDB. 改到 3