1、MongoDB的用户和角色权限简介

默认情况下,MongoDB实例启动运行时是没有启用用户访问权限控制的,在实例本机服务器上都可以随意连接到实例进行各种操作,MongoDB不会对连接客户端进行用户验证,这是非常危险的。

为了能保障mongodb的安全可以做以下几个步骤:

1)使用新的端口,默认的27017端口如果一旦知道了ip就能连接上,不太安全。

2)设置mongodb的网络环境,最好将mongodb部署到公司服务器内网,这样外网是访问不到的。公司内部访问使用vpn等。

3)开启安全认证。认证要同时设置服务器之间的内部认证方式,同时要设置客户端连接到集群的账号密码认证方式。

为了强制开启用户访问控制(用户验证),则需要在MongoDB实例启动时使用选项 --auth 或在指定启动配置文件中添加选项 auth=true 。

关于角色权限的查看:

// 查询所有角色权限(仅用户自定义角色)
> db.runCommand({ rolesInfo: 1 })
// 查询所有角色权限(包含内置角色)
> db.runCommand({ rolesInfo: 1, showBuiltinRoles: true })
// 查询当前数据库中的某角色的权限
> db.runCommand({ rolesInfo: "<rolename>" })
// 查询其它数据库中指定的角色权限
> db.runCommand({ rolesInfo: { role: "<rolename>", db: "<database>" } }
// 查询多个角色权限
> db.runCommand({rolesInfo: ["<rolename>",{ role: "<rolename>", db: "<database>" },...]}
)

常用的内置角色:

  • 数据库用户角色:read、readWrite;
  • 所有数据库用户角色:readAnyDatabase、readWriteAnyDatabase、 userAdminAnyDatabase、dbAdminAnyDatabase
  • 数据库管理角色:dbAdmin、dbOwner、userAdmin;
  • 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
  • 备份恢复角色:backup、restore;
  • 超级用户角色:root
  • 内部角色:system

2、单实例环境

(1)关闭已开启的服务

先停止之前的服务,停止服务的方式有两种:快速关闭和标准关闭

1)快速关闭方法(快速,简单,数据可能会出错)

通过系统的kill命令直接杀死进程: 杀完要检查一下,避免有的没有杀掉。

#通过进程编号关闭节点
kill -2 54410

如果一旦是因为数据损坏,则需要进行如下操作

删除lock文件:

rm -f /mongodb/single/data/db/*.lock

修复数据:

/usr/local/mongodb/bin/mongod --repair --dbpath=/mongodb/single/data/db

(2)标准的关闭方法

通过mongo客户端中的shutdownServer命令来关闭服务

//客户端登录服务,注意,这里通过localhost登录,如果需要远程登录,必须先登录认证才行。
mongo --port 27017
//#切换到admin库
use admin
//关闭服务
db.shutdownServer()

(3)添加用户和权限

1)先按照普通无授权认证的配置,来配置服务端的配置文件 /mongodb/single/mongod.conf :

systemLog:#MongoDB发送所有日志输出的目标指定为文件destination: file#mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径path: "/mongodb/single/log/mongod.log"#当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾。logAppend: true
storage:#mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod。dbPath: "/mongodb/single/data/db"journal:#启用或禁用持久性日志以确保数据文件保持有效和可恢复。enabled: true
processManagement:#启用在后台运行mongos或mongod进程的守护进程模式。fork: true#指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PIDpidFilePath: "/mongodb/single/log/mongod.pid"
net:#服务实例绑定的IPbindIp: localhost,192.168.0.2#绑定的端口port: 27017

2)按之前未开启认证的方式(不添加 --auth 参数)来启动MongoDB服务:

/usr/local/mongodb/bin/mongod -f /mongodb/single/mongod.conf

3)使用Mongo客户端登录:

/usr/local/mongodb/bin/mongo --host 180.76.159.126 --port 27017

4)创建两个管理员用户,一个是系统的超级管理员 myroot ,一个是admin库的管理用户 myadmin :

//切换到admin库
> use admin
//创建系统超级用户 myroot,设置密码123456,设置角色root
//> db.createUser({user:"myroot",pwd:"123456",roles:[ { "role" : "root", "db" : "admin"}]})
//或
> db.createUser({user:"myroot",pwd:"123456",roles:["root"]})
Successfully added user: { "user" : "myroot", "roles" : [ "root" ] }
//创建专门用来管理admin库的账号myadmin,只用来作为用户权限的管理
> db.createUser({user:"myadmin",pwd:"123456",roles:
[{role:"userAdminAnyDatabase",db:"admin"}]})
Successfully added user: {"user" : "myadmin","roles" : [{"role" : "userAdminAnyDatabase","db" : "admin"}]
}
//查看已经创建了的用户的情况:
> db.system.users.find()
//删除用户
> db.dropUser("myadmin")
true
> db.system.users.find()
//修改密码
> db.changeUserPassword("myroot", "123456")

和其它数据库(MySQL)一样,权限的管理都差不多一样,也是将用户和权限信息保存到数据库对 应的表中。Mongodb存储所有的用户信息在admin 数据库的集合system.users中,保存用户名、密码 和数据库信息。

如果不指定数据库,则创建的指定的权限的用户在所有的数据库上有效,如 {role: "userAdminAnyDatabase", db:""}

5)认证测试

//切换到admin
> use admin
//密码输错
> db.auth("myroot","12345")
Error: Authentication failed.
0
//密码正确
> db.auth("myroot","123456")
1

(3)服务端开启认证和客户端连接登录

1)关闭已经启动的服务

2)以开启认证的方式启动服务

有两种方式开启权限认证启动服务:一种是参数方式,一种是配置文件方式。

参数方式

/usr/local/mongodb/bin/mongod -f /mongodb/single/mongod.conf --auth

配置文件方式,在mongod.conf配置文件中加入: vim /mongodb/single/mongod.conf

security:#开启授权认证authorization: enabled

启动时可不加 --auth 参数:

/usr/local/mongodb/bin/mongod -f /mongodb/single/mongod.conf

3)开启了认证的情况下的客户端登录

先连接再认证

[root@bobohost bin]# /usr/local/mongodb/bin/mongo --host 180.76.159.126 --port
27017
MongoDB shell version v4.0.10
connecting to: mongodb://180.76.159.126:27017/?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("53fef661-35d6-4d29-b07c-020291d62e1a")
}
MongoDB server version: 4.0.10

连接时直接认证

[root@bobohost ~]# /usr/local/mongodb/bin/mongo --host 180.76.159.126 --port
27017 --authenticationDatabase admin -u myroot -p 123456
MongoDB shell version v4.0.10

(4)SpringDataMongoDB连接认证

使用用户名和密码连接到 MongoDB 服务器,你必须使用 'username:password@hostname/dbname' 格式,'username'为用户名,'password' 为密码。

application.yml:

spring:#数据源配置data:mongodb:# 主机地址# host: 180.76.159.126# 数据库# database: articledb# 默认端口是27017# port: 27017#帐号# username: bobo#密码# password: 123456#单机有认证的情况下,也使用字符串连接uri: mongodb://bobo:123456@180.76.159.126:27017/articledb

MongoDB——高级——集群和安全:安全认证(八)相关推荐

  1. MongoDb分片集群认证

    本文主要基于已经搭建好的未认证集群,结合上篇Mongodb副本集分片集群模式环境部署(https://www.cnblogs.com/woxingwoxue/p/9875878.html), Mong ...

  2. 实战:MongoDB 分片集群Shard Cluster 搭建(1台路由节点,3台配置节点,9台分片节点)

    MongoDB 分片集群搭建(分片集群安全认证+SpringBoot访问) 一.搭建要求 一台路由节点 IP地址:192.168.80.110 端口:11111 三套复制集(每个分片节点中的复制集 都 ...

  3. Mongodb的集群

    序言 Mongodb的集群环境,的工作原理简单梳理下.当然也是站在别人的肩膀上(多人的肩膀上).做一个我认为比较好的梳理. 原理是个很重要的东西,可以帮助你解决 你不知道你不知道的问题. 同时也帮助你 ...

  4. 搭建MongoDB分片集群

    在部门服务器搭建MongoDB分片集群,记录整个操作过程,朋友们也可以参考. 计划如下: 用5台机器搭建,IP分别为:192.168.58.5.192.168.58.6.192.168.58.8.19 ...

  5. mongodb 启动_精心总结--mongodb分片集群启动与关闭

    概述 网上教程有点坑啊,很多bug,今天刚好涉及到所以抽空整理了下mongodb分片集群启动与关闭方面的教程.希望对大家有点帮助. 基础环境配置 192.168.240.145 测试Nosql服务器1 ...

  6. mongodb分布式集群搭建手记

    一.架构简介 目标 单机搭建mongodb分布式集群(副本集 + 分片集群),演示mongodb分布式集群的安装部署.简单操作. 说明 在同一个vm启动由两个分片组成的分布式集群,每个分片都是一个PS ...

  7. 【安全】CDH集群开启Kerberos安全认证

    文章目录 1.安装kerberos 2.CDH集群开启Kerberos安全认证 1.安装kerberos 参考:https://blog.csdn.net/qq_21383435/article/de ...

  8. DOCKER-COMPOSE搭建MONGODB分片集群(单机版)

    docker-compose搭建mongodb分片集群(单机版) - 丰哥坑到 - 博客园

  9. OpenShift 4 之 GitOps(6)用ArgoCD部署MongoDB主从集群

    <OpenShift 4.x HOL教程汇总> 文章目录 部署架构 部署MongoDB主从集群 准备操作环境 配置ArgoCD 准备MongoDB所需证书 更新被部署的YAML文件 在三个 ...

最新文章

  1. Powershell管理系列(五)修改AD账号属性
  2. 自定义ViewGroup实现ViewPager的滑动效果
  3. SolrException: Index locked 和 Error opening new searcher 最终解决方案(找了好久才解决)
  4. LeetCode Algorithm 1534. 统计好三元组
  5. 女人,向《奋斗》中的夏琳米莱们学习什么
  6. python里x.pow2_带有Python示例的math.pow()方法
  7. .net core orm框架_轻量级高性能PHP框架ycroute
  8. Java基础题笔记(数组)4
  9. WCF中配置文件解析
  10. window 常用软件
  11. 开发Shell脚本解决DOS安全Linux服务器生产案例
  12. Qt编程之mapx组件编程
  13. vi编辑文件时如何批量替换字符串
  14. 翰文付费打印后还有水印吗_翰文进度计划编制系统去除水印中文增强版
  15. Spark机器学习实验
  16. WebRTC[7]-Failed to set remote offer sdp: Called with SDP without DTLS fingerprint
  17. 拼多多怎么设置快捷回复
  18. 2021年广西省安全员C证免费试题及广西省安全员C证考试试卷
  19. 2021年安徽省职业院校技能大赛 网络搭建与应用竞赛
  20. 数据分析的目的、方法、思路

热门文章

  1. Qt 菜单背景设置颜色 菜单设置颜色
  2. Git 入门到精通,大厂程序员呕心沥血强力推荐
  3. 举个栗子!Tableau 技巧(176):快速添加 Server 受信任的 IP
  4. 举个栗子!Tableau 技巧(139):突出显示文本表的行或列
  5. 0922Android传感器实例指南针
  6. 九大PPT制作伴侣【神器】
  7. 计算机主机组成成分,手机电脑芯片主要由什么物质组成
  8. 第7-6课:遗传算法的两个应用实例
  9. 怎样调整计算机显示屏窗口,怎么调整电脑窗口的大小
  10. oracle import mapping,ORACLE 数据泵导入导出数据