1. 介绍

  由于mongodb默认没有设置密码访问,而且mongodb的访问权限设计,必须使用有权限的用户给每个库设置一个用户,才能使用,且2.X版本与3.X版本区别有点大,所以要注意以下几点。

1.mongodb是没有默认管理员账号,所以要先添加管理员账号,在开启权限认证。

2.切换到admin数据库,添加的账号才是管理员账号。

3.用户只能在用户所在数据库登录,包括管理员账号。

4.管理员可以管理所有数据库,但是不能直接管理其他数据库,要先在其它数据库下认证才可以。

5.用户创建只能在本地。

6.mongo命令工具远程时,备份时,命令仅向下兼容。

2. Mongo的内置角色

  在mongo里面,有许多内置角色对应各种权限,下面简单介绍一下。

  • Built-In Roles(内置角色):

数据库用户角色:read、readWrite;

数据库管理角色:dbAdmin、dbOwner、userAdmin;

集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;

备份恢复角色:backup、restore;

所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase

超级用户角色:root

// 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)

内部角色:__system

  • 具体权限

Read:允许用户读取指定数据库

readWrite:允许用户读写指定数据库

dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile

userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户

clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。

readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限

readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限

userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限

dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。

root:只在admin数据库中可用。超级账号,超级权限。

3. Mongo2.4版本开启用户认证

  由于2.4版本比较老,且2.4一般为centos6.5默认包版本,所以2.4版本只是简单的讲解一下步骤。

1.首先开启了用户认证后,第一次登录还是不需要密码的。

2.进入admin数据库,然后创建一个管理账户。

  Use 数据库名,如果没有改库,那么就会自动创建这个库

Mongo2.4版本创建数据库如果没有其它readonly或者其它要求,创建只需要用户名以及密码就可以了

3.一旦创建了用户,首先需要认证,否则在改库下做任何操作都没有权限。

4.认证后查看

返回值为1代表认证成功

5.查看当前数据库下的用户

6.现在创建了admin的数据库,可以查看其它数据库,在本地登录时,mongo2.4版本只要登录了admin账户,那么可以切换到其它数据库做操作

7.远程访问admin数据库可登录,访问lizexiong数据库无效

在远程上无法授权和创建用户,并且,如果lizexiong库没有用户,直接远程过来会失败,但是远程登录admin之后在切换lizexiong库是没有问题的,但lizexiong库如果没有用户,java,php等程序直接连接lizexiong库会失败,所以需要给lizexiong创建一个用户.这里为了方便记忆,所以用户名和密码与admin库一模一样。

Mongo3.X如果给了root权限可以随意切换(前提是在非admin库下创建root角色),且3.X版本查看用户以及角色命令发生变化,信息更加详细。

首先测试远程admin并且切换到lizexiong操作成功

然后直接远程lizexiong失败

8.给lizexiong库设置用户,然后远程访问

创建用户

远程测试,连接上了,此时只能访问lizexiong库里的内容,其它库一概没有权限,而且必须要到本地去给其它库加用户。

9.如果要给其它库创建只读用户,mongo2.4版本只需要加一个True就可以了

 db.addUser('tank2','test',true);

4. Mongo 3.X开启用户认证

  2.X与3.X配置文件完全改版,所以3.X开启用户认证以及添加用户方式完全不同,但是如果程序想要远程连接,还是和2.X版本一样,每一个库都必须有一个用户。

1.Mongo3.X开启用户认证.

由于版本不同,配置文件区别也较大,所以这里贴出配置文件,下文中标黄的就是开启认证

[root@CentOS7 ~]# egrep -v "^#|^$" /etc/mongod.conf.bak
systemLog:
destination: file
logAppend: true
path: /usr/local/mongodb/logs/mongod.log
storage:
dbPath: /usr/local/mongodb/data
journal:
enabled: true
processManagement:
fork: true # fork and run in background
pidFilePath: /usr/local/mongodb/tmp/mongod.pid # location of pidfile
net:
port: 27017
bindIp: 0.0.0.0 # Listen to local interface only, comment to listen on all interfaces.
security:
authorization: enabled

  2.登录,然后切换到admin,发现是没有任何权限的(不同此版本结果不一样,3.4.24可以直接查询)

3.现在创建一个root角色的用户。

3X版本创建用户命令也发生了改变,创建成功之后,还是要去认证一下,否者干什么都是无权限。

> db.createUser(
... {
... user:"root",
... pwd:"huawei",
... roles:[{role:"root",db:"admin"}]
... }
... )
Successfully added user: {
"user" : "root",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
]
}

手动认证

4.现在尝试远程登录admin库成功,登录test库失败,因为test库还没有用户

登录test失败

5.现在给test创建用户,然后尝试远程登录。

给一个库建立用户,那么就要用角色dbOwner,此角色可以限制该用户无法访问其它库信息

远程登录测试

可以看到,无法访问其它库的信息

6.验证,在admin库和test库查看角色和用户信息。

admin

test

7.本小节属于扩展篇,对于其它库远程,使用同一个账户,且可以任意切换数据库。

那就是在比如test库里面创建root角色,然后root的所属库还是admin,不知道算不算一个bug(因为之前版本测试在非admin库里面时是无法创建root角色的)

首先删除dbOwner角色用户,然后创建root角色用户

然后远程访问测试

这个时候可以访问了

可以看到,Mongo里不仅能看到test的信息,还可以看到其它库的信息

然后在user库下面查看用户

所以说这种方式,变相的给了test库加了一个root的角色权限,那么可以即使在远程的时候也可以随意切换库来操作了。

Mongo开启用户认证的更多相关文章

  1. Docker Mongo数据库开启用户认证

    一.启动mongo容器的几种方式 #简化版 docker run --name mongo1 -p 21117:27017 -d mongo --noprealloc --smallfiles #自定 ...

  2. EFK教程(5) - ES集群开启用户认证

    基于ES内置及自定义用户实现kibana和filebeat的认证 作者:"发颠的小狼",欢迎转载 目录 ▪ 用途 ▪ 关闭服务 ▪ elasticsearch-修改elastics ...

  3. EFK-5: ES集群开启用户认证

    转载自:https://mp.weixin.qq.com/s?__biz=MzUyNzk0NTI4MQ==&mid=2247483826&idx=1&sn=583e9a5260 ...

  4. nginx的部署及配置文件的介绍 域名 用户认证 SSL加密模块

    步骤一:构建Nginx服务器 yum -y install gcc pcre-devel openssl-devel        #安装依赖包 wget   http://nginx.org/dow ...

  5. 基于MongodbDB的用户认证-运维笔记

    MongoDB默认是不认证的,默认没有账号,只要能连接上服务就可以对数据库进行各种操作,MongoDB认为安全最好的方法就是在一个可信的环境中运行它,保证之后可信的机器才能访问它,可能这些对一些要求高 ...

  6. MongoDB(3.6.3)的用户认证初识

    Windows 10家庭中文版,MongoDB 3.6.3, 前言 刚刚安装好了MongoDB,启动了服务器-mongod命令,启动了MongoDB shell-mongo命令,不过,全程都没有使用u ...

  7. mongodb复制集开启安全认证

    之前我有一篇博客写的是“node.js通过权限验证连接MongoDB”,这篇博客上提到如何在启动文件中通过配置auth参数来开启权限认证,但这种认证方式只适合单机节点,当我们使用复制集时应该怎么开启权 ...

  8. MongoDB开启安全认证

    MongoDB开启安全认证 注意 对MongoDB部署启用访问控制会强制执行身份验证,要求用户识别自己.当访问启用了访问控制的MongoDB部署时,用户只能执行由其角色确定的操作. 启用访问控制后,请 ...

  9. mongodb分片集群开启安全认证

    原文地址:https://blog.csdn.net/uncle_david/article/details/78713551 对于搭建好的mongodb副本集加分片集群,为了安全,启动安全认证,使用 ...

随机推荐

  1. zabbix自带的模板监控mysql

    科技小能手 2017-11-12 1208浏览量 简介: zabbix官方支持监控MySQL,但直接使用默认的模板是不可用的,还需要经过额外的设置才可以使用.如果只需要对mysql数据库做简单的监控, ...

  2. Otter远程调试

    Otter远程调试 环境配置: 机器 172.16.0.2 172.16.0.3 172.16.0.4 ZK FOLLOWER FOLLOWER LEADER MySQL Manager MySQL ...

  3. LTP--linux稳定性测试 linux性能测试 ltp压力测试 内核更新 稳定性测试

    LTP--linux稳定性测试 linux性能测试 ltp压力测试 zhangzj1030关注14人评论33721人阅读2011-12-09 12:07:45   说明:在写这篇文章之前,本人也不曾了 ...

  4. linux中getopt的用法-(转自pengyingh)

    getopt被用来解析命令行选项参数.就不用自己写东东处理argv了. #include <unistd.h>       extern char *optarg;   //选项的参数指针 ...

  5. docker swarm外部验证负载均衡时不生效

    问题描述 我在本地创建了3个装了centos7的虚拟机, 并初始化了swarm集群, 即1个manager节点, 2个worker节点; 三台机子的ip分别是 192.168.124.8 - (man ...

  6. 出现 关于UTF-8 序列的字节 2 无效的异常

    学习mybatis中碰到了 Caused by: org.apache.ibatis.builder.BuilderException: Error creating document instanc ...

  7. .Net Core gRPC 实战(一)

    gRPC 是一种与语言无关的高性能远程过程调用 (RPC) 框架. gRPC 的主要优点是: 现代高性能轻量级 RPC 框架. 协定优先 API 开发,默认使用协议缓冲区,允许与语言无关的实现. 可用 ...

  8. 在gitlab网页上合并分支

    在gitlab网页上合并分支 使用gitlab网页将代码合并分 下面将dev分支代码合并至master 1.点击request merge 2.源分支为当前分支,目标分支默认为master,确认无误, ...

  9. Go语言网络通信---string与int互转,int64与[]byte互转,int直接互转,string与[]byte互转

    string与int互转 #string到int int,err:=strconv.Atoi(string) #string到int64 int64, err := strconv.ParseInt( ...

  10. Eclipse修改方法内容不用重启Jetty服务器

    我Eclipse以前DEBUG模式时,修改方法里的内容是不用重启的, 现在修改方法里是一行代码都要重启服务器了,很麻烦,速度慢了,找了百度,那些方法对我不合适,可能遇到的问题不一样. 也许会合适遇到和 ...