*Redis ACL 命令
ACL 是 Redis 访问控制列表(Access Control List)的管理入口,用于查看和管理用户、权限、日志等所有 ACL 相关子命令。
*语法
ACL <subcommand> [arg [arg ...]]
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| subcommand | String | 是 | ACL 子命令,如 CAT、DRYRUN、GENPASS、GETUSER、HELP、LIST、LOAD、LOG、SAVE、SETUSER、USERS、WHOAMI 等 |
| arg | 任意 | 否 | 各子命令对应的参数 |
*返回值
- 返回类型取决于具体子命令
- Array / String / Integer / OK:不同子命令返回不同
- Error:子命令不存在或参数错误
*时间复杂度
O(1) — 仅路由到子命令
*示例
*查看 ACL 帮助
> ACL HELP
1) ACL <subcommand> [<arg> [value] [opt] ...]. Subcommands are:
2) CAT
3) Return an array of ACL categories or commands within a category.
4) DRYRUN
5) Returns whether the user can execute the given command without executing the command.
...
*列出所有 ACL 用户
> ACL USERS
1) "default"
2) "appuser"
*查看当前连接用户
> ACL WHOAMI
"default"
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| ERR Unknown ACL subcommand | 子命令拼写错误 | 使用 ACL HELP 查看可用子命令 |
| ERR unknown command 'ACL' | Redis 版本过低(< 6.0) | 升级到 Redis 6.0+ |
| NOPERM | 当前用户无 ACL 管理权限 | 使用有权限的用户连接 |
*最佳实践
- 生产环境务必启用 ACL,禁止使用无密码的 default 用户
- 为不同应用创建独立用户,遵循最小权限原则
- 使用 ACL CAT 了解命令分类,按类别授权而非逐个命令
- 定期审计 ACL LOG 排查未授权访问尝试
- 使用 ACL SAVE 将配置持久化到
users.acl文件
*FAQ
Q1: Redis 6.0 之前的版本如何控制访问?
A: 6.0 之前仅支持 requirepass 全局密码,无法做细粒度权限控制。建议升级到 6.0+。
Q2: ACL 配置存储在哪里?
A: 内存中运行时生效;通过 ACL SAVE 保存到配置文件目录的 users.acl,或写入 redis.conf 的 aclfile 指令指向的文件。
Q3: ACL 和防火墙/网络隔离有什么区别? A: ACL 是应用层身份认证和授权,防火墙是网络层隔离。两者互补,建议同时使用。