*Redis ACL DRYRUN 命令

ACL DRYRUN 模拟验证指定用户是否有权限执行给定命令,不实际执行命令。


*语法

ACL DRYRUN username command [arg [arg ...]]

*参数说明

参数 类型 必填 说明
username String 要验证的 ACL 用户名
command String 要检查的 Redis 命令
arg 任意 命令的参数,用于检查 key 权限模式匹配

*返回值

  • OK:用户有权限执行该命令
  • Error:用户无权限执行,返回具体的权限错误信息

*时间复杂度

O(1)

*

*示例

*验证用户有权限

> ACL SETUSER appuser +get ~app:*
OK
> ACL DRYRUN appuser get app:config
OK

*验证用户无权限(命令级别)

> ACL DRYRUN appuser flushall
ERR this user has no permissions to run the 'flushall' command

*验证用户无权限(key 级别)

> ACL DRYRUN appuser get other:key
ERR this user is not allowed to access the key 'other:key'

*常见错误

错误 原因 解决
ERR User 'xxx' does not exist 用户名不存在 检查用户名拼写或先用 ACL LIST 查看
ERR unknown command 'ACL DRYRUN' Redis 版本过低(< 7.0) 升级到 Redis 7.0+

*最佳实践

  • 调试 ACL 规则时必备,在修改生产环境权限前先用 DRYRUN 验证
  • 用于 CI/CD 流水线中自动测试权限配置
  • 排查用户报错 NOPERM 时,用 DRYRUN 精确定位是命令权限还是 key 权限问题
  • 建议将 DRYRUN 集成到权限管理工具中

*FAQ

Q1: DRYRUN 会消耗 Redis 资源吗? A: 仅做权限检查,不执行命令逻辑,资源消耗极低。

Q2: DRYRUN 能检查 pub/sub 权限吗? A: 可以,对 PUBLISHSUBSCRIBE 等命令同样适用。

Q3: DRYRUN 对不存在的命令会报错吗? A: 会返回命令不存在的错误,因为 DRYRUN 需要解析命令参数来检查 key 权限。