Mongodb 启用认证

MongoDB 启用认证的完整指南

启用 MongoDB 的认证功能需要按照以下步骤进行设置:

检查 MongoDB 配置文件

在 MongoDB 配置文件中(通常为 mongod.conf),需要启用认证功能。

修改配置文件

打开 mongod.conf 文件,找到或添加以下内容:

yaml 复制代码
systemLog:
  destination: file
  path: /your_path/mongo.log
  logAppend: true
storage:
  dbPath: /your_path/mongodb
net:
  bindIp: *********, ::1
  ipv6: true
security:
  authorization: enabled
  • 如果是 Homebrew 安装的 MongoDB,配置文件路径通常为 /opt/homebrew/etc/mongod.conf。
  • 如果是手动安装的 MongoDB,请确保路径正确,或者创建自己的配置文件。

重启 MongoDB 服务

修改完配置文件后,重启 MongoDB 服务:

yaml 复制代码
mongod --config /your_path/mongod.conf
mongod --config /opt/homebrew/etc/mongod.conf

或者:

yaml 复制代码
brew services restart mongodb-community@<version>

启动 MongoDB(无认证模式)

如果数据库未启用用户认证,可以先以无认证模式启动 MongoDB,创建管理员用户。

启动命令:

yaml 复制代码
mongod --config /your_path/mongod.conf

创建管理员用户

进入 MongoDB Shell,连接数据库:

yaml 复制代码
mongosh "mongodb://127.0.0.1:27017"

切换到 admin 数据库:

yaml 复制代码
use admin

创建管理员用户:

yaml 复制代码
db.createUser({
  user: "admin",
  pwd: "your_password", // 设置强密码
  roles: [ 
    { role: "userAdminAnyDatabase", db: "admin" },
    { role: "readWriteAnyDatabase", db: "admin" },
    { role: "clusterAdmin", db: "admin" }
    ]
})
  • userAdminAnyDatabase
    • 允许该用户在所有数据库上管理用户。
  • readWriteAnyDatabase
    • 跨数据库的读写权限 :用户可以对 所有非系统数据库 执行 read(读取)和 write(写入)操作,包括插入、更新、删除和查询文档。
    • 不能操作 admin 数据库的配置或管理数据:虽然用户可以访问 admin 数据库(因为它是默认管理数据库),但无法修改数据库的配置或用户管理数据(需要更高权限,如 userAdminAnyDatabase 或 dbAdminAnyDatabase)。
  • clusterAdmin
    • 允许关闭数据库等管理操作。
  • 建议将密码设置为复杂密码以保证安全性。

验证管理员用户

退出 MongoDB Shell,然后以认证模式重启 MongoDB:

yaml 复制代码
mongod --config /your_path/mongod.conf

使用管理员用户连接 MongoDB:

yaml 复制代码
mongosh -u admin -p your_password --authenticationDatabase admin

成功登录后,验证管理员用户权限:

yaml 复制代码
use admin
db.getUsers()

创建普通用户

如果需要对特定数据库的访问权限进行限制,可以创建普通用户。

切换到目标数据库:

yaml 复制代码
use your_database_name

创建普通用户:

yaml 复制代码
db.createUser({
  user: "user_name",
  pwd: "user_password",
  roles: [ { role: "readWrite", db: "your_database_name" } ]
})
  • readWrite 角色允许该用户对指定数据库进行读写操作。

启动认证并测试

确保 mongod.conf 中已启用认证(即 authorization: enabled)。

使用普通用户登录:

yaml 复制代码
mongosh -u user_name -p user_password --authenticationDatabase your_database_name

测试权限:

yaml 复制代码
db.collection_name.find() // 测试读取权限
db.collection_name.insert({ key: "value" }) // 测试写入权限

注意事项

  1. 数据备份:在启用认证前,请确保所有重要数据已备份。
  2. 权限分配:为不同的用户分配最小权限,以减少安全风险。
  3. 密码管理:妥善管理用户密码,定期更新以防泄露。

优雅的关闭 MongoDB 服务

yaml 复制代码
db.adminCommand({ shutdown: 1 })

验证是否已经关闭:

yaml 复制代码
// 使用 ps 查看进程:
ps aux | grep mongod
// 使用 mongosh 连接:
mongosh
相关推荐
麦聪聊数据5 小时前
Web 原生架构如何重塑企业级数据库协作流?
数据库·sql·低代码·架构
未来之窗软件服务5 小时前
数据库优化提速(四)新加坡房产系统开发数据库表结构—仙盟创梦IDE
数据库·数据库优化·计算机软考
Goat恶霸詹姆斯6 小时前
mysql常用语句
数据库·mysql·oracle
大模型玩家七七6 小时前
梯度累积真的省显存吗?它换走的是什么成本
java·javascript·数据库·人工智能·深度学习
曾经的三心草6 小时前
redis-9-哨兵
数据库·redis·bootstrap
space62123277 小时前
在SpringBoot项目中集成MongoDB
spring boot·后端·mongodb
明哥说编程7 小时前
Dataverse自定义表查询优化:D365集成大数据量提速实战【索引配置】
数据库·查询优化·dataverse·dataverse自定义表·索引配置·d365集成·大数据量提速
xiaowu0807 小时前
C# 拆解 “显式接口实现 + 子类强类型扩展” 的设计思想
数据库·oracle
讯方洋哥7 小时前
HarmonyOS App开发——关系型数据库应用App开发
数据库·harmonyos
惊讶的猫8 小时前
Redis持久化介绍
数据库·redis·缓存