我正在尝试更新(Sentry-secured)Solr 集合中的现有文档。Solr 接受了更新,但是当我查询时,该文档似乎已从集合中消失。
到底是怎么回事?
我正在使用 Cloudera (CDH) 5.8.3 和启用了文档级访问控制的 Sentry。
我正在尝试更新(Sentry-secured)Solr 集合中的现有文档。Solr 接受了更新,但是当我查询时,该文档似乎已从集合中消失。
到底是怎么回事?
我正在使用 Cloudera (CDH) 5.8.3 和启用了文档级访问控制的 Sentry。
当使用文档级访问控制时,Sentry 使用一个字段(其名称在 中定义solrconfig.secure.xml
,但默认为sentry_auth
)来确定哪些角色可以看到该文档。
如果您更新了一个文档,但忘记提供一个sentry_auth
字段,那么更新后的文档不属于任何角色,所以没有人可以看到它——它实际上变得不可见!这很容易做到,因为该sentry_auth
字段通常不是存储字段,因此不会被任何查询返回。
因此,您不能只检索文档、修改字段,然后更新文档——您需要知道该文档属于哪些角色,以便提供正确填充的sentry-auth
字段。
您可以sentry_auth
在 Solr 模式中将该字段设置为“必需”字段,这将防止您意外忽略它。
但是,这不会阻止您提供空白sentry-auth
字段(或提供不正确的角色),其中任何一种都会使文档“消失”。
另请注意,您可以更新您没有文档级别访问权限的文档,前提是您对整个集合具有写访问权限,并且您拥有文档的 ID。这意味着用户可以(有意或无意地)覆盖或删除他们看不到的文档。这是一种设计选择,当用户没有文档级别的访问权限时,他们无法确定特定文档 ID 是否存在。
请参阅 Cloudera 文档: