发布时间:2025-11-04 19:22:13 来源:创站工坊 作者:IT科技

给 MongoDB 设置密码有两种情况:
给新创建的篇带 MongDB 容器添加密码。给现有的密码无密码的 MongoDB 容器进行密码设置。在设置密码之前,设置先说说 MongoDB 的篇带版本,之前一直使用 5.0.2 和 5.0.14 版本比较多,密码然而这两个版本都是设置有安全漏洞的,所以大版本如果选择 5 ,篇带建议选择 5.0.24 。密码

在 CentOS 服务器中创建目录 mongodb_pwd ,设置目录结构如下:

使用下面命令给 mongo-init.js 文件添加执行权限(非常重要):
复制chmod +x mongo-init.js1.mongo-init.js 文件内容如下:
复制print(create user start #################################################################); db = db.getSiblingDB("oec2003_db"); db.createUser({ user: "oec2003",篇带 pwd: "Aa12345678", roles: [ { role: "readWrite", db: "oec2003_db" } ] }); db.createCollection(oec2003); print(create user end #################################################################);1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18. 加上 print 是为了更好地查看容器日志。getSiblingDB() 是密码 MongoDB shell 提供的一个方法,它允许你切换到另一个数据库,设置而不需要重新连接到MongoDB实例。篇带这个方法返回一个新的密码 DB 对象,意思是设置数据库不存在会新创建一个。db.createCollection(oec2003):在用户创建完成后,创建了一个名为 oec2003 的 collection ,默认创建一个 collection 是为方便测试,因为没有任何内容的库,源码库使用 show dbs 或者客户端连上是看不见新创建的数据库 oec2003_db 。docker-compose.yml 文件内容如下:
复制version: 3.8 services: mongodb: image: mongo:5.0.24 container_name: mongodb restart: unless-stopped ports: - "37017:27017" environment: MONGO_INITDB_ROOT_USERNAME: root MONGO_INITDB_ROOT_PASSWORD: Aa123456 volumes: - mongo-data:/data/db - ./config/mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js:ro volumes: mongo-data:1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18. environment 环境变量设置根账户的用户名和密码,可以理解为超级管理员账号。volumes 中映射的 mongo-init.js 文件在 MongoDB 容器第一次运行的时候会被执行,是否被执行可以通过执行 docker logs -f mongodb 命令查看日志:
如果没有出现上图中的日志,需要检查下 mongo-init.js 文件是否有执行权限。
进入容器,使用 mongo 进入 MongoDB 的 shell 模式,会发现可以正常进入,但如果执行一些命令会出现没有权限的提示:
复制docker exec -it mongodb bash mongo > use admin > db.getUsers()1.2.3.4.
所以,在加了密码的 MongoDB 中需要使用下面命令进行登录:
复制mongo -u root -p Aa123456 --authenticationDatabase "admin"1. 用户名和密码为 docker-compose.yml 文件中 environment 中定义的。使用用户名密码登录后,在进行用户的查询:
复制docker exec -it mongodb bash mongo -u root -p Aa123456 --authenticationDatabase "admin" > use oec2003_db > db.getUsers()1.2.3.4.
原始构建容器的脚本可能是这样的:
复制version: 3.8 services: mongodb: image: mongo:5.0.24 container_name: mongodb restart: unless-stopped ports: - "47017:27017" volumes: - mongo-data:/data/db volumes: mongo-data:1.2.3.4.5.6.7.8.9.10.11.12.13.14.网上看到很多设置密码的方式,直接进入 MongoDB 的 shell 模式,免费信息发布网针对数据库进行账号密码的添加:
复制use oec2003_db db.createUser({ user: "oec2003", pwd: "Aa12345678", roles: [ { role: "readWrite", db: "oec2003_db" } ] });1.2.3.4.5.6.7.8.9.10.11.但只是针对库加了用户和密码,会发现,客户端工具,不使用密码一样可以登录,并且能操作库里的内容。
这时,修改 docker-compose.yml 文件 ,添加 auth认证:
复制version: 3.8 services: mongodb: image: mongo:5.0.24 container_name: mongodb restart: unless-stopped ports: - "47017:27017" volumes: - mongo-data:/data/db command: --auth volumes: mongo-data:1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.重新构建容器,这时用客户端访问数据库,或者 collection 就会出现如下提示:

新创建的时候 yml 文件没有添加 --auth ,也是需要使用用户名密码才能使用,但对现有无密码容器进行修改,必须添加 --auth ,还不知道原因(可能是我操作问题 。
对现有无密码容器进行修改时,不管是在 environment 中添加根密码,还是手动进入 shell 中添加,只要没有添加 --auth ,一样可以无密码登录。
按照上面步骤进行配置,是可以达到密码保护的作用。
服务器租用