Шифрование на уровне поля на стороне клиента MongoDB (CSFLE) ограничивает операции с незашифрованными коллекциями - PullRequest
1 голос
/ 03 августа 2020

Моя база данных содержит 3 коллекции: «пациенты», «терапевты», «подписки».

Я настроил CSFLE для соединения с базой данных, предоставив схему json, которая определяет шифрование на уровне поля только в полях «имя» и «электронная почта» в коллекции «пациенты».

Шифрование / дешифрование на уровне поля в коллекции «пациенты» работает должным образом.

Однако теперь несвязанный запрос на агрегирование завершается ошибкой «MongoError: конвейер по зашифрованной коллекции не может ссылаться на дополнительные коллекции».

Эта ошибка возникает при выполнении запроса агрегирования для коллекции «терапевтов», который включает поиск $ из коллекции 'subscriptions' (а не "по зашифрованной коллекции", как предполагает ошибка).

Ни «терапевты», ни «подписки» не определены в схеме CSFLE json, и не зашифрованы. Я не понимаю, почему этот поиск $ в незашифрованных коллекциях должен приводить к ошибке. Согласно документации

Automati c шифрование на уровне поля на стороне клиента поддерживает $ lookup и $ graphLookup , только если из * Коллекция 1023 * соответствует коллекции, в которой выполняется агрегирование (т.е. операции самопоиска).

Хотя ограничение может быть приемлемым при работе с коллекцией «пациенты», я не думаю, что это допустимо при работе с другими коллекциями, отличными от CSFLE.

Я знаю, что могу создать 2 отдельных экземпляра MongoClient, один с включенным CSFLE, а другой без, и использовать клиент без CSFLE для поиска $, но это внесло бы дополнительную сложность, и это не кажется мне чистым и разумным решением.

Кстати, я использую mon goose, но поведение такое же при использовании mongodb напрямую.

Вы бы сказали, что это ошибка mongodb?

Будем признательны за любые предложения.

1 Ответ

0 голосов
/ 05 августа 2020

Это оказалось ошибкой с MongoDB ..

Билет Jira: https://jira.mongodb.org/browse/SERVER-50092

Это текущее ограничение, когда использование зашифрованного клиента предполагает, что это необходимо и не позволяет искать $ в другой коллекции.

Текущий обходной путь заключается в использовании незашифрованного клиента для таких агрегатов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...