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
相关推荐
m0_748237051 小时前
sql实战解析-sum()over(partition by xx order by xx)
数据库·sql
dal118网工任子仪2 小时前
61,【1】BUUCTF WEB BUU XSS COURSE 11
前端·数据库·xss
萌小丹Fighting3 小时前
【Postgres_Python】使用python脚本批量创建和导入多个PG数据库
数据库
青灯文案13 小时前
Oracle 数据库常见字段类型大全及详细解析
数据库·oracle
羊小猪~~3 小时前
MYSQL学习笔记(四):多表关系、多表查询(交叉连接、内连接、外连接、自连接)、七种JSONS、集合
数据库·笔记·后端·sql·学习·mysql·考研
村口蹲点的阿三6 小时前
Spark SQL 中对 Map 类型的操作函数
javascript·数据库·hive·sql·spark
暮湫7 小时前
MySQL(1)概述
数据库·mysql
fajianchen7 小时前
记一次线上SQL死锁事故:如何避免死锁?
数据库·sql
chengpei1477 小时前
实现一个自己的spring-boot-starter,基于SQL生成HTTP接口
java·数据库·spring boot·sql·http
中东大鹅9 小时前
MongoDB的索引与聚合
数据库·hadoop·分布式·mongodb