mongodb--用户管理

文章目录

  • MongoDB 用户管理
    • 1. 连接到 MongoDB
    • 2. 用户创建
      • 2.1 创建管理员用户
      • 2.2 创建特定数据库用户
      • 2.3 常用内置角色
    • 3. 用户管理操作
      • 3.1 查看所有用户
      • 3.2 查看特定用户信息
      • 3.3 更新用户密码
      • 3.4 添加用户角色
      • 3.5 移除用户角色
      • 3.6 删除用户
    • 4. 权限修改
      • 4.1 创建自定义角色
      • 4.2 将自定义角色分配给用户
    • 5. 启用身份验证
    • 6. 允许远程连接
      • 6.1 修改绑定IP
      • 6.2 防火墙设置
      • 6.3 安全注意事项
    • 7. 使用认证连接
    • 8. 最佳实践
    • 9. 常见问题解决
      • 9.1 忘记管理员密码
      • 9.2 连接被拒绝

MongoDB 用户管理

1. 连接到 MongoDB

在开始管理用户之前,首先需要连接到 MongoDB 实例:

# 连接到本地 MongoDB 实例
mongo# 或者连接到远程实例
mongo --host <hostname> --port <port> -u <username> -p <password>

2. 用户创建

2.1 创建管理员用户

最大权限

mongos> use admin
mongos> db.createUser({user: "admin", pwd: "admin123", roles: ["root"]})

首先创建一个具有用户管理权限的管理员账户:

// 切换到 admin 数据库
use admin// 创建管理员用户
db.createUser({user: "adminUser",pwd: "securePassword123",  // 实际使用时请设置更复杂的密码roles: [{ role: "userAdminAnyDatabase", db: "admin" },{ role: "readWriteAnyDatabase", db: "admin" },{ role: "dbAdminAnyDatabase", db: "admin" },{ role: "clusterAdmin", db: "admin" }]
})

2.2 创建特定数据库用户

为特定数据库创建用户:

// 切换到目标数据库
use myDatabase// 创建具有读写权限的用户
db.createUser({user: "appUser",pwd: "appPassword123",roles: [{ role: "readWrite", db: "myDatabase" },{ role: "dbAdmin", db: "myDatabase" }]
})

2.3 常用内置角色

  • read: 只读权限
  • readWrite: 读写权限
  • dbAdmin: 数据库管理权限
  • userAdmin: 用户管理权限
  • clusterAdmin: 集群管理权限(仅admin数据库)
  • dbOwner: 数据库所有者(包含readWrite, dbAdmin和userAdmin权限)

3. 用户管理操作

3.1 查看所有用户

use admin
db.system.users.find()

3.2 查看特定用户信息

db.getUser("appUser")

3.3 更新用户密码

db.updateUser("appUser", {pwd: "newSecurePassword456"
})

3.4 添加用户角色

db.grantRolesToUser("appUser", [{ role: "read", db: "anotherDatabase" }
])

3.5 移除用户角色

db.revokeRolesFromUser("appUser", [{ role: "read", db: "anotherDatabase" }
])

3.6 删除用户

db.dropUser("appUser")

4. 权限修改

4.1 创建自定义角色

use admin
db.createRole({role: "customAppRole",privileges: [{resource: { db: "myDatabase", collection: "customers" },actions: ["find", "insert", "update"]},{resource: { db: "myDatabase", collection: "orders" },actions: ["find"]}],roles: []
})

4.2 将自定义角色分配给用户

db.grantRolesToUser("appUser", ["customAppRole"])

5. 启用身份验证

要使用户管理生效,需要在 MongoDB 配置中启用身份验证:

  1. 编辑 MongoDB 配置文件(通常位于 /etc/mongod.conf)
  2. 添加或修改以下部分:
security:authorization: enabled
  1. 重启 MongoDB 服务:
sudo systemctl restart mongod

6. 允许远程连接

6.1 修改绑定IP

  1. 编辑 MongoDB 配置文件:
net:port: 27017bindIp: 0.0.0.0  # 允许所有IP连接,或指定特定IP
  1. 重启 MongoDB 服务

6.2 防火墙设置

如果服务器有防火墙,需要开放 MongoDB 端口(默认27017):

sudo ufw allow 27017

6.3 安全注意事项

允许远程连接时,务必:

  • 使用强密码
  • 考虑设置网络层面的访问控制(如IP白名单)
  • 启用TLS/SSL加密连接
  • 限制用户权限到最小必要范围

7. 使用认证连接

启用认证后,连接时需要提供凭据:

mongo -u "appUser" -p "appPassword123" --authenticationDatabase "myDatabase"

或者在连接字符串中:

mongo "mongodb://appUser:appPassword123@localhost:27017/myDatabase"

8. 最佳实践

  1. 遵循最小权限原则,只授予用户必要的权限
  2. 定期审计用户和权限
  3. 使用复杂的密码并定期更换
  4. 生产环境考虑启用TLS/SSL加密
  5. 对于重要操作,考虑使用审计日志

9. 常见问题解决

9.1 忘记管理员密码

  1. 暂时关闭认证(修改配置文件,去掉authorization: enabled)
  2. 重启 MongoDB
  3. 连接到无认证的实例
  4. 重置管理员密码
  5. 重新启用认证并重启

9.2 连接被拒绝

  • 检查 MongoDB 服务是否运行
  • 检查防火墙设置
  • 验证绑定IP配置
  • 检查认证凭据是否正确

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

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

相关文章

DeepSeek与搜索引擎:AI生成内容如何突破“语义天花板”

一、搜索引擎的“内容饥饿症”与AI的“产能悖论” 2024年&#xff0c;全球每天新增470万篇网络文章&#xff0c;但搜索引擎的索引拒绝率高达68%。这一矛盾的根源在于&#xff1a;算法对“高质量原创”的定义已从“形式独特性”转向“认知增值性”。传统AI生成内容&#xff08;…

YOLO目标检测应用——基于 YOLOv8目标检测和 SAM 零样本分割实现指定目标分割

概述 在当前的计算机视觉领域&#xff0c;目标分割技术正变得越来越重要。市面上有许多分割模型&#xff0c;它们的工作原理大致相似&#xff0c;通常包括收集数据、配置模型以及训练分割模型等步骤。最终目标是实现精确的目标分割。而随着 SAM&#xff08;Segment Anything M…

在Flutter中使用BottomNavigationBar和IndexedStack可以实现一个功能完整的底部导航栏

在Flutter中&#xff0c;使用BottomNavigationBar和IndexedStack可以实现一个功能完整的底部导航栏。BottomNavigationBar用于显示底部的导航按钮&#xff0c;而IndexedStack则用于管理页面的切换&#xff0c;确保每个页面的状态得以保留&#xff08;即页面不会因为切换而重新构…

【10】数据结构的矩阵与广义表篇章

目录标题 二维以上矩阵矩阵存储方式行序优先存储列序优先存储 特殊矩阵对称矩阵稀疏矩阵三元组方式存储稀疏矩阵的实现三元组初始化稀疏矩阵的初始化稀疏矩阵的创建展示当前稀疏矩阵稀疏矩阵的转置 三元组稀疏矩阵的调试与总代码十字链表方式存储稀疏矩阵的实现十字链表数据标签…

微服务篇——SpringCloud

服务注册 Spring Cloud5大组件有哪些&#xff1f; 服务注册和发现是什么意思&#xff1f;Spring Cloud如何实现服务注册发现&#xff1f; nacos与eureka的区别 负载均衡 如何实现负载均衡&#xff1f; Ribbon负载均衡的策略有哪些&#xff1f; 如何自定义负载均衡的策略&…

【小沐杂货铺】基于Three.JS绘制三维数字地球Earth(GIS 、WebGL、vue、react,提供全部源代码)

&#x1f37a;三维数字地球系列相关文章如下&#x1f37a;&#xff1a;1【小沐学GIS】基于C绘制三维数字地球Earth&#xff08;456:OpenGL、glfw、glut&#xff09;第一期2【小沐学GIS】基于C绘制三维数字地球Earth&#xff08;456:OpenGL、glfw、glut&#xff09;第二期3【小沐…

Cursor 在前端需求开发工作流中的应用|得物技术

一、引言 很高兴与大家分享现阶段 Cursor 在我的工作中的使用体验。首先是预期管理&#xff0c;本篇文章不会分享 x 个你可能不知道的小技巧&#xff0c;也不会让你拥有无需自行编码的能力&#xff0c;同时不涉及 Cursor 工程化方面内容。仅仅是围绕个人开发流程中的已有问题&…

PyQt学习记录

PyQt学习记录 要在界面上 创建一个控件&#xff0c;就需要在程序代码中 创建 这个 控件对应类 地一个 实例对象。 在Qt系统中&#xff0c;控件&#xff08;widget&#xff09;是 层层嵌套 的&#xff0c;除了最顶层的控件&#xff0c;其他的控件都有父控件。 几个函数 函数mo…

react: styled-components实现原理 标签模版

styled-components是针对react中一个前端广泛使用的css-in-js样式库B站 利用标签模版 利用ES6中的 标签模版文档标签模板其实不是模板&#xff0c;而是函数调用的一种特殊形式。“标签”指的就是函数&#xff0c;紧跟在后面的模板字符串就是它的参数。 let a 5; let b 10;…

网络安全应急响应之文件痕迹排查:从犯罪现场到数字狩猎的进化论

凌晨3点&#xff0c;某金融企业的服务器突然告警&#xff0c;核心数据库出现未知进程访问。安全团队紧急介入时&#xff0c;攻击者已抹去日志痕迹。在这场与黑客的时间赛跑中&#xff0c;文件痕迹排查成为破局关键。本文将带您深入数字取证的"案发现场"&#xff0c;揭…

多模态大语言模型arxiv论文略读(七)

MLLM-DataEngine: An Iterative Refinement Approach for MLLM ➡️ 论文标题&#xff1a;MLLM-DataEngine: An Iterative Refinement Approach for MLLM ➡️ 论文作者&#xff1a;Zhiyuan Zhao, Linke Ouyang, Bin Wang, Siyuan Huang, Pan Zhang, Xiaoyi Dong, Jiaqi Wang,…

idea插件:AICommit,智能生成Git提交信息

AICommit&#xff1a;智能生成Git提交信息的IDEA插件指南 一、AICommit插件介绍 AICommit是一款专为开发者设计的IntelliJ IDEA插件&#xff0c;它利用人工智能技术自动生成清晰、规范的Git提交信息(Commit Message)。该插件能够分析你的代码变更&#xff0c;理解修改的上下文…

js 拷贝-包含处理循环引用问题

在 JavaScript 中&#xff0c;拷贝对象和数组时需要特别注意&#xff0c;因为对象和数组是引用类型&#xff0c;直接赋值只会复制引用&#xff0c;而不是实际的数据。以下是几种常见的拷贝方法及其应用场景&#xff1a; 1. 浅拷贝&#xff08;Shallow Copy&#xff09; 浅拷贝…

oracle将varchar2 转为clob类型存储。 oracle不支持直接使用sql,将 varchar2 到clob的类型转换,需要下面操作

将一个现有表中的 VARCHAR2 列数据迁移到一个 CLOB 列的过程。以下是对每一步操作的说明&#xff1a; 1. 添加一个新的 CLOB 类型列 首先&#xff0c;向表中添加一个新的 CLOB 类型的列。这个列将用来存储原本的 VARCHAR2 数据。 ALTER TABLE your_table ADD (new_column CL…

Dynamics 365 Business Central Recurring Sales Lines 经常购买销售行 来作 订阅

#D365 BC ERP# #Navision# 前面有节文章专门介绍了BC 2024 Wave 2 支持的更好的Substription & Recurring Billing。 其实在D365 BC ERP中一直有一个比较简单的订阅模块Recrring Sales Lines。本文将介绍一下如何用Recurring Sales Lines来 实施简易的订阅Substription。具…

算法比赛中常用的数学知识

一、求某个整数的正约数个数与正约数之和 1.1求某个正整数N的正约数个数 public class Main {public static void main(String[] args) {System.out.println(count(360));//结果为24}public static long count(long number){long count1;for(long i2;i<Math.sqrt(number);…

虚拟Ubuntu系统 开机提示:SMBus Host controller not enabled 后正常启动,去除这个提示提升开机速度。

如题&#xff0c;虚拟机中的Ubuntu系统开机提示&#xff1a;SMBus Host controller not enabled&#xff0c;虽然能正常启动&#xff0c;但不仅影响开机速度&#xff0c;而且还膈应人。 使用命令查看模块 lsmod | grep piix4 发现i2c_piix4有问题&#xff0c; 禁止 i2c_piix4…

NLP基础知识 与 词向量的转化方法 发展

目录 1.NLP 基础知识点 为什么需要自然语言处理? 自然语言处理有哪些分类? 自然语言处理有哪些实际应用? 为什么需要自然语言处理? 自然语言处理有哪些分类? 自然语言处理有哪些实际应用? 自然语言处理的技术/工作原理是什么? 2.NLP文本转化为词向量的方法 2…

【FPGA基础学习】状态机思想实现流水灯

目录 一、用状态机实现LED流水灯1.状态机思想简介1. 1基本概念1.2.核心要素1.3分类与模型 2.LED流水灯 二、CPLD与FPGA1.技术区别2.应用场景3.设计选择建议 三、HDLbits组合逻辑题目 一、用状态机实现LED流水灯 1.状态机思想简介 1. 1基本概念 ​ 状态机&#xff08;Finite …

CSS语言的游戏AI

CSS语言的游戏AI探讨 随着技术的飞速发展&#xff0c;游戏行业也在不断地革命和演变。游戏中的人工智能&#xff08;AI&#xff09;作为一种重要的设计元素&#xff0c;其复杂性和智能程度对游戏的体验、玩法和整体表现都有着深远的影响。近年来&#xff0c;CSS&#xff08;Ca…