一、需求说明
作为一名运维工程师,经常安装和配置redis,前阵子有测试同事申请开一个redis的只读账户,以往都是配置一个读写用户,并没有对redis的权限进行细化管理,实际上这种场景是存在的。
redis作为高性能的内存数据库,承载着缓存、会话存储、消息队列等关键功能。
随着团队规模的扩大和微服务架构的普及,不同服务或团队对redis的访问权限需求各不相同。典型场景包括:
- 监控系统需要读取性能指标,但不应修改数据
- 数据分析团队需要查询数据,但不应影响生产环境
- 开发人员在调试时需要查看数据,但不应意外修改
- 第三方服务需要访问特定数据,但权限应受限制
配置只读账号正是为了解决这类权限分离需求,通过最小权限原则降低数据意外修改或删除的风险。
二、redis账号介绍:acl系统
自redis 6.0起,推荐使用redis 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:*:允许访问多种模式
博主这里的示例实验环境是redis7.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 save
- 加载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等)
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论