mongodb 在Mongo Express中更改默认的“admin:pass”

q3qa4bjr  于 12个月前  发布在  Go
关注(0)|答案(1)|浏览(139)

我通过docker compose up运行MongoDB/MongoExpress堆栈,如here所示:

# Use root/example as user/password credentials
version: '3.1'

services:

  mongo:
    image: mongo
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: example

  mongo-express:
    image: mongo-express
    restart: always
    ports:
      - 8081:8081
    environment:
      ME_CONFIG_MONGODB_ADMINUSERNAME: root
      ME_CONFIG_MONGODB_ADMINPASSWORD: example
      ME_CONFIG_MONGODB_URL: mongodb://root:example@mongo:27017/

字符串
一切正常,但从MongoExpress的输出中,我可以看到

mongotest-mongo-express-1  | Mongo Express server listening at http://0.0.0.0:8081
mongotest-mongo-express-1  | Server is open to allow connections from anyone (0.0.0.0)
mongotest-mongo-express-1  | basicAuth credentials are "admin:pass", it is recommended you change this in your config.js!


实际上,通过连接到localhost:8081,我必须提供adminpass作为访问凭据。
我想通过设置默认用户名和密码直接从Dockerfile更改此行为
根据this文档,我对mongo-express环境进行了如下修改:

environment:
      ME_CONFIG_MONGODB_ENABLE_ADMIN: false
      ME_CONFIG_MONGODB_AUTH_DATABASE: custom_db_name
      ME_CONFIG_MONGODB_AUTH_USERNAME: custom_username
      ME_CONFIG_MONGODB_AUTH_PASSWORD: custom_password
      ME_CONFIG_MONGODB_ADMINUSERNAME: root
      ME_CONFIG_MONGODB_ADMINPASSWORD: example
      ME_CONFIG_MONGODB_URL: mongodb://root:example@mongo:27017/


但是除了Mongo之外,什么都没有改变,它已经从三个数据库(adminconfiglocal)变成了只有一个(test)。
谢谢你能给我的任何帮助给予。

pkwftd7m

pkwftd7m1#

我对Docker一无所知,但让我试着解释一下MongoDB中的用户管理。
一个用户的作用域是一个数据库,也就是说,你可以定义创建用户的数据库,例如:

use products
db.createUser( { 
   user: "custom_username",
   pwd: "secret"
   roles: [ 
      { role: "clusterAdmin", db: "admin" },
      "readWrite"
   ] 
})

字符串
或者你也可以写

db.getSiblingDB("products").createUser(...


然而,通常用户是在admin数据库中创建的,老实说,我不知道为什么要在其他地方创建用户。
admin数据库是内置的数据库,除了用户认证和授权数据外,还包括管理整个系统的角色,而不仅仅是单个数据库。这些角色主要与副本集和分片集群管理功能有关。
admin以外的other数据库中创建的角色只能包含应用于其数据库的权限,并且只能从其数据库中的其他角色继承。
admin数据库中创建的角色可以包括应用于任何数据库或群集资源的权限,并且可以从其他数据库以及admin数据库中的角色继承。
试试db.getUsers()看看用户是在哪里创建的,你被授予了哪些角色。

相关问题