如何通过ACL规则允许/禁止RediSearch索引的访问?
解决RediSearch中特定用户仅能搜索特定键模式的ACL配置问题
问题根源在于:FT.SEARCH执行时会先访问搜索索引本身(比如示例中的mySearch),而你之前的ACL规则只授权了myKey*模式的键,用户没有访问索引键的权限,因此触发NOPERM错误。
解决方案
1. 直接授权索引键访问权限
修改ACL规则,将索引键加入用户允许访问的键模式中:
user myUser -@all +hget +ft.search ~myKey* ~mySearch
这样用户既能访问myKey*格式的数据键,也能访问名为mySearch的索引键,执行FT.SEARCH mySearch "myVal"就不会报错。
2. 批量管理索引的通用方案
如果需要创建多个同类型索引,建议给索引设置统一前缀(比如idx:),创建索引时:
FT.CREATE idx:mySearch ON HASH PREFIX 1 myKey SCHEMA myField TEXT
然后ACL规则用前缀匹配所有同类索引:
user myUser -@all +hget +ft.search ~myKey* ~idx:*
这种方式更灵活,后续新增同前缀的索引无需修改ACL。
关键说明
RediSearch的搜索命令权限校验分两步:
- 首先校验用户对索引键的访问权限
- 然后校验返回结果中数据键的权限(这一步会匹配你设置的
~myKey*规则)
因此必须同时授权索引键和目标数据键的权限,才能正常执行搜索。
内容的提问来源于stack exchange,提问作者goose_lake
相关产品推荐
相关产品推荐

