MongoDB数据库的密码和权限问题

  • 1.引言
  • 2.mongoDB设置密码
  • 3.mongoDB用户权限
    • 3.1mongoDB修改默认端口
    • 3.2mongoDB设置用户
    • 3.3连接mongoDB

1.引言

    前几天发现自己的数据库被大佬入侵了,主要原因是mongoDB数据没有设置用户名和密码,加上数据库使用的默认端口号都没有改,拿到我的网站ip直接就能访问,于是花了点事件看了看相关的知识,总结分享给大家。

2.mongoDB设置密码

    首先需要明确一点,mongoDB默认是没有数据库和密码的,需要手动设置。具体的可以类比于mysql数据库,虽然两者不是同一种数据库,但是两者在权限管理上极为相似。设置密码其实就是里面拥有各种权限的用户带有的密码,由不同的用户名和密码对应不同权限的连接。所以,用户密码归根到底还是用户权限问题。

3.mongoDB用户权限

    首先说明mongoDB里面存在的各种权限:
(1)数据库用户角色:read、readWrite;
(2)数据库管理角色:dbAdmin、dbOwner、userAdmin;
(3)集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
(4)备份恢复角色:backup、restore;
(5)所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
(6)超级用户角色:root
(7)系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
    常用的角色或者说对于向我们这种萌新使用的话,一般包括:dbOwnerdbAdminAnyDatabaseroot ,当然由于dbAdminAnyDatabase的特殊性,可能用的也不多,稍微严格点的可能还会用到readreadWrite
    基于阿里云服务器+宝塔面板和MongoDB 4.4.6,经过不断尝试,得到如下结论:

3.1mongoDB修改默认端口

    修改默认端口之后,需要重启mongoDB服务。如果使用了宝塔面板,可以直接在面板处快捷修改(因为被攻击过这里就不展示端口号了):

    当然,也可以直接去mongoDB的配置项里面修改(因操作系统或者版本不同,路径可能稍有差异,但是一定会存在这个配置文件的):

    修改之后记得重启服务。可能你发现连不上去了,系统直接把这个连接路径看成了文件目录了,解决方法:使用如下访问方式:

mongo mongodb://127.0.0.1:{你设置的端口}/

3.2mongoDB设置用户

    这里直接给出案例,然后再来说明:

//创建root用户
use admin
db.createUser({user:"超级管理员名称",pwd:"你的密码",roles:["root"]})
db.auth("超级管理员名称","你的密码")//创建管理用户
db.createUser({ user: "管理员名称", pwd: "你的密码", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] })
db.auth("管理员名称","你的密码")//创建用户
use 被指定数据库
db.createUser({ user: "所有者用户名", pwd: "你的密码", roles: [{ role: "dbOwner", db: "指定数据库名称" }] })
db.auth("所有者用户名","你的密码")

    说明:创建root级别的用户和管理员级别的用户都只能在admin数据库里面执行,创建指定数据库的所有者需要通过use切换数据库。另外,需要注意,系统级别的函数,比如:db.system.users.find()(查看系统所有用户),只能在admin数据库下执行,创建用户和执行其他系统函数的时候需要使用db.auth验证权限:

    指定的数据库某个非admin数据库里面只含有部分角色,比如某个test数据库里面不含有dbAdminAnyDatabase等用户,也就是说创建用户并赋予权限的时候是不能设置这些用户身份的。另外这些指定的数据库里面也不能指定系统级别的函数,除上面那个外,常用的还有这些:

//删除指定数据库,结果返回删除的用户个数
db.system.users.remove({user:'root'})

    其语法同基本的mongoDB语法,其实在admin里面调用系统函数查所有用户你会发现,查询结果就像是一条记录,有_idobjectId等信息。其他的好像也没有了,因为这种用户一旦确定很少会修改。
    !!!记住,改完之后需要修改配置文件,将配置文件里面的authorization,然后重启服务。

3.3连接mongoDB

    这里我们使用mongDB compass来连接数据库,使用方法如下:


填写ip、端口、用户名和密码就行,然后点击连接就行。最后,实践发现dbOwnerdbAdminAnyDatabaseroot 三种不同的用户中,在admin数据库中rootdbAdminAnyDatabase没有任何区别,两个能够互删(其实按道理这个应该dbAdminAnyDatabase是没有权限删除root的(小声)),于是很好奇这两者的区别,最后有趣的一幕发生了:dbOwner只能查看它所对应的数据库,看不了其他数据库,dbAdminAnyDatabase能看到所有的数据库,但是看不到任何数据库里面的内容,只是保留了编辑权限,就尬住了:

root能够查看所有数据库的详细信息,root还是root啊!

MongoDB数据库的密码和权限问题相关推荐

  1. Mongodb数据库被黑,怎么处理?

    最近碰到一件特别恶心的事情 Mongodb数据库被黑了 被勒索0.04比特币(一个比特币现在是1.8万美刀,就快1.9万了) 肯定不能惯着这帮孙子 直接上解决办法 1.卸载服务器之前安装的Mongod ...

  2. java连接远程带有密码的mongodb数据库

    java连接远程带有密码的mongodb数据库 java连接远程带有密码的mongodb数据库,这个是我们研究java以及mongodb数据库的人都必须研究的,mongo我们可以在远程设置远程的mon ...

  3. MongoDB设置登录账号,密码及权限

    小提示 首先进入mongodb的config.conf配置文件,将authorization设置为enabled(表示启用 MongoDB认证功能)并重新启动mongodb.如果不会安装mongodb ...

  4. python连接mongodb数据库密码_windows下mongodb设置用户名密码用python连接

    环境: 主机:WIN10 python版本:3.5 mongodb版本:3.4.2 开发环境:pyCharm mongodb设置用户名密码: 编写mongodb配置文件mongodb.conf dbp ...

  5. 二、mongodb数据库系列——聚合操作 索引操作 权限管理

    一.mongodb的聚合操作 学习目标 了解 mongodb的聚合原理 掌握 mongdb的管道命令 掌握 mongdb的表达式 1 mongodb的聚合是什么 聚合(aggregate)是基于数据处 ...

  6. SQLPlus无法登录数据库提示密码不对或权限不足

    SQLPlus无法登录数据库提示密码不对或权限不足 问题现象:     sqlpus / as sysdba,提示权限不足,sqlplus system/oracle@orcl无法登录数据库,实际密码 ...

  7. mongoDB设置用户名密码的一个要点

    2019独角兽企业重金招聘Python工程师标准>>> 增加用户之前, 先选好库 use <库名> #选择admin库后可查看system.users里面的用户数据 db ...

  8. mongodb数据库显示obj_MongoDB基础(三)—基本操作及管理 | leon的博客

    第1章 MongoDB的基本操作 1.1 查询帮助信息 > help db.help()                    help on db methods db.mycoll.help ...

  9. 连接MongoDB 3.x 报 Authorization failed 解决办法(自己只用到了创建mongodb账号和密码的部分亲测)

    最近安装了mongodb3.1.4,并启用了权限验证,在dos窗口下操作没有任何问题,为了维护方便就下载了一个客户端工具Robomongo 0.8.5,用户名.密码的等配置好点击测试,结果连接服务没有 ...

最新文章

  1. TF:tensorflow框架中常用函数介绍—tf.Variable()和tf.get_variable()用法及其区别
  2. 客户端相关知识学习(五)之什么是webView
  3. mysql-5.6.17-win32的安装?
  4. mysql 8 sql server_终于将 SQL Server 成功迁移至 MySQL8.0 啦!!!
  5. pytorch CNN
  6. 限制滥用举报功能的小建议
  7. Tricks(三十六)—— remove_list_entry(无需 if 逻辑)
  8. 【CCCC】L3-019 代码排版 (30分),大模拟
  9. 大数据处理系统有哪些
  10. Python 实现 Discuz论坛附件下载权限绕过漏洞
  11. 人在年轻的时候,最核心的能力是什么?-复利(转自知乎)
  12. 【错误记录】Android 编译报错 ( Installed Build Tools revision 31.0.0 is corrupted. Remove and install again )
  13. 阿里巴巴python开发面试题_2019阿里巴巴面试题集锦(有答案哦),收藏!
  14. 企业级微信小程序实战详解
  15. 低调,中国的FPGA到底有多强?
  16. fanuc机器人基于程序号码选择(PNS)的自动运转
  17. 联想集团创始人柳传志为何选择在75岁时退休?新一任会是谁?
  18. Cryptohack刷题记录(一) General部分 WP
  19. 户口迁入深圳的优劣势一览
  20. c语言中set 函数,C里边的STL里边的Set函数

热门文章

  1. Spring 循环依赖 以及解决方式
  2. validate如何使用
  3. LTE测量事件主要有下面几种:Event A1、Event A2、Event A3、Event A4、Event A5、Event B1、Event B2...
  4. Storm之分布式搭建
  5. 洛谷 P1650 赛马
  6. qeephp内容分页
  7. ECCV 2022 | 浙大提出:基于骨骼点的少样本动作识别
  8. mysql触发器if_Mysql 触发器
  9. 《计算机图形学原理及实践》学习笔记之第三章
  10. stm32f103读取电子罗盘数据