【问题标题】:User not found on MongoDB Docker image with authentication在具有身份验证的 MongoDB Docker 映像上找不到用户
【发布时间】:2019-10-16 05:22:23
【问题描述】:

所以我尝试使用官方的mongo Docker image,版本4.2来设置一个MongoDB。

我想要实现的是使用启用了身份验证的服务器,并且我想要一个具有自定义用户和密码的自定义数据库。

所以,我设置了以下环境变量:

MONGO_INITDB_DATABASE: mydb
MONGO_INITDB_ROOT_USERNAME: jane
MONGO_INITDB_ROOT_PASSWORD: secret

在文档中指出,如果您提供后两个环境变量,则会自动启用身份验证。

但是,当我尝试使用凭据 janesecret 访问 mydb 数据库时,我得到的只是一个错误:

Supported SASL mechanisms requested for unknown user 'jane@mydb'
SASL SCRAM-SHA-1 authentication failed for jane on mydb from client 172.17.0.1:54702 ; UserNotFound: Could not find user "jane" for db "mydb"

这是为什么呢?我错过了什么?

我的猜测是创建的用户只能访问admin 数据库,我需要授予用户jane 对数据库mydb 的访问权限。我尝试使用以下命令来做到这一点:

mongo admin -u jane -p secret --eval "db.grantRolesToUser('jane', [{role: 'dbOwner', db: 'mydb'}])"

但这也不起作用。我错过了什么?

【问题讨论】:

  • 你尝试从本地主机...
  • 是的,我从localhost 运行所有这些。
  • mongo admin -u jane -p 'secret' 为我工作
  • 包括--eval 部分?

标签: mongodb docker


【解决方案1】:

您可以使用 janesecretadmin db 进行身份验证,而不是 mydb

运行mongo -u jane -p secret 等同于运行mongo -u jane -p secret -authenticationDatabase admin。检查容器日志以进行验证。

MONGO_INITDB_DATABASE 用于不同的目的。

作为docs 状态:

MONGO_INITDB_ROOT_USERNAME、MONGO_INITDB_ROOT_PASSWORD 这些 变量,结合使用,创建一个新用户并设置该用户的 密码。此用户是在 admin 身份验证数据库 中创建的 并赋予 root 角色,这是一个“超级用户”角色。

MONGO_INITDB_DATABASE 这个变量允许你指定 用于创建脚本的数据库 /docker-entrypoint-initdb.d/*.js(请参阅初始化新实例 以下)。 MongoDB 基本上是为“首次使用创建”而设计的, 因此,如果您不使用 JavaScript 文件插入数据,则不会 数据库已创建。

初始化一个新的 实例当一个容器第一次启动它会执行文件 带有扩展名 .sh 和 .js 在 /docker-entrypoint-initdb.d。文件将按字母顺序执行 命令。 .js 文件将由 mongo 使用数据库执行 由 MONGO_INITDB_DATABASE 变量指定(如果存在),或 否则测试。您也可以在 .js 脚本中切换数据库。

【讨论】:

    猜你喜欢
    • 2021-06-21
    • 1970-01-01
    • 1970-01-01
    • 2016-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多