如何在Azure Cache for Redis PubSub中限制可发布的频道?
Redis PubSub 频道发布权限控制示例
Redis ACL 通过 &<pattern> 规则实现 PubSub 频道的访问权限控制,模式采用 glob 风格匹配,同时支持取反规则(在模式前添加 ! 符号)。以下是具体实现示例:
1. 仅允许发布到单个特定频道
创建用户并限制其只能向 order_updates 频道发布消息:
ACL SETUSER order_publisher ON >SecurePass123 +PUBLISH &order_updates
ON:启用该用户>SecurePass123:设置登录密码+PUBLISH:允许执行 PUBLISH 命令&order_updates:限制仅能发布到匹配该模式的频道(此处为精确匹配)
2. 允许发布到一类频道(glob 通配符匹配)
允许用户向所有以 user_ 开头的频道发布消息:
ACL SETUSER user_publisher ON >UserPass456 +PUBLISH &user_*
&user_*:*匹配任意字符序列,覆盖user_profile、user_notifications等所有符合前缀的频道
3. 禁止发布到特定频道(取反模式)
允许用户向所有频道发布,但禁止发布到 admin_alerts 敏感频道:
ACL SETUSER limited_publisher ON >LimitPass789 +PUBLISH &* &!admin_alerts
&*:允许匹配所有频道&!admin_alerts:取反规则,排除该特定频道- 注意规则顺序:Redis ACL 按顺序匹配,需先设置允许范围,再添加排除规则,否则排除会被后续允许规则覆盖
4. 组合模式:允许一类频道,排除其中特定子频道
允许向 news_* 系列频道发布,但排除 news_sensitive 频道:
ACL SETUSER news_publisher ON >NewsPass012 +PUBLISH &news_* &!news_sensitive
验证权限
使用目标用户登录后,测试发布命令:
- 允许的频道:
PUBLISH order_updates "new order"会返回成功(返回订阅者数量) - 禁止的频道:
PUBLISH admin_alerts "test"会返回(error) NOPERM this user has no permissions to access one of the channels used as arguments
内容的提问来源于stack exchange,提问作者Rajesh Patel
相关产品推荐
相关产品推荐

