MongoDB开启安全认证
MongoDB开启安全认证
注意
- 对MongoDB部署启用访问控制会强制执行身份验证,要求用户识别自己。当访问启用了访问控制的MongoDB部署时,用户只能执行由其角色确定的操作。
- 启用访问控制后,请确保在admin数据库中拥有userAdmin或userAdminAnyDatabase角色的用户。该用户可以管理用户和角色
未开启复制集的实例
以下过程首先将用户管理员添加到运行无访问控制的MongoDB实例,然后启用访问控制。
启动MongoDB
连接到实例
- 如:
mongo --port=27017
- 1
创建用户管理员
- 在admin数据库中添加具有userAdminAnyDatabase角色的用户。例如:
use admin
db.createUser(
{
user: "myUserAdmin",
pwd: "abc123",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
然后断开连接
重新启动具有访问控制的MongoDB实例
- 使用–auth命令行选项重新启动mongod实例,如果使用配置文件,则使用security.authorization设置。例如:
mongod --auth --port 27017
- 1
或者使用配置文件,增加参数:
security:
authorization: enabled //冒号后面需要空一格
- 1
- 2
以用户管理员身份进行连接和验证
- 在连接期间进行身份验证,例如:
mongo --port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"
- 1
- 连接后验证,例如:
use admin
db.auth("myUserAdmin", "abc123" )
- 1
- 2
- 创建用户的数据库是该用户的身份验证数据库。虽然用户将对该数据库进行身份验证,但用户可以在其他数据库中担任角色;即用户的认证数据库不限制用户的特权。
开启复制集的实例
在副本集中执行密钥文件访问控制
- 对于成员的内部认证,MongoDB可以使用密钥文件,密钥文件的内容作为成员的共享密码。密钥长度必须在6到1024个字符之间,并且只能包含base64集合中的字符
- 密钥文件的内容在所有相互连接的mongod和mongos实例上必须相同。您必须将密钥文件存储在副本集的每个成员上。
- 执行内部认证也强制执行用户访问控制
- 密钥文件是最低限度的安全形式,最适用于测试或开发环境。
注意:执行访问控制的以下过程需要停止mongod服务
创建一个密钥文件
- 使用密钥文件身份验证,副本集中的每个mongod实例使用密钥文件的内容作为共享密码,用于验证部署中的其他成员。可以使用您选择的任何方法生成密钥文件。例如,以下操作使用openssl生成密码文件,然后使用chmod来更改文件权限,以便仅为文件所有者提供读取权限
openssl rand -base64 753 > <path-to-keyfile>
chmod 400 <path-to-keyfile>
- 1
- 2
将密钥文件复制到每个副本集成员
- 将密钥文件复制到托管副本集成员的每个服务器。确保运行mongod实例的用户是文件的所有者,并且可以访问密钥文件
关闭副本集的所有成员
- 关闭复制集中的每个mongod,从次节点开始。直到副本集的所有成员都离线,包括任何仲裁者。主节点必须是最后一个成员关闭以避免潜在的回滚。要关闭mongod,请使用mongo shell连接每个mongod,并在admin数据库上发出db.shutdownServer():
use admin
db.shutdownServer()
- 1
- 2
启动执行访问控制的副本集的每个成员
- 使用keyFile参数运行mongod同时强制内部身份验证和基于角色的访问控制。使用配置文件或命令行启动副本集中的每个mongod。
- 配置文件
如果使用配置文件,请将security.keyFile选项设置为keyfile的路径,
security:
keyFile:<path-to-keyfilie>
- 1
- 2
使用配置文件启动mongod:
mongod --config <path-to-config-file>
- 1
- 命令行
如果使用命令行选项,请使用–keyFile数启动mongod:
mongod --keyFile <path-to-keyfile>
- 1
连接主节点
- 通过localhost接口将mongo shell连接到配置服务器mongod主节点
必须使用localhost接口连接,因为没有为部署创建任何用户。创建第一个用户后,无论您如何连接到mongod,都必须使用该用户进行身份验证。
创建用户管理员
- 创建第一个用户后,localhost异常不再可用。
- 第一个用户必须具有创建其他用户的权限,例如具有userAdminAnyDatabase的用户。这确保您可以在Localhost异常关闭后创建其他用户。
以下示例在admin数据库上创建具有userAdminAnyDatabase角色的用户
admin = db.getSiblingDB("admin")
admin.createUser(
{
user: "fred",
pwd: "changeme1",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
验证用户管理员
- 在mongo shell中,使用db.auth()进行身份验证。
db.getSiblingDB("admin").auth("fred", "changeme1" )
- 1
- 或者使用-u ,-p 和–authenticationDatabase参数将新的mongo shell连接到主副本集成员
mongo -u "fred" -p "changeme1" --authenticationDatabase "admin"
- 1
创建集群管理员(可选)
- 集群管理员用户具有clusterAdmin角色,它允许对复制操作的访问。创建群集管理员用户并在admin数据库中分配clusterAdmin角色,例如:
db.getSiblingDB("admin").createUser(
{
"user" : "ravi",
"pwd" : "changeme2",
roles: [ { "role" : "clusterAdmin", "db" : "admin" } ]
}
)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
创建其他用户(可选)
...
来源:https://blog.csdn.net/jeanette_zlj/article/details/79563954
MongoDB开启安全认证的更多相关文章
- MongoDB开启权限认证
MongoDB默认安装完后,如果在配置文件中没有加上auth = true,是没有用户权限认证的,这样对于一个数据库来说是相对不安全的,尤其是在外网的情况下. 接下来是配置权限的过程: //切入到 ...
- mongodb复制集开启安全认证
之前我有一篇博客写的是“node.js通过权限验证连接MongoDB”,这篇博客上提到如何在启动文件中通过配置auth参数来开启权限认证,但这种认证方式只适合单机节点,当我们使用复制集时应该怎么开启权 ...
- mongodb分片集群开启安全认证
原文地址:https://blog.csdn.net/uncle_david/article/details/78713551 对于搭建好的mongodb副本集加分片集群,为了安全,启动安全认证,使用 ...
- mongodb集群搭建(分片+副本)开启安全认证
关于安全认证得总结: 这个讲述的步骤也是先创建超管用户,关闭服务,然后生成密钥文件,开启安全认证,启动服务 相关概念 先来看一张图: 从图中可以看到有四个组件:mongos.config server ...
- MongDB开启权限认证
在生产环境中MongoDB已经使用有一段时间了,但对于MongoDB的数据存储一直没有使用到权限访问(MongoDB默认设置为无权限访问限制),最近在酷壳网看了一篇技术文章(https://cools ...
- Docker Mongo数据库开启用户认证
一.启动mongo容器的几种方式 #简化版 docker run --name mongo1 -p 21117:27017 -d mongo --noprealloc --smallfiles #自定 ...
- Mongo开启用户认证
1. 介绍 由于mongodb默认没有设置密码访问,而且mongodb的访问权限设计,必须使用有权限的用户给每个库设置一个用户,才能使用,且2.X版本与3.X版本区别有点大,所以要注意以下几点. ...
- ios开启双重认证之填坑式教学
2019.03.01.阳光明媚(不,,,有些雾霾..) 本来打算发布一个新版本app,修复一些小小bug, 然而,打包出错了,,错误是显示账号无连接.. 顿时慌出了天际,,以为是账号的证书问题,,最烦 ...
- Nginx 基于客户端 IP 来开启/关闭认证
前些日子帮助公司在搭建了一个内部资源的导航页面,方便公司员工访问各种常用的系统.因为这个页面包含一些敏感信息,我们希望对其做认证,但仅当从外网访问的时候才开启,当从公司内网访问的时候,则无需输入账号密 ...
随机推荐
- 浅谈Spark2.x中的Structured Streaming
在Spark2.x中,Spark Streaming获得了比较全面的升级,称为Structured Streaming,和之前的很不同,功能更强大,效率更高,跟其他的组件整合性也更好. 连续应用程序c ...
- Cout<<XXX<<<XXX<<<XXX,是从左到右计算的
int a=1,b=2,c=3; cout<<(c=a+b)<<' '<<(a=b+c)<<' '<<(b=a+c)<<e ...
- JMS API(二)
JMS 公共API 接口共7个: 1.ConnectionFactory 2.Destination 3.Connection 4.Session 5.Message 6.MessageProduce ...
- java中静态变量,静态代码块,静态方法,实例变量,匿名代码块等的加载顺序
转自:http://blog.csdn.net/mrzhoug/article/details/51581994 一.在Java中,使用”{}”括起来的代码称为代码块,代码块可以分为以下四种: 1.普 ...
- C#基础--多线程
一.微软早期操作系统中的问题 在早期的操作系统中,应用程序都是在同一个地址空间中运行的,每个程序的数据其它程序都是可见的,并且因为早期CPU是单内核 的所以所有的执行都是线性的.这就引出两个问题: 第 ...
- WebAPI请求——js调用
继续接着上文 ASP.NET MVC学习系列(一)-WebAPI初探 来看看对于一般前台页面发起的get和post请求,我们在Web API中要如何来处理. 这里我使用jQuery 来发起异步请求实现 ...
- mouseleave mouseout时候悬浮框不应该消失的时候消失了 css 解决办法
要实现的效果和代码思路 简单来说就是 用一个div包着喇叭和悬浮框 悬浮事件写在这个div上 鼠标悬浮到div上的时候 悬浮框出现 最终要做成鼠标从小喇叭移动到下面的框上的时候 下面框是不会消失的. ...
- goquery常用语法
Find 查找获取当前匹配的每个元素的后代Eq 选择第几个Attr 获取对应的标签属性AttrOr 获取对应的标签属性.这个可以设置第二个参数.获取的默认值 如果获取不到默认调用对应默认值Each 遍 ...
- 20145327 《Java程序设计》第十周学习总结
20145327 <Java程序设计>第十周学习总结 教材学习内容总结 网络编程就是运行在不同计算机中两个程序之间的数据交换. 网络中的每个设备都会有一个唯一的数字标识,这个就是IP地址. ...
- 20145240《网络对抗》Web基础
Web基础 实验后回答问题 什么是表单? 表单在网页中主要负责数据采集功能. 一个表单有三个基本组成部分: 表单标签:这里面包含了处理表单数据所用CGI程序的URL以及数据提交到服务器的方法. 表单域 ...