Redis只读账号配置方法
基于Redis6.0以上ACL系统,可通过CLI临时创建或配置文件永久设置只读账号,支持命令与键空间权限控制。具体使用`-@all+@read`禁用所有命令后开放读命令,也可通过ACL文件热加载实现权限管理,满足监控、开发等场景最小权限需求。
一、需求说明
日常工作中,运维工程师经常需要安装和配置Redis。近期有测试同事申请开通一个只读账户,而以往的做法通常是一个读写用户应付一切,很少对权限进行细化管理。实际上,这种需求并不少见。
Redis作为高性能的内存数据库,承载着缓存、会话存储、消息队列等关键功能。当团队规模扩大、微服务架构铺开后,不同服务或团队对Redis的访问权限各有不同要求。典型的场景包括:
- 监控系统需要读取性能指标,但不能碰数据本身;
- 数据分析团队要查询数据,但不能影响生产环境;
- 开发人员在调试时需要查看数据,但绝不能意外修改;
- 第三方服务需要访问特定数据,权限必须严格受限。
配置只读账号正是为了解决这类权限分离需求——遵循最小权限原则,降低数据被意外修改或删除的风险。
二、Redis账号介绍:ACL系统
从Redis 6.0开始,推荐使用6.2或更高版本,因为引入了更完善的ACL(Access Control List)系统,取代了过去的简单密码认证。Redis ACL支持以下能力:
- 用户管理:创建多个账号;
- 命令控制:精确控制每个用户能执行哪些命令;
- 键空间控制:限制可访问的键模式;
- 权限类别:读、写、管理等多种类型。
1、命令举例
user admin on >admin_password ~* &* +@all user readonly on >readonly_password ~* -@all +@read +ping +info
2、上述命令解析
命令类别:
+@read:允许所有读命令-@all:先禁止所有命令(作为起点)+get:允许 get 命令+info:允许 info 命令
键模式:
~*:允许访问所有键~cache:*:仅允许访问以 cache: 开头的键~user:*~session:*:允许访问多种模式
本示例的实验环境是 Redis 7.2.11。需要留意的是,如果只授权某个命令或某类命令权限,记得先写上 -@all,后面再跟上需要放开的命令授权。
[root@ywserver ~]# redis-cli --version redis-cli 7.2.11
三、配置方式及配置示例
1、通过Redis CLI配置(临时)
先创建一个只读用户,然后用只读账户连接测试。可以看到这个用户能执行 get、exists 等只读命令,但无法执行 set 等写入命令。
127.0.0.1:6379> ACL SETUSER readonly on >readonly_password ~* -@all +@read

2、通过配置文件(永久生效)
通过 Redis CLI 配置的账户和授权只在当前服务进程生效,一旦 Redis 重启,配置就会丢失。如果需要永久生效,需要在 /etc/redis.conf 配置文件中进行设置,添加下面一行配置后重启 Redis。
另外,如果用户需要远程连接,记得加上 +@connection 权限。
user readuser on >user123 ~* &* -@all +@read +@connection


3、通过ACL文件管理
为了方便管理用户,可以将用户权限配置单独放在一个文件里,比如 users.acl。这样做的好处是,修改了 users.acl 之后可以通过 ACL LOAD 热加载配置,完全不需要重启 Redis。
[root@ywserver ~]# mkdir -p /etc/redis [root@ywserver ~]# vim /etc/redis/users.acl [root@ywserver ~]# systemctl restart redis [root@ywserver ~]# cat /etc/redis.conf |grep users.acl aclfile /etc/redis/users.acl [root@ywserver ~]# cat /etc/redis/users.acl user default off user admin on >admin123 ~* &* +@all user readuser on >user123 ~* -@all +@read +ping +info


四、管理命令参考
- 查看所有用户:
ACL LIST - 查看特定用户规则:
ACL GETUSER readuser - 删除用户:
ACL DELUSER readuser - 保存ACL配置到文件:
ACL SA VE - 加载ACL配置:
ACL LOAD - 查看命令类别:
ACL CAT - 查看所有读命令:
ACL CAT read
五、常见命令类别包含的命令
1、@read 类别(部分)
- get, mget, hget, hmget
- exists, type, ttl, pttl
- llen, lrange, scard, smembers
- zcard, zrange, zscore
- keys, scan, hscan, sscan, zscan
2、@write 类别(部分)
- set, mset, hset, hmset
- del, hdel, srem, zrem
- incr, decr, hincrby
- lpush, rpush, lpop, rpop
3、其他实用类别
@connection:连接相关(AUTH, HELLO, QUIT等)@pubsub:发布订阅相关@fast:快速命令(PING, ECHO等)
总结
从实际需求出发,配置Redis只读账号并不复杂,关键是理解ACL的权限模型和不同配置方式的适用场景。希望这些示例能帮助同样有权限管理需求的运维同行。
