docker-compose 安装MongoDB续:创建用户及赋权

文章目录

  • 1. 问题描述
  • 2. 分析
    • 2.1 admin
    • 2.2 config
    • 2.3 local
  • 3. 如何连接
  • 3.解决

1. 问题描述

在这一篇使用docker-compose创建MongoDB环境的笔记里,我们创建了数据库,但是似乎没有办法使用如Robo 3T这样的工具去连接数据库。连接的时候会返回这样的错误:
请添加图片描述
从截图可以看出,明显是Authorization失败了。

2. 分析

我们使用了这样的docker-compose.yaml文件来创建MongoDB的环境:

version: "3.8"
services:mongodb:container_name: mongodbimage: mongo:6.0ports:- 27017:27017restart: "no"volumes:- $PWD/data:/data/db- $PWD/logs:/var/log/mongodbenvironment:MONGO_INITDB_ROOT_USERNAME: rootMONGO_INITDB_ROOT_PASSWORD: 123456

配置文件

# mongod.conf# for documentation of all options, see:
#   http://docs.mongodb.org/manual/reference/configuration-options/# Where and how to store data.
storage:dbPath: /var/lib/mongodbjournal:enabled: true
#  engine:
#  wiredTiger:# where to write logging data.
systemLog:destination: filelogAppend: truepath: /var/log/mongodb/mongod.log# network interfaces
net:port: 27017bindIp: 0.0.0.0# how the process runs
processManagement:timeZoneInfo: /usr/share/zoneinfo#security:
auth=true#operationProfiling:#replication:#sharding:## Enterprise-Only Options:#auditLog:#snmp:

在启动数据库环境的时候,这里的INITDB的username和password都是赋值了的,但是这里并不能用这个用户名和密码进行登录。
那么这个用户名和密码是用来做什么的呢?
这个用户名和密码其实是数据库预设的admin库的。我们是可以用这个用户名和密码登录的。请添加图片描述
MongoDB一共有三个系统预设的库:

  • admin
  • config
  • local
    他们分别是用来做什么的呢?

2.1 admin

admin库是用来存储MongoDB的用户、角色等信息。
当MongoDB启用auth选项时,用户需要创建数据库帐号,访问时根据帐号信息来鉴权,而数据库帐号信息就存储在admin数据库下。

root@5db7fcc96e0f:/# mongosh -u root -p 123456
Current Mongosh Log ID:	661f969bdedb617b6878c1b9
Connecting to:		mongodb://<credentials>@127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.6.0
Using MongoDB:		6.0.2
Using Mongosh:		1.6.0For mongosh info see: https://docs.mongodb.com/mongodb-shell/------The server generated these startup warnings when booting2024-04-17T07:59:25.043+00:00: vm.max_map_count is too low
------------Enable MongoDB's free cloud-based monitoring service, which will then receive and displaymetrics about your deployment (disk utilization, CPU, operation statistics, etc).The monitoring data will be available on a MongoDB website with a unique URL accessible to youand anyone you share the URL with. MongoDB may use this information to make productimprovements and to suggest MongoDB products and deployment options to you.To enable free monitoring, run the following command: db.enableFreeMonitoring()To permanently disable this reminder, run the following command: db.disableFreeMonitoring()
------test> show dbs;
admin   148.00 KiB
config  108.00 KiB
local    72.00 KiB
test> use admin
switched to db admin
admin> ls
ReferenceError: ls is not defined
admin> show collections;
system.users
system.version
admin> db.getCollection("system.version").find();
[{ _id: 'featureCompatibilityVersion', version: '6.0' },{ _id: 'authSchema', currentVersion: 5 }
]
admin> db.getCollection("system.users").find();
[{_id: 'admin.root',userId: new UUID("c0456cdb-ee1a-4ac7-a0de-695e48446983"),user: 'root',db: 'admin',credentials: {'SCRAM-SHA-1': {iterationCount: 10000,salt: '+wMEd3wWYjx5M2tuH/S7pg==',storedKey: 'juZ6GSX1639pJM4Xg99X/YLeIiI=',serverKey: 'KH9M9gFvo9DhvHlphTjrLG5HtoM='},'SCRAM-SHA-256': {iterationCount: 15000,salt: 'xJ84t11r+CStAF0EODvMzqPATo5RM8yDallqgA==',storedKey: 'ykgIr3CzzozJnQC5p6dt4quqQs8hcU1npBZFF9Q7b1g=',serverKey: 'C2Y/QrAVVdOTicGCwoAlb0RTYRJMLU02LF+iAQc/WkE='}},roles: [ { role: 'root', db: 'admin' } ]}
]
admin>

admin库里有两个collection:

  • system.version,这张表里存放的是MongoDB的版本信息和authSchema的版本信息。
  • system.users 用户的信息,包括角色

用户可以在admin数据库下建立任意集合,存储任何数据,但强烈建议不要使用admin数据库存储应用业务数据,最好创建新的数据库。
  admin数据库里的system.users、system.roles2个集合的数据MongoDB会cache在内存里,这样不用每次鉴权都从磁盘加载用户角色信息。目前cache的维护代码,只有在保证system.users、system.roles的写入都串行化的情况下才能正确工作。
  MongoDB admin数据库的写入操作的锁级别只能到DB级别,不支持多个collection并发写入,在写入时也不支持并发读取。如果用户在admin数据库里存储业务数据,则可能遭遇性能问题。

2.2 config

config库在使用MongoDB分片功能时起到作用,主要存储分片集群基础信息。
(挖个坑,以后再填,这里没怎么研究过)

2.3 local

local库它只会在本地存储数据,local数据库里的内容不会同步到副本集里其他节点上去;local数据库主要存储副本集的配置信息、oplog信息。
另外,对于重要的数据不能存储在local数据库,还要注意MongoDB默认的WriteConcern是{w: 1},即数据写到Primary上(不保证journal已经写成功)就向客户端确认,这时同样存在丢数据的风险。对于重要的数据,可以设置更高级别的如{w: “majority”}来保证数据写到大多数节点后再向客户端确认,当然这对写入的性能会造成一定的影响。

3. 如何连接

我们可以连接上admin库,那么我们就可以创建数据库,也可以为数据库创建用户,并指定用户的角色,根据不同角色赋予不同的权利。

test> use phone;
switched to db phone
phone> show dbs;
admin   100.00 KiB
config   72.00 KiB
local    72.00 KiB
admin> use admin;
admin> db.auth('root','123456');
{ ok: 1 }
admin> use phone;
switched to db phone
phone> db.createUser({user:'yy',pwd:'yy123456',roles:[{role:"readWrite", db:"phone"}]});
{ ok: 1 }

这里先创建了数据库phone,然后创建了用户yy,并设置密码为yy123456,赋予的role是读写。

数据库用户角色主要read和readWrite。
详细的角色信息看这里内置角色

3.解决

在执行完上面的操作后,就可以通过Robo 3T连接数据库了。
请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/1203.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis:报错Creating Server TCP listening socket *:6379: bind: No error

错误&#xff1a; window下启动redis服务报错&#xff1a; Creating Server TCP listening socket *:6379: bind: No error 原因&#xff1a; 端口6379已被绑定&#xff0c;应该是因为上次未关闭服务 解决&#xff1a; ①依次输入命令&#xff1a; redis-cli.exe &#xff08…

RAG与LLM本身知识存在冲突时,大模型如何抉择?

原文&#xff1a;https://arxiv.org/pdf/2404.10198.pdf 引言 在人工智能领域&#xff0c;大型语言模型&#xff08;LLMs&#xff09;因其强大的语言理解和生成能力而备受关注。然而&#xff0c;这些模型在处理特定问题时可能会产生错误信息&#xff0c;即所谓的“幻觉”&…

【Redis(4)】Redis主从复制模式配置示例

Redis的三种高可用方案对比参考上一篇博客&#xff1a;深入理解Redis三种高可用方案&#xff0c;以做出明智的选择&#xff0c;下面要探讨的是三种方案其中的一种。 在构建高性能的缓存系统时&#xff0c;Redis以其卓越的性能和简单性成为了首选。本文将探讨Redis主从复制的工…

给c++小白的教程6:顺序结构

顺序结构&#xff0c;即代码从上往下顺序运行的结构。 一天&#xff0c;老师给赫炎出了道题:给定a,b,c,d四个整数&#xff0c;算出(ab)*c/d的值 这可难不倒学霸赫炎&#xff0c;但是你会用c来解决他吗&#xff1f; 首先要打出基础代码: #include<bits/stdc.h> using …

springcloud第4季 springcloud-alibaba之sentinel

一 sentinel介绍 1.1 sentinel作用 sentinel是面向分布式、多语言异构化服务架构的流量治理组件&#xff0c;主要以流量为切入点&#xff0c;从流量路由、流量控制、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障服务的稳定性。 1.2 组成部分 sen…

基于人工智能的机动车号牌检测与推理系统v1.0

基于人工智能的机动车号牌检测与推理系统v1.0代码重构与实现。 目前整合3中现有算法&#xff0c;并完成阶段性改造&#xff0c;包括【传统方法检测车牌&#xff0c;SVM推理字符】、【YOLO方法检测车牌&#xff0c;SVM推理字符】、【YOLO方法检测车牌&#xff0c;CNN推理字符】&…

2024年第16周技术复盘

嗨~&#xff0c;我是小路&#xff0c;努力向上生长的前端开发工程师。以下是技术复盘的内容。 本杰明富兰克林曾说&#xff1a;“知识就是力量&#xff0c;而回顾则是保持这种力量的关键。”&#xff0c;第一次看到这话时&#xff0c;感觉脑海像被刺了一针似的&#xff0c;因为…

FPGA - 基于自定义AXI FULL总线的PS和PL交互

前言 在FPGA - ZYNQ 基于Axi_Lite的PS和PL交互中&#xff0c;介绍了基于基于AXi_Lite的PL和PS交互&#xff0c;接下来构建基于基于Axi_Lite的PS和PL交互。 AXI_GP、AXI_HP和AXI_ACP接口 首先看一下ZYNQ SoC的系统框图&#xff0c;如下图所示。在图中&#xff0c;箭头方向代表…

OpenHarmony 蓝牙相关API用法

介绍 本示例通过使用蓝牙低功耗心率服务&#xff0c;展示蓝牙相关API用法。实现了以下几点功能&#xff1a; 发现具有特定服务的设备。连接到设备。发现服务。发现服务的特征、如何读取给定特征的值、为特征设置通知等。 相关概念 BLE扫描&#xff1a;通过BLE扫描接口实现对…

互联网技术知识点总览——计算机网络知识框架

简介 本文对计算机网络的知识点整体框架进行梳理和分享如下&#xff1a;

【深度学习】写实转漫画——CycleGAN原理解析

1、前言 上一篇&#xff0c;我们讲解了按照指定文本标签生成对应图像的CGAN。本篇文章&#xff0c;我们讲CycleGAN。这个模型可以对图像风格进行转化&#xff0c;并且训练还是在非配对的训练集上面进行的&#xff0c;实用性挺大 原论文&#xff1a;Unpaired Image-to-Image T…

服务器部署后 访问出错的原因和解决办法

概要 部署到服务器后无法访问可能是由于配置错误、权限问题或网络设置不当。解决办法包括检查服务器配置文件、确保文件路径正确、调整权限设置以及检查防火墙和端口设置。 一、网络问题 原因 服务器防火墙阻止了访问请求。 服务器的网络配置错误&#xff0c;例如IP地址、子…

自定义鼠标软件 SteerMouse最新完整激活版

SteerMouse是一款实用的Mac OS X系统辅助工具&#xff0c;可以帮助用户自定义鼠标和触控板的设置&#xff0c;提高使用效率。它提供了多种功能&#xff0c;如自定义按钮、滚轮和光标速度&#xff0c;以及调整灵敏度等&#xff0c;使用户能够根据自己的需求和习惯进行优化。 Ste…

idea 将项目上传到gitee远程仓库具体操作

目录标题 一、新建仓库二、初始化项目三、addcommit四、配置远程仓库五、拉取远程仓库内容六、push代码到仓库七、如果是私有仓库可能会拉取失败&#xff08;一&#xff09;需要增加SSH 公钥&#xff08;二&#xff09;把远程仓库地址换成ssh的连接八、如果是私有仓库&#xff…

【PCL】教程conditional_euclidean_clustering 对输入的点云数据进行条件欧式聚类分析...

[done, 3349.09 ms : 19553780 points] Available dimensions: x y z intensity 源点云 Statues_4.pcd 不同条件函数output.pcd 【按5切换到强度通道可视化】 终端输出&#xff1a; Loading... >> Done: 1200.46 ms, 19553780 points Downsampling... >> Done: 411…

学习BOM

目录 前言: 1. BOM组成&#xff1a; 1.1Window 对象&#xff1a; 1.1Location 对象&#xff1a; 1.2Navigator 对象&#xff1a; 1.2.1 navigator 对象包含了关于浏览器的信息包括&#xff1a; 1.3History 对象&#xff1a; 1.4常用的history的方法和属性: 1.4Document…

力扣-LCP 02.分式化简

题解&#xff1a; class Solution:def fraction(self, cont: List[int]) -> List[int]:# 初始化分子和分母为 0 和 1n, m 0, 1# 从最后一个元素开始遍历 cont 列表for a in cont[::-1]:# 更新分子和分母&#xff0c;分别为 m 和 (m * a n)n, m m, (m * a n)# 返回最终的…

大型网站系统架构演化实例_9.分布式服务

1. 第十阶段&#xff1a;分布式服务 随着业务拆分越来越小&#xff0c;存储系统越来越庞大&#xff0c;应用系统的整体复杂度呈指数级增加&#xff0c;部署维护越来越困难。由于所有应用要和所有数据库系统连接&#xff0c;在数万台服务器规模的网站中&#xff0c;这些连接的数…

计算机网络 -- 多人聊天室

一 程序介绍和核心功能 这是基于 UDP 协议实现的一个网络程序&#xff0c;主要功能是 构建一个多人聊天室&#xff0c;当某个用户发送消息时&#xff0c;其他用户可以立即收到&#xff0c;形成一个群聊。 这个程序由一台服务器和n个客户端组成&#xff0c;服务器扮演了一个接受…

[Kubernetes] etcd的集群基石作用

文章目录 1. 配置存储2. 数据一致性3. 服务发现与协调4. 集群状态中枢5. 集群稳定性 1. 配置存储 etcd作为一个高度可靠的分布式键值存储系统&#xff0c;存储了Kubernetes集群的完整配置和状态数据。集群的元数据&#xff0c;包括节点信息、命名空间、部署、副本集、服务、持…