Security 是否可以在Azure Search上实现基于用户的安全性?

Security 是否可以在Azure Search上实现基于用户的安全性?,security,azure,azure-cognitive-search,Security,Azure,Azure Cognitive Search,在Azure搜索中,我们可以为不同的搜索结果创建多个索引,我们有两种类型的api密钥。一个用于管理,另一个用于查询。但使用相同的api密钥用户可以搜索所有索引 在我的解决方案中,我需要设计一个系统,以便使用该系统的不同用户通过其权限获得不同的结果。我认为这可以通过为每个角色使用专用索引来解决,但如果用户愿意,仍然可以查询其他索引 如何确保每个用户只能搜索特定索引。开箱即用,无法限制特定索引的键使用。你需要自己做点什么 另一种可能是创建不同的搜索服务帐户,然后在其中创建索引,而不是只有一个帐户。然

在Azure搜索中,我们可以为不同的搜索结果创建多个索引,我们有两种类型的api密钥。一个用于管理,另一个用于查询。但使用相同的api密钥用户可以搜索所有索引

在我的解决方案中,我需要设计一个系统,以便使用该系统的不同用户通过其权限获得不同的结果。我认为这可以通过为每个角色使用专用索引来解决,但如果用户愿意,仍然可以查询其他索引


如何确保每个用户只能搜索特定索引。

开箱即用,无法限制特定索引的键使用。你需要自己做点什么

另一种可能是创建不同的搜索服务帐户,然后在其中创建索引,而不是只有一个帐户。然后,您可以向用户授予相应搜索服务帐户的访问权限

更新

根据您的评论,您实际上希望按用户角色限制搜索结果(文档),即比索引更深一层。要实现这一点,您可以做的是将此角色条件作为
odatafilter
动态附加到搜索查询中。例如,假设您的索引中有每个角色类型(管理员、用户等)的布尔字段,用户搜索某个关键字。然后,您可以创建一个
odatafilter$Filter
,在这里检查这些条件。因此,您的搜索URL看起来像:

https://<search-service-name>.search.windows.net/indexes/<index-name>/docs?search=<search-string>&$filter=Administrator%20eq%20true
https://.search.windows.net/indexes//docs?search=&$filter=管理员%20eq%20true
这样,搜索服务就完成了所有的过滤,您不必在代码中做任何事情


您可以在此处了解有关查询选项的更多信息:。

我想创建一个在客户端和Azure Search之间工作的web服务。它将从客户处获取搜索词,并通过向其添加api密钥发送到Azure search。获取结果后,将根据客户端的角色过滤结果,并返回最终结果。通过这种方式,api密钥将对客户端隐藏,因此没有人能够直接从Azure搜索服务进行搜索。它看起来如何?这会起作用,因为您的应用程序只显示用户有权访问的索引来限制访问。实际上,只有一个索引。索引将包括一个名为Roles的字段,其中将包括哪些角色将有权访问特定文档。我的web服务将根据角色字段筛选文档。啊。。。。我懂了。每个文档是否包含有权访问该文档的“角色”的信息(或名称)?是的,完全正确。不过,对于大的结果集,它可能会稍微影响总体性能。