*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: 可以,对 PUBLISH 和 SUBSCRIBE 等命令同样适用。
Q3: DRYRUN 对不存在的命令会报错吗? A: 会返回命令不存在的错误,因为 DRYRUN 需要解析命令参数来检查 key 权限。