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
相关推荐
Alan3161 小时前
Qt 中,设置事件过滤器(Event Filter)的方式
java·开发语言·数据库
TDengine (老段)2 小时前
TDengine 集群容错与灾备
大数据·运维·数据库·oracle·时序数据库·tdengine·涛思数据
Lao A(zhou liang)的菜园2 小时前
高效DBA的日常运维主题沙龙
运维·数据库·dba
迪迦不喝可乐3 小时前
mysql知识点
数据库·mysql
不太可爱的大白3 小时前
MySQL 事务的 ACID 四大特性及其实现原理
数据库·mysql
风景_fengjing4 小时前
ORACLE 缺失 OracleDBConsoleorcl服务导致https://xxx:port/em 不能访问
oracle
观测云4 小时前
HikariCP 可观测性最佳实践
数据库
文牧之5 小时前
PostgreSQL的扩展 dblink
运维·数据库·postgresql
趁你还年轻_5 小时前
Redis-旁路缓存策略详解
数据库·redis·缓存
在云上(oncloudai)6 小时前
AWS DocumentDB vs MongoDB:数据库的技术抉择
数据库·mongodb·aws