Solr документ исчезает, когда я обновляю его

Я пытаюсь обновить существующие документы в коллекции Solr (Sentry-secure). Solr принимает обновления, но когда я запрашиваю их, документ, похоже, исчез из коллекции.

Что здесь происходит?

Я использую Cloudera (CDH) 5.8.3 и Sentry с включенным контролем доступа на уровне документов.

1 ответ

При использовании контроля доступа на уровне документа Sentry использует поле (имя которого определено в solrconfig.secure.xml, но по умолчанию sentry_auth) определить, какие роли могут видеть этот документ.

Если вы обновляете документ, но забыли предоставить sentry_auth поле, то обновленный документ не принадлежит ни к одной роли, поэтому никто не может его видеть - он становится практически невидимым! Это легко сделать, потому что sentry_auth Поле обычно не является сохраненным полем, поэтому не будет возвращено никакими запросами.

Поэтому вы не можете просто получить документ, изменить поле, а затем обновить документ - вам нужно знать, к каким ролям принадлежит этот документ, чтобы вы могли предоставить правильно заполненный sentry-auth поле.

Вы можете сделать sentry_auth поле "обязательное" поле в схеме Solr, которое предотвратит его случайное пропуск.

Однако это не помешает вам предоставить бланк sentry-auth поле (или с указанием неверных ролей), любое из которых также заставит документ "исчезнуть".

Также обратите внимание, что вы можете обновить документ, к которому у вас нет доступа на уровне документа, при условии, что у вас есть доступ на запись к коллекции в целом и у вас есть идентификатор документа. Это означает, что пользователи могут (намеренно или случайно) перезаписывать или удалять документы, которые они не видят. Это выбор дизайна, созданный для того, чтобы пользователи не могли узнать, существует ли конкретный идентификатор документа, если у них нет доступа к нему на уровне документа.

Смотрите документацию Cloudera:

Другие вопросы по тегам