Redis 7.0 在访问控制层面相比早期版本有了本质变化,核心就是 ACL(Access Control List)子系统的成熟。过去我们只能靠一个全局密码和 rename-command 来勉强限制危险指令,而现在可以创建多个用户,给每个用户单独设定能执行的命令、能访问的键模式以及能订阅发布的频道。这种细粒度权限控制特别适合多个业务系统共用一个 Redis 实例的场景,能够有效降低越权操作带来的数据风险。

Redis 7.0 ACL 核心概念与用户模型
在 Redis 7.0 中,ACL 的基本管理单元是用户(user)。每一个用户都拥有独立的名称、密码、启用状态、命令权限规则、键模式规则和频道规则。系统默认存在一个名为 default 的用户,如果没有显式创建其他用户,客户端连接后仍会以 default 身份操作,此时行为与传统密码认证基本一致。理解用户模型是配置细粒度权限的第一步,因为所有授权都是围绕用户对象展开的。
命令权限通过规则如 +@list、-FLUSHALL 来描述,加号代表允许,减号代表禁止,@ 后面跟的是命令类别。键模式则用波浪线加通配符,例如 ~order:* 表示只能访问以 order: 开头的键。频道规则类似,使用 & 符号限定发布订阅通道。这种模型让我们可以把一个用户限制为“只能对订单相关键做读写,且不能执行任何管理命令”,而不是一股脑开放全部能力。
另一个容易忽略的点是用户的可选标志,比如 nopass 代表无需密码,on 或 off 控制是否启用。生产环境务必给关键用户设置强密码并显式置为 on,同时把 default 用户设为 off 或限制其权限,避免匿名或默认账号成为突破口。下面是一段创建受限用户的典型配置代码:
# 创建名为 app_order 的用户,密码为强密码,仅允许对 order:* 键使用读写类命令 ACL SETUSER app_order on >Str0ngP@ssw0rd +@read +@write +@connection -FLUSHDB -FLUSHALL -KEYS ~order:* &order_events
基于键前缀与命令类别的实战配置
实际业务中,最实用的细粒度控制往往落在“键前缀”上。假设电商系统里订单、库存、用户会话分别使用 order:*、stock:*、session:* 三种前缀,我们可以为订单服务单独建用户,只允许它碰 order:*。这样即便订单服务被入侵,攻击者也无法直接读取库存或篡改用户会话,实现了数据层面的故障隔离。
命令类别是另一把利器。Redis 内部将命令分成了很多类,例如 @string、@list、@set、@sortedset、@admin、@dangerous 等。用 +@read 可以一次性放开所有读命令,而不用逐个写 GET、HGET。相反,用 -@admin 能禁止所有管理类指令。配合具体键模式,就能拼出最小权限集。以下示例展示如何给库存服务配置只读权限:
# 库存服务只读用户,禁止任何写和管理命令 ACL SETUSER app_stock_ro on >Read0nlyPass +@read -@write -@admin -@dangerous ~stock:* &
需要注意的是,键模式是“默认拒绝”的,如果用户没有被授予任何 ~ 模式,那么它不能访问任何键。因此在调试权限问题时,若发现命令返回 NOPERM 错误,第一反应应是检查波浪线规则是否覆盖目标键。同时,通配符支持 * 和 ?,但不支持正则,复杂匹配需在业务侧规范键命名来适配。
用户组管理与配置持久化策略
当实例上运行的服务越来越多,逐个维护用户会变得繁琐。Redis 7.0 虽然没有显式的“用户组”对象,但我们可以通过命名规范和命令批处理来模拟组管理。例如所有读库用户都以 ro_ 前缀命名,通过脚本循环调用 ACL SETUSER 批量下发相同规则。此外,利用 ACL COPY 命令可以从已有用户克隆权限,快速派生新账号,减少手工误差。
权限配置必须持久化,否则重启后通过命令行建的用户的会丢失。Redis 7.0 支持在 redis.conf 中直接写 user 指令,也可以使用 ACL SAVE 将当前 ACL 状态写入节点目录下的 users.acl 文件。推荐做法是在测试环境调通后用 ACL SAVE 落盘,再同步该文件到生产节点,避免配置漂移。下面的代码演示了如何查看并保存现有 ACL:
# 查看当前所有用户摘要 ACL WHOAMI ACL LIST # 将当前 ACL 规则保存到 users.acl ACL SAVE
最后要强调的是审计与回收。ACL 提供 ACL LOG 来记录权限拒绝事件,能帮我们定位哪个用户试图做越权操作。当某个业务下线,应及时用 ACL DELUSER 删除对应用户,防止闲置账号成为长期后门。结合键前缀隔离、命令类别限制和持续审计,Redis 7.0 的 ACL 足以支撑中等规模团队在多租户场景下的安全诉求。