MongoDB数据库的密码和权限问题
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)
常用的角色或者说对于向我们这种萌新使用的话,一般包括:dbOwner
、dbAdminAnyDatabase
、root
,当然由于dbAdminAnyDatabase
的特殊性,可能用的也不多,稍微严格点的可能还会用到read
和readWrite
。
基于阿里云服务器+宝塔面板和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里面调用系统函数查所有用户你会发现,查询结果就像是一条记录,有_id
,objectId
等信息。其他的好像也没有了,因为这种用户一旦确定很少会修改。
!!!
记住,改完之后需要修改配置文件,将配置文件里面的authorization
,然后重启服务。
3.3连接mongoDB
这里我们使用mongDB compass
来连接数据库,使用方法如下:
填写ip、端口、用户名和密码就行,然后点击连接就行。最后,实践发现dbOwner
、dbAdminAnyDatabase
、root
三种不同的用户中,在admin数据库中root
和dbAdminAnyDatabase
没有任何区别,两个能够互删(其实按道理这个应该dbAdminAnyDatabase
是没有权限删除root
的(小声)),于是很好奇这两者的区别,最后有趣的一幕发生了:dbOwner
只能查看它所对应的数据库,看不了其他数据库,dbAdminAnyDatabase
能看到所有的数据库,但是看不到任何数据库里面的内容,只是保留了编辑权限,就尬住了:
root
能够查看所有数据库的详细信息,root
还是root
啊!
MongoDB数据库的密码和权限问题相关推荐
- Mongodb数据库被黑,怎么处理?
最近碰到一件特别恶心的事情 Mongodb数据库被黑了 被勒索0.04比特币(一个比特币现在是1.8万美刀,就快1.9万了) 肯定不能惯着这帮孙子 直接上解决办法 1.卸载服务器之前安装的Mongod ...
- java连接远程带有密码的mongodb数据库
java连接远程带有密码的mongodb数据库 java连接远程带有密码的mongodb数据库,这个是我们研究java以及mongodb数据库的人都必须研究的,mongo我们可以在远程设置远程的mon ...
- MongoDB设置登录账号,密码及权限
小提示 首先进入mongodb的config.conf配置文件,将authorization设置为enabled(表示启用 MongoDB认证功能)并重新启动mongodb.如果不会安装mongodb ...
- python连接mongodb数据库密码_windows下mongodb设置用户名密码用python连接
环境: 主机:WIN10 python版本:3.5 mongodb版本:3.4.2 开发环境:pyCharm mongodb设置用户名密码: 编写mongodb配置文件mongodb.conf dbp ...
- 二、mongodb数据库系列——聚合操作 索引操作 权限管理
一.mongodb的聚合操作 学习目标 了解 mongodb的聚合原理 掌握 mongdb的管道命令 掌握 mongdb的表达式 1 mongodb的聚合是什么 聚合(aggregate)是基于数据处 ...
- SQLPlus无法登录数据库提示密码不对或权限不足
SQLPlus无法登录数据库提示密码不对或权限不足 问题现象: sqlpus / as sysdba,提示权限不足,sqlplus system/oracle@orcl无法登录数据库,实际密码 ...
- mongoDB设置用户名密码的一个要点
2019独角兽企业重金招聘Python工程师标准>>> 增加用户之前, 先选好库 use <库名> #选择admin库后可查看system.users里面的用户数据 db ...
- mongodb数据库显示obj_MongoDB基础(三)—基本操作及管理 | leon的博客
第1章 MongoDB的基本操作 1.1 查询帮助信息 > help db.help() help on db methods db.mycoll.help ...
- 连接MongoDB 3.x 报 Authorization failed 解决办法(自己只用到了创建mongodb账号和密码的部分亲测)
最近安装了mongodb3.1.4,并启用了权限验证,在dos窗口下操作没有任何问题,为了维护方便就下载了一个客户端工具Robomongo 0.8.5,用户名.密码的等配置好点击测试,结果连接服务没有 ...
最新文章
- TF:tensorflow框架中常用函数介绍—tf.Variable()和tf.get_variable()用法及其区别
- 客户端相关知识学习(五)之什么是webView
- mysql-5.6.17-win32的安装?
- mysql 8 sql server_终于将 SQL Server 成功迁移至 MySQL8.0 啦!!!
- pytorch CNN
- 限制滥用举报功能的小建议
- Tricks(三十六)—— remove_list_entry(无需 if 逻辑)
- 【CCCC】L3-019 代码排版 (30分),大模拟
- 大数据处理系统有哪些
- Python 实现 Discuz论坛附件下载权限绕过漏洞
- 人在年轻的时候,最核心的能力是什么?-复利(转自知乎)
- 【错误记录】Android 编译报错 ( Installed Build Tools revision 31.0.0 is corrupted. Remove and install again )
- 阿里巴巴python开发面试题_2019阿里巴巴面试题集锦(有答案哦),收藏!
- 企业级微信小程序实战详解
- 低调,中国的FPGA到底有多强?
- fanuc机器人基于程序号码选择(PNS)的自动运转
- 联想集团创始人柳传志为何选择在75岁时退休?新一任会是谁?
- Cryptohack刷题记录(一) General部分 WP
- 户口迁入深圳的优劣势一览
- c语言中set 函数,C里边的STL里边的Set函数