Ошибка MongoDB + Rails: команда find требует аутентификации - PullRequest
0 голосов
/ 06 августа 2020

Я не могу запускать команды в MongoDB, для которого включен контроль доступа из приложения Rails 6.

Вот и получаю ошибку:

Mongo::Error::OperationFailure (command find requires authentication (13) (on localhost:27017, modern retry, attempt 1))

Это мой mongoid.yml

staging:
  clients:
    default:
      database: mydb_staging
      hosts:
        - localhost:27017
      user: 'julien'
      password: 'mypass'
      auth_source: admin
      auth_mech: :scram
      options:

Я могу подключиться и пройти аутентификацию в mon go из командной строки, и я могу подключиться к нему и пройти аутентификацию удаленно через Robomon go.

вот пользователи i ' ve создал:

> use admin
switched to db admin
> db.auth('julien', 'mypass')
1
> db.getUsers()
[
    {
        "_id" : "admin.julien",
        "userId" : UUID("3444564f-7dcd-4283-8fb1-ce4f122ed9b8"),
        "user" : "julien",
        "db" : "admin",
        "roles" : [
            {
                "role" : "userAdminAnyDatabase",
                "db" : "admin"
            },
            {
                "role" : "root",
                "db" : "admin"
            },
            {
                "role" : "readWriteAnyDatabase",
                "db" : "admin"
            }
        ],
        "mechanisms" : [
            "SCRAM-SHA-1",
            "SCRAM-SHA-256"
        ]
    }
]

Я даже создал пользователя с такими же учетными данными в указанной c базе данных для приложения Rails:

> use mydb_staging
switched to db mydb_staging
> db.getUsers()
[
    {
        "_id" : "mydb_staging.julien",
        "userId" : UUID("dc2d8ab6-4f01-4568-be9d-6486283aea14"),
        "user" : "julien",
        "db" : "mydb_staging",
        "roles" : [
            {
                "role" : "readWrite",
                "db" : "mydb_staging"
            }
        ],
        "mechanisms" : [
            "SCRAM-SHA-1",
            "SCRAM-SHA-256"
        ]
    }
]

Подробнее:

$ mongo --version
MongoDB shell version v4.2.8
git version: 43d25964249164d76d5e04dd6cf38f6111e21f5f
OpenSSL version: OpenSSL 1.1.1  11 Sep 2018
allocator: tcmalloc
modules: none
build environment:
    distmod: ubuntu1804
    distarch: x86_64
    target_arch: x86_64

версии драгоценных камней:

  • рельсы (6.0.3.2)
  • мон go (2.12.1)
  • монгоид (7.1.2 )

Почему я не могу запускать команды через Rails и как это исправить?

EDIT

Вот пример из рельсы консоли:

$ RAILS_ENV=staging bundle exec rails console
Loading staging environment (Rails 6.0.3.2)
irb(main):001:0> User.count
Traceback (most recent call last):
        1: from (irb):1
Mongo::Error::OperationFailure (command count requires authentication (13) (on localhost:27017, modern retry, attempt 1))

1 Ответ

0 голосов
/ 06 августа 2020
Комментарий

Nek указал мне в правильном направлении, если вы посмотрите docs для файла mongoid.yml, вы заметите, что есть два options разделы, мне пришлось переместить часть аутентификации внутрь одного из них, правильная конфигурация выглядит так:

staging:
  clients:
    default:
      database: mydb_staging
      hosts:
        - localhost:27017
      options:
        user: 'julien'
        password: 'mypass'
        auth_source: admin
        auth_mech: :scram
...