【问题标题】:How to (dis)allow RediSearch index through Access Control List rules?如何(禁止)通过访问控制列表规则允许 RediSearch 索引?
【发布时间】:2022-10-22 17:59:51
【问题描述】:

通常,通过ACL List 可以(dis)允许与特定键模式匹配的键的特定 Redis 命令。

例如,在具有遵循myKeyN 模式(即myKey1 : myField : myVal1myKey2 : myField : myVal2 等)的哈希的数据库中,将用户配置为只能获取这些密钥可以配置为user myUser -@all +hget ~myKey*,即简单但非常强大和灵活。

但是,当使用RediSearch module 通过数据库进行全文搜索(FT.SEARCH 命令)时,会出现问题。搜索结果的关键模式似乎与搜索命令的 ACL 无关。

在上面的例子中,如果将规则扩展为包含搜索命令(即user myUser -@all +hget +ft.search ~myKey*),并且使用FT.CREATE mySearch ON HASH PREFIX 1 myKey SCHEMA myField TEXT进行搜索索引,则搜索包含myVal*的键将返回访问控制错误NOPERM this user has no permissions to access one of the keys used as arguments,即使所有搜索结果都将遵循允许的键模式myKey*

如何将搜索配置为仅允许特定用户搜索特定键模式?

【问题讨论】:

    标签: security redis full-text-search


    【解决方案1】:

    在搜索了很长时间之后,在 Redis 和 RediSearch 官方文档以及其他任何地方都没有找到任何信息,尝试不同的选项让我意识到这一点:

    搜索索引名称(不搜索索引键前缀, 和不是搜索结果键模式) 在 RediSeach 命令的 ACL 规则中被视为“键”,尽管不是键名,而是索引名。要使问题中的示例 ACL 正常工作,需要将其格式化为:user myUser -@all +hget ~myKey* +ft.search ~mySearch*,因为索引称为mySearch,索引名称是FT.SEARCH 命令的第一个参数。

    因此,ACL 规则~<pattern> 语句,在文档中称为“键模式”,更像是“任何第一个命令参数的模式”。因此,需要为任何需要的ft.* 命令定义一个单独的“键模式”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-25
      相关资源
      最近更新 更多