*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.confaclfile 指令指向的文件。

Q3: ACL 和防火墙/网络隔离有什么区别? A: ACL 是应用层身份认证和授权,防火墙是网络层隔离。两者互补,建议同时使用。