Redis之配置只读账号

一、需求说明

作为一名运维工程师,经常安装和配置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 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/b56caba3e02a4fe2ae751ef13ac30407.png) ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/56c9322fbc9e41fd9e6a488a17c55f55.png)

四、管理命令参考

  • 查看所有用户
    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等)
相关推荐
Full Stack Developme1 分钟前
Spring 发展历史
java·后端·spring
组合缺一16 分钟前
Java 流程编排新范式 Solon Flow:一个引擎,七种节点,覆盖规则/任务/工作流/AI 编排全场景
java·spring·ai·solon·workflow·flow
largecode19 分钟前
企业号码认证可以线上办理吗?支持线上申请,设置来电显示品牌名
java·python·智能手机·微信公众平台·facebook·paddle·新浪微博
humcomm20 分钟前
2026年 Java 面试新特点
java·开发语言·面试
lili001224 分钟前
CC GUI 插件架构剖析:如何为 JetBrains IDE 打造完整的 AI 编程工作台
java·ide·人工智能·python·架构·ai编程
Royzst27 分钟前
学生信息管理案例
java
爱棋笑谦29 分钟前
单元测试简述
java
音符犹如代码37 分钟前
Docker 一键部署带有 TimescaleDB 插件的 PostgreSQL
java·运维·数据库·后端·docker·postgresql·容器
sleepcattt1 小时前
Java反射技术
java
小锋java12341 小时前
【技术专题】Spring AI 2.0 - Advisors —— 拦截器模式增强AI能力
java·人工智能