MongoDB生产环境安全加固:身份验证、权限管理与认证配置实战
几乎每个把 MongoDB 从开发环境搬到生产环境的团队都会在某一天突然意识到一个问题我的数据库怎么谁都能连这不是危言耸听。MongoDB 安装后的默认配置是不开启身份验证的只要端口暴露在网络上任何一个能访问 27017 端口的人都能直接读写你的数据。这篇文章就把“MongoDB 中启用身份验证”这件事彻底讲透从创建管理员账号、配置 mongod.conf、重启验证到业务用户授权、常见报错排查再到忘记管理员密码后的恢复流程给出一套可以直接照抄的完整操作路径。适合刚接手 MongoDB 运维的开发同学也适合正在为生产库安全补课的团队哪怕你之前完全没配过认证按着步骤走也能顺利搞定。1. 先搞懂认证与授权的边界再动配置1.1 MongoDB 默认不设防这个坑几乎人人踩过MongoDB 为了“开箱即用”在很长一段时间内默认不开启身份验证。开发环境下这样确实方便单个实例跑在本地怎么折腾都行。可问题往往出在环境迁移的那一刻有人为了远程排查问题把 bindIp 改成了 0.0.0.0数据目录又是默认权限于是数据库就像一栋没锁门的大楼任何知道地址的人都能进出自如。我见过不止一起因为 MongoDB 裸奔导致的数据沦陷事故勒索脚本扫到开放端口后直接 drop 全库留下一句“给钱恢复”。那种损失不是几小时能算清的。所以我的态度很明确只要这台 MongoDB 要承载真实业务身份验证就必须在投入使用前排进计划不能拖到出问题再补。哪怕是内网环境横向渗透和内部误操作的风险同样存在别拿“内网信任”当理由。开启认证这件事本质上就是在给数据库上第一道门锁。1.2 身份验证与授权是两条不同的线在 MongoDB 里身份验证Authentication和授权Authorization是两件事但很多新手会把它们混在一起。身份验证解决的是“你是谁”的问题通过用户名密码、证书或其他机制来确认客户端身份授权解决的是“你能干什么”的问题通过角色和权限来控制你能操作哪些库、哪些命令。可以打个比方门禁刷卡是身份验证卡刷进去之后你能进哪个办公室是授权。一位租户拿着门禁卡进了大楼不代表他可以打开所有办公室的锁。MongoDB 的设计思路也是类似的用户创建时可以指定一个或多个角色每个角色对应一组操作权限。模型本身不复杂但理解清楚这两个层次后面做账号规划时才不会把权限放得太大。1.3 内置角色足够日常使用没必要急着自定义MongoDB 内置了一批常用角色做生产项目时大概率够用也不用急着去自定义角色。下面这几个是我最常用的角色归属于典型用途rootadmin 库超级管理员几乎拥有全部权限userAdminAnyDatabaseadmin 库负责创建和管理用户readWrite业务库应用读写业务数据的常规账号read业务库只读报表、BI、审计账号dbOwner指定库库级管理含 readWrite、dbAdmin 等dbAdmin指定库库的运维操作如索引、统计clusterAdminadmin 库副本集、分片集群的管理backup / restoreadmin 库配合备份恢复工具使用我倾向于给每个用途建一个专用账号而不是图省事全用 root。多花两分钟建号能让后期排查问题的成本低很多。自定义角色平时用得不多只有遇到“想让某个账号只能执行某几条命令”这类偏门需求时才需要这里不展开讲。2. 动手前先做用户规划避免上线后反复返工2.1 从访问方出发把账号分成几类很多团队在开认证时随手建一个 root 账号给所有人用这种做法短期省事长期是灾难。因为一旦出了问题你根本不知道是哪个人、哪个应用在用这同一个账号。开通前花十分钟按访问方把账号分类后续运维会顺畅得多。我一般会分成四类管理账号、应用账号、只读账号、备份账号。管理账号给 DBA 或运维同学用权限落在 admin 库应用账号给业务服务用权限只落在它真正需要操作的业务库上只读账号给报表、BI、数据导出场景备份账号给定时备份脚本用。四类账号各司其职权限边界清晰哪一类出了问题都有独立线索可查。2.2 管理员账号该给多大权限管理员账号没必要动辄给 root。大多数中小团队给 userAdminAnyDatabase 加一个 readWriteAnyDatabase 就足够日常操作了。userAdminAnyDatabase 负责管用户readWriteAnyDatabase 负责读写所有库这个组合基本覆盖了运维同学的日操作范围。如果还需要处理集群级别的事务再按需加上 clusterAdmin。这里有个小经验给管理员账号起一个不像设备名的名字比如不要直接叫 admin 或 root避免被扫描工具一眼识破。虽然扫描工具更多是扫端口但账号命名本身也是一层微不足道但很便宜的安全成本。这个建议适用于所有关键系统不单是 MongoDB。账号命名、密码强度、权限边界这些看似琐碎的事加起来就是生产环境的安全底色。2.3 业务账号与备份账号的最小权限思路业务账号的核心原则是最小权限。应用只需要读写自己的业务库就别给它其他库的任何权限。我看到过线上事故应用账号拥有 root 权限一个注入漏洞打进接口攻击者顺手把整台实例的所有数据库都遍历了一遍。权限收敛到某一个库就算应用被攻破损失面也能控制在一个库的范围内。备份账号的权限则是另一个方向它需要能读取所有需要备份的数据所以至少要有跨库读的能力。在新版 MongoDB 中可以直接用内置的 backup 角色旧版本可以给 readAnyDatabase 或按需授予。恢复场景还需要 restore 角色但通常恢复是人工操作不必常驻在备份脚本账号上。把这些想清楚再进入实操阶段就不容易反复调权限。3. 实操全流程从零到一开启身份验证3.1 第一步创建初始管理员用户在完全未开启身份验证的 MongoDB 上第一步不是改配置而是先创建一个管理员账号。你可能会问还没开启认证创建用户有什么意义有。这个账号会是之后通过认证登录的通行证。启动一个未开启认证的 mongod然后使用 mongosh 连接到 admin 数据库mongosh --host 127.0.0.1 --port 27017接下来执行use admin db.createUser({ user: ops_admin, pwd: ChangeThisToAStrongPassword, roles: [ { role: userAdminAnyDatabase, db: admin }, { role: readWriteAnyDatabase, db: admin } ] })这里有个细节可能让你困惑命令进入了 admin 库所以用户 ops_admin 的认证数据库authentication database就是 admin。MongoDB 要求用户在某个库中创建这个库就是后续认证时 authSource 要指定的库。如果不指定认证数据库客户端会默认尝试用目标库或 admin 库进行认证很多认证失败的坑都出在这一步。3.2 第二步修改 mongod.conf 开启 authorization创建完初始管理员后编辑 mongod 的配置文件。不同发行版路径不太一样常见的是 /etc/mongod.conf。找到或新增 security 段security: authorization: enabled如果你用的是旧版逗号分隔的 conf 文件写法则是auth true值得注意的是authorization 和 auth 两个配置项其实指向同一个开关新版统一推荐用 authorization: enabled。配置改完后重启 mongodsudo systemctl restart mongod从这一刻起MongoDB 默认就会要求所有连接通过身份验证。注意如果配置文件里同时存在 replication 的 keyFile 配置security 段也会被一并加载比如副本集场景我后面会单独讲。3.3 第三步重启后验证认证效果重启后先用不带账号的方式连一次应当收到认证相关的错误提示mongosh mongodb://127.0.0.1:27017/admin正常情况会报认证失败或者提示未授权。再用管理员账号连mongosh mongodb://ops_admin:ChangeThisToAStrongPassword127.0.0.1:27017/admin?authSourceadmin或者用参数方式mongosh --host 127.0.0.1 --port 27017 --username ops_admin --password --authenticationDatabase admin加 --password 不带参数值mongosh 会提示你交互式输入密码好处是密码不会出现在 shell 历史记录里强烈建议这么做。验证能顺利进入执行 db.getUsers() 能看到用户列表说明身份验证已经生效。4. 业务用户创建与授权场景拆解4.1 应用账号权限收敛到业务库生产环境上每个业务应用都应该拥有自己的专用账号不要在应用配置里写管理员账号。创建方式很简单切到业务库再建用户use appdb db.createUser({ user: app_service, pwd: AppPassword2025, roles: [ { role: readWrite, db: appdb } ] })注意这里 use appdb 意味着用户在 appdb 库创建认证数据库就是 appdb。业务服务连接串里必须带 authSourceappdb或者通过 --authenticationDatabase appdb 指定。如果你把角色授权到 appdb用户却建在 admin 库后面排查起来会绕弯路建议用户和核心权限的目标库保持一致能少踩很多坑。4.2 只读账号与跨库访问的处理报表、BI、数据仓库同步这类场景通常需要只读账号。只读账号在 MongoDB 中用 read 角色创建方式同上把角色换成 read。有人会问报表要跨多个库读怎么办没关系roles 是一个数组可以叠加db.createUser({ user: report_user, pwd: ReportPassword2025, roles: [ { role: read, db: appdb }, { role: read, db: analytics } ] })只读账号必须严格控制不要让报表同学顺手拿到写权限。BI 团队改数据导出脚本这种事一旦有写权限误操作改错线上数据的概率并不低。给只读账号降权本质上是在保护生产数据的完整性。很多数据事故压根不是黑客干的就是权限太大被无心之手碰了一下。4.3 查看与调整用户权限别靠猜授权是动态的用户不止创建一次后续经常要调整。查看某个用户的详细信息use appdb db.getUser(app_service)想看更细的权限清单用 usersInfo 加 showPrivilegesdb.runCommand({ usersInfo: { user: app_service, db: appdb }, showPrivileges: true })给已有用户追加角色可以用 grantRolesToUser收回角色用 revokeRolesFromUser。例如db.grantRolesToUser(app_service, [ { role: read, db: otherdb } ])是不是需要跨库读、要不要追加这些判断比命令本身更重要。每次调整最好记一条变更日志哪怕只是写在团队群里也比三个月后问“这个权限谁加的”要强。权限管理最忌讳的就是凭记忆拍脑袋。5. 进阶认证机制、副本集与更安全的连接5.1 SCRAM 默认机制与密码的存储方式MongoDB 默认的身份验证机制是 SCRAM全称是 Salted Challenge Response Authentication Mechanism分为 SCRAM-SHA-1 和 SCRAM-SHA-256。客户端通过质询-响应流程向服务端证明自己知道密码密码本身不会明文在网络中传输服务端保存的也是经过哈希和加盐处理后的派生密钥而不是明文密码。这一点比很多早期数据库直接传明文密码要稳妥得多。值得注意的是SCRAM-SHA-256 需要客户端和服务端都支持才能启用。如果客户端驱动版本很老可能只支持 SCRAM-SHA-1这时需要在创建用户时考虑机制兼容性。生产中我通常建议客户端尽量升级到支持 SCRAM-SHA-256 的新版本驱动安全强度更高也没有兼容性包袱。另外即使用了 SCRAM-SHA-1也强过不加密传明文别因噎废食。5.2 副本集节点间的内部认证keyFile副本集场景下启用身份验证之后节点之间也需要互相认证。否则一个恶意进程可能伪装成副本集成员骗取其他节点的数据同步。MongoDB 常用的做法是用 keyFile所有节点共享同一个密钥文件节点连接时用它完成内部握手。生成 keyFile 并配置的流程openssl rand -base64 768 /etc/mongodb-keyfile chmod 600 /etc/mongodb-keyfile配置里同时要指定副本集名和 keyFilesecurity: authorization: enabled keyFile: /etc/mongodb-keyfile replication: replSetName: rs0有一个小坑必须提醒keyFile 文件的权限必须严格限制在 mongod 运行用户可读通常是 600。如果权限过宽mongod 会直接拒绝启动。多个节点要把同一个 keyFile 内容复制过去不要自己随机生成不同的文件否则副本集节点之间认证会互相失败整个集群都起不来。5.3 x.509 与 LDAP 的适用场景除了 SCRAMMongoDB 还支持 x.509 证书认证。客户端连接时需要出示由受信任 CA 签发的客户端证书服务端同时也有自己的证书。x.509 不只解决身份验证也顺带解决了传输加密安全性比单纯的账号密码更高。缺点是需要维护一套 PKI 体系证书签发、轮换、吊销都要有流程对团队规模是有要求的。如果公司已经用了企业级统一身份源比如 LDAP 或 Active DirectoryMongoDB Enterprise 版还能把身份验证交给 LDAP 完成用户不需要在 MongoDB 内部创建权限则继续由 MongoDB 的角色体系管理。这类方案适合大型企业普通中小团队用 SCRAM 加 keyFile 已经完全够用了。别为了追求高级特性把架构搞复杂先把手头的认证机制用扎实。6. 踩坑现场认证问题排查手册6.1 最常见的认证失败原因对照表我整理了一张高频问题对照表基本覆盖了日常能碰到的认证故障现象可能原因解决思路Authentication failed用户名或密码不正确确认密码确认用户位于 admin 还是业务库Authentication failed指定了错误的认证数据库authSource 必须是用户创建时所在的库连接超时bindIp 未包含客户端地址修改 bindIp 并重启或通过内网地址访问连接拒绝防火墙、安全组未放行检查 27017 端口放行策略用户存在但登录失败密码包含 URI 特殊字符改用交互式密码输入避免 URI 拼接副本集节点同步失败keyFile 内容不一致或权限过宽统一 keyFile权限设为 600最诡异的情况往往出在“用户名密码都对就是连不上”。九成是认证数据库没写对。举例用户在 appdb 库创建连接串写 authSourceadminMongoDB 会拿着这份用户名密码去 admin 库验证自然失败。先看 authSource再看密码这个排查顺序能解决大半问题。6.2 忘记管理员密码后的恢复流程管理员密码忘了不要慌。只要你对服务器还有操作系统层面的访问权限就能找回对 MongoDB 的控制权。最稳妥的做法是临时关闭身份验证重置密码再恢复。步骤一停止正在运行的 mongodsudo systemctl stop mongod步骤二临时启动一个无认证的 mongod。注意先备份原配置临时启动时把 security 段注释掉或直接另写一份临时配置。sudo mongod --dbpath /var/lib/mongodb --port 27017 --bindIp 127.0.0.1步骤三用 mongosh 连接 admin 库重置密码use admin db.changeUserPassword(ops_admin, NewStrongPassword2025)步骤四停掉临时进程恢复原配置systemctl start mongod 正常启动。之后用新密码登录即可。整个流程只适用于你还能控制操作系统的情况如果连系统都进不去那属于更高层级的运维灾难不在本文讨论范围。恢复操作期间务必要确保数据库没有对外提供服务避免在无认证窗口期被其他人连进来。6.3 mongodump、mongorestore 在认证模式下的用法启用认证后备份脚本必须带上认证参数否则会连不上数据库。mongodump 和 mongorestore 的认证参数是统一的mongodump \ --host 127.0.0.1 \ --port 27017 \ --username backup_user \ --password \ --authenticationDatabase admin \ --db appdb \ --out /backup/appdb_$(date %Y%m%d)交互式输入密码能避免密码出现在进程列表里cron 脚本则可以用 --password 加环境变量或者直接用配置文件传递。但无论如何不要把明文密码写在一个全员可读的 shell 脚本里。恢复数据时同样要指定认证数据库和目标库。备份账号单独建一个别用管理员账号跑定时备份权限冗余越少越好。7. 上线前建议顺手做的几件加固事7.1 bindIp、防火墙与账号密码管理身份验证解决的是“谁能连”的问题但这些账号终究会通过某个网络路径到达数据库。所以别只盯着认证配置bindIp 也很重要。只绑定内网网卡地址不绑定 0.0.0.0可以显著减少暴露面。配合防火墙或安全组规则把 27017 只放行给应用服务器网段和运维跳板机端口暴露面就非常小。账号密码的管理同样不能偷懒。强密码要有规律地与运维周期结合比如每次轮换都生成独立随机串。如果团队规模不大可以考虑用密码管理工具统一存放凭据避免账号密码只存在于某一个人的聊天记录里。不要高估人的记忆力所有关键密码都该有可继承的存放位置。服务器登录方式也建议升级成密钥认证少用密码登录多一层保护。7.2 传输加密别让认证变成脱裤子放屁启用身份验证后还有一个容易被忽略的事实如果客户端与服务端之间的链路没有加密即使密码不以明文传输恶意方在中间位置依然可能嗅探到大量业务数据本身。SCRAM 只保护了凭据验证过程不保护你提交的数据。所以生产环境建议同步配置 TLS/SSL。在 mongod.conf 中配置证书路径net: tls: mode: requireTLS certificateKeyFile: /etc/mongodb/server.pem客户端连接串使用 mongodb:// 还是 mongodbsrv:// 不影响 TLS 模式关键在于 URL 参数和驱动选项。开启 TLS 后确认客户端驱动也开启了对应的 ssl 选项。一个只做认证不做传输加密的 MongoDB在低价值环境还能接受在对数据保密性有要求的场景里迟早要补上这一课。最后说点个人体会。MongoDB 的认证配置本身很简单两分钟就能完成真正花时间的永远是权限规划和安全意识。我在生产环境踩过最多的坑不是命令敲错了而是图省事给所有账号一把 root 钥匙最后出了问题只能靠翻慢日志定位。如果你正在为某个系统做上线准备我的建议是现在就打开配置文件看一眼如果还没开启身份验证花十分钟补齐如果已经开了顺手检查一遍有哪些账号权限明显过大逐一下调。大部分安全收益其实是这种不起眼但正确的小事堆出来的。

相关新闻

Ubuntu开启Secure Boot时r8168驱动签名与MOK注册实战

Ubuntu开启Secure Boot时r8168驱动签名与MOK注册实战

1. 问题本质与真实场景还原“Ubuntu有线没法上网(modprobe: ERROR: could not insert r8168: Required key not available)”——这行报错不是偶然弹出的调试信息,而是真实压在某位运维工程师凌晨三点的工位屏幕上的一道硬伤。他刚给一台用于…

2026/10/13 4:18:04 阅读更多 →
MySQL跳过身份验证重置root密码:原理、实操与安全收尾

MySQL跳过身份验证重置root密码:原理、实操与安全收尾

1. 什么情况下才需要这招:先判断问题真伪先说一个我印象特别深的场景。某天快下班的时候,一个同事跑过来说测试库连不上了,报错是Access denied for user rootlocalhost。他第一反应是密码被人改了,准备直接停库重装。我当时拦住了…

2026/10/13 4:18:04 阅读更多 →
Service Worker生命周期与后台同步:离线表单提交实战

Service Worker生命周期与后台同步:离线表单提交实战

这段时间我在做一个移动端的数据采集项目,最头疼的不是界面,而是用户在地铁、山区、电梯里那种“断断续续的网络”环境。表单填了半天,一点提交,界面直接转圈,再刷新什么都没了。当时第一反应是上 IndexedDB 存草稿&am…

2026/10/13 4:18:04 阅读更多 →

最新新闻

改进粒子群优化SVR超参数:从原理到代码实现回归预测

改进粒子群优化SVR超参数:从原理到代码实现回归预测

1. 从一次“调参调到怀疑人生”说起:SVR回归预测的痛点 如果你做过一段时间的数据回归预测,大概率遇到过这种场景:手头有个数据集,特征十几列,样本量几千条,老板要求预测误差尽可能小。你想用支持向量回归&…

2026/10/13 7:50:14 阅读更多 →
DGA溶解气体分析Excel数据集构建与质量控制指南

DGA溶解气体分析Excel数据集构建与质量控制指南

简介:本资源是面向电力系统工程师、电气专业研究生及故障诊断算法研究者的DGA(溶解气体分析)专用数据集,聚焦变压器内部故障类型识别与状态评估这一核心工程问题。数据集包含357组真实运行场景下的油中气体测量样本,覆…

2026/10/13 7:50:14 阅读更多 →
LUNA16肺结节数据集3D预处理与坐标对齐实战指南

LUNA16肺结节数据集3D预处理与坐标对齐实战指南

简介:LUNA16肺结节数据集(1186张)是面向医学影像分析研究者与AI医疗方向初/中级开发者的重要开源资源,专用于肺结节检测、定位与分割算法的训练与评估。该数据集将原始CT影像预处理为PASCAL VOC标准格式,显著降低模型适…

2026/10/13 7:50:14 阅读更多 →
深度学习前向与反向传播的三层认知透析

深度学习前向与反向传播的三层认知透析

1. 为什么这门课的笔记不能只抄PPT——从“1 Neural Networks and Deep Learning”开始的真实学习断层 你是不是也经历过:打开吴恩达《深度学习专项课程》第一门课的视频,前两分钟听着“logistic regression is a neural network”,点头如捣蒜…

2026/10/13 7:50:14 阅读更多 →
旅行家的预算:贪心算法求解最低加油成本

旅行家的预算:贪心算法求解最低加油成本

洛谷P1016《旅行家的预算》绝对算得上贪心算法入门的一道经典老题。题目不长,但每次看题解区都能看到有人卡在No Solution的判定上,或者被浮点精度坑到怀疑人生。我当年第一次刷这题的时候,也是写了好几个版本才真正跑通,今天就把…

2026/10/13 7:50:14 阅读更多 →
SpringBoot连接Hive数仓:HiveServer2 JDBC配置与排查实战

SpringBoot连接Hive数仓:HiveServer2 JDBC配置与排查实战

说句实话,第一次接到让 SpringBoot 应用连上 Hive 数仓的活,我内心的想法是:数据库连接嘛,换一个 driver,配一下 url,写两个查询方法,撑死了半天搞定。结果从环境准备到第一个查询真正跑通&…

2026/10/13 7:49:14 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →