游乐游手机版
首页/数据库/文章详情

MongoDB数据库安全加固实战指南:从认证到传输加密

时间:2026-07-21 21:40
MongoDB默认无认证和加密,安全加固需先确认认证是否生效,在启用认证前创建管理员用户,配置TLS SSL须指定完整证书链与私钥,客户端连接必须显式声明认证数据库,注意Ubuntu20 04的AppArmor可能阻止自定义SSL路径。

先说一个扎心的事实:在 Ubuntu 20.04 上装好 MongoDB 4.4,默认状态下,它既没有认证,也没有加密。任何人只要知道你的 IP 和端口,就能直接连上读走全库数据——这不是什么“开箱即用”的便利,而是摆在桌面上的高危暴露面。

MongoDB数据库安全加固指南:从认证到传输加密

因此,安全加固不是“要不要做”的问题,而是“今天必须完成”的紧迫任务。 下面直接上干货,从认证配置到传输加密,一步不落,帮你彻底锁住 MongoDB 数据库。

如何确认当前 MongoDB 是否已启用认证

别靠猜,直接查配置文件和运行时状态。很多运维改完 mongod.conf 以为就完了,其实没重启或者配置没加载,照样是裸奔状态。

  • 查配置文件是否真的启用了授权:grep -E "^[[:space:]]*security.authorization" /etc/mongod.conf,输出必须是 security.authorization: enabled,注意末尾不能有注释符号。
  • 验证 mongod 进程实际加载了哪个配置:ps aux | grep mongod,确认命令行里没有 --noauth--auth。Ubuntu 20.04 的 systemd 服务默认走配置文件,但手动加参数会覆盖它。
  • 最直接的方法:本地直连,用 mongo 执行 db.runCommand({connectionStatus: 1})。如果 authInfo.authenticatedUsers 是个空数组,那认证就是没生效。

创建管理员用户必须在启用认证前完成

这是最容易卡住的地方。一旦 security.authorization: enabled 生效,而你又没提前建好用户,那就彻底进不去 admin 数据库了——mongo 连上去直接报错 not authorized on admin to execute command,等于把自己锁在门外。

正确的操作顺序:

  • 先停服务:sudo systemctl stop mongod
  • 临时无认证启动:sudo mongod --config /etc/mongod.conf --noauth(保持终端占用,另开一个 shell 窗口操作)
  • 在新终端里连接并创建用户:mongo --port 27017use admindb.createUser({user:"admin", pwd:"Tr0ub4d0ur!2026", roles:["root"]})
  • Ctrl+C 结束临时进程,改回配置文件启用认证,再 sudo systemctl start mongod

注意:root 角色虽然方便,但生产环境建议拆成 userAdminAnyDatabase + dbAdminAnyDatabase + clusterAdmin 的组合,避免单点权限过大,提升 MongoDB 用户权限管理安全性。

配置 TLS/SSL 时必须同时指定证书链与私钥路径

如果你只放一个 .pem 文件,漏了中间 CA 或者权限设错,mongod 启动会静默失败——systemctl status mongod 显示 active (exited),但日志里会有 error:0909006C:PEM routines:get_name:no start line 这种提示。

正确的做法:

  • 证书文件必须包含完整链:cat mongodb-server.crt intermediate.crt root.crt > /etc/ssl/mongodb.pem,私钥单独存为 /etc/ssl/mongodb-key.pem,然后 chown mongodb:mongodb + chmod 600
  • mongod.conf 中必须同时写两行:net.ssl.mode: requireSSLnet.ssl.PEMKeyFile: /etc/ssl/mongodb.pem(注意不是 .crt.key 单独文件)。
  • Ubuntu 20.04 默认的 OpenSSL 1.1.1f 不支持 TLS 1.3,但强制写 net.ssl.TLSCertificateKeyFile 会导致启动失败。稳妥的做法是用 net.ssl.PEMKeyFile + net.ssl.CAFile

客户端连接必须显式声明认证数据库

很多人配好了服务端 TLS 和认证,但用 mongo -u admin -p xxx 连不上,错误是 Authentication failed——问题大概率不在密码,而在你没告诉客户端“去哪个库验这个用户”。

  • CLI 连接必须加 --authenticationDatabase admin,例如:mongo -u admin -p 'Tr0ub4d0ur!2026' --host 10.0.1.5 --port 27017 --authenticationDatabase admin --tls --tlsCAFile /etc/ssl/ca.crt
  • Node.js 驱动连接字符串要带 authSource=admin 参数,比如:mongodb://admin:Tr0ub4d0ur!2026@10.0.1.5:27017/?authSource=admin&tls=true&tlsCAFile=%2Fetc%2Fssl%2Fca.crt
  • 遗漏 authSource 会导致客户端默认在目标数据库(比如 test)里找用户,而用户实际存在 admin 库,自然失败。

还有一个容易被忽略的坑:Ubuntu 20.04 的 AppArmor profile 默认不允许 mongod 访问自定义 SSL 路径。如果把证书放在 /opt/certs/ 这类非标准位置,必须手动更新 /etc/apparmor.d/usr.bin.mongod 并执行 sudo apparmor_parser -r /etc/apparmor.d/usr.bin.mongod,否则日志里只会出现 operation not permitted 这种模糊错误,排查起来非常头疼。

来源:https://www.php.cn/faq/2806309.html
上一篇PostgreSQL数据库中将doubleprecision字段类型改为BIGINT的完整方法步骤 下一篇SQL中OUTER APPLY函数实现左连接逻辑详解
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
自增主键值从何而来?深入理解原理,告别只会auto_increment
数据库 · 2026-07-25

自增主键值从何而来?深入理解原理,告别只会auto_increment

KingbaseES推荐使用serial、bigserial、显式sequence或identity列实现自增主键。serial创建integer并关联序列,bigserial对应bigint;显式sequence可自定义起始值等参数;identity有generatedbydefault(允许指定值)与always(禁止)两种模式。

Linux下瀚高数据库授权文件过期及替换解决方案
数据库 · 2026-07-25

Linux下瀚高数据库授权文件过期及替换解决方案

在银河麒麟系统下,瀚高数据库hgdb-4 5试用授权20天到期后需替换正式授权文件。正确操作:停止服务,备份旧文件,将授权文件复制到 opt highgo hgdb-4 5 etc lic 并命名为hgdb lic,设置权限600和属主highgo:highgo,再启动服务。禁止直接修改data目录下的license info文件。

Oracle BLOB实时同步的5大技术挑战与难点解析
数据库 · 2026-07-25

Oracle BLOB实时同步的5大技术挑战与难点解析

OracleBLOB实时同步面临分片组装、多列隔离、长事务跨窗口、事务回滚及大对象资源控制等技术挑战,必须在日志中精确还原完整字段值,才能保证源端与目标端数据完全一致,这对同步系统的稳健性提出了高要求。

MySQL禁用redo日志导致全备失败
数据库 · 2026-07-25

MySQL禁用redo日志导致全备失败

MySQL全量备份失败是由于数据定义语言操作触发排序索引构建,禁用重做日志导致XtraBackup无法获取一致性备份。测试验证表明,优化表语句即使无数据也会触发该问题。根本原因在于排序索引构建过程跳过了重做日志记录,破坏了备份的一致性。

Kafka架构图优化与改进的全面详细步骤与实践指南
数据库 · 2026-07-25

Kafka架构图优化与改进的全面详细步骤与实践指南

Kafka作为实时数据流处理的核心中间件,其底层架构虽已相当成熟,但在实际生产环境中,要充分发挥其性能潜力,仍需落实到具体的调优与架构改造上。核心目标可归纳为三点:如何承载更高的吞吐量、如何保障数据不丢失、以及故障发生时如何快速恢复。本文将从这几个关键方向出发,深入探讨如何真正榨干Kafka集群的性