Redis用户管理
Redis 6.0 开始引入了 ACL(Access Control List,访问控制列表)功能,支持多用户和细粒度权限控制。
- Redis 6.0 之前:只有单一密码(通过
requirepass设置),没有用户概念。 - Redis 6.0+:默认存在一个名为
default的用户,所有未认证的连接都属于此用户。
创建用户与权限
首先启用 ACL。可使用独立的 ACL 文件,也可以在 redis.conf 中定义。推荐使用独立的 ACL 文件的方式,可在 redis.conf 中配置 aclfile 参数来指定 ACL 文件路径。
# 启用ACL(默认已启用)
aclfile /etc/redis/users.acl # 方式1:使用独立 ACL 文件(推荐)
# 或直接在 redis.conf 中定义(方式2):
# 设置 default 用户密码为 "mypassword"
user default on >mypassword ~* &* +@all
参数说明:
on:启用该用户>:设置密码(>表示添加密码)~*:允许访问所有 key(key pattern)&*:允许访问所有 Pub/Sub channel(Redis 7.0+)+@all:授予所有命令权限
修改了 acl 文件后,需要重新加载 ACL 配置才能生效。
# 如果修改的是 redis.conf
sudo systemctl restart redis
# 或动态加载 ACL(如果使用 aclfile)
redis-cli ACL LOAD
创建具有指定规则的 ACL 用户,或修改现有用户的规则。详细内容可参考官方文档 ACL SETUSER。
ACL SETUSER username [rule [rule ...]]

动态修改用户密码:
# 连接 Redis(此时可能无需密码)
redis-cli
# 为 default 用户设置密码
127.0.0.1:6379> ACL SETUSER default on >mypassword ~* &* +@all
OK
# 验证
127.0.0.1:6379> AUTH mypassword
OK
# 持久化ACL配置,如果没有执行 ACL SAVE,则重启后失效
127.0.0.1:6379> ACL SAVE
OK
关闭指定用户,以 default 用户为例。不建议关闭 default 用户,这样会导致所有未指定用户的连接被拒绝,通常不建议。
ACL SETUSER default off
权限列表:
| 语法 | 含义 |
|---|---|
+command | 允许单个命令 |
-command | 拒绝单个命令 |
+@category | 允许整个命令类别(如 @read、@write、@admin) |
-@category | 拒绝整个类别 |
allcommands / +@all | 允许所有命令 |
nocommands | 拒绝所有命令(默认状态) |
常用命令类别:
@read:GET、MGET、HGETALL、KEYS…@write:SET、DEL、HSET、LPUSH…@admin:INFO、CONFIG、ACL、CLIENT…@dangerous:FLUSHALL、SHUTDOWN、DEBUG…
Key 权限:
~key_pattern:允许访问匹配 glob 模式的 keyallkeys/~*:允许所有 keyresetkeys:清空 key 权限(回到无权限状态)
参考文档: