Redis配置只读账号实现方式

 更新时间:2026年04月07日 17:27:21   作者:恒悦sunsite  
本文介绍了Redis的ACL系统,用于精细化管理不同用户对Redis的访问权限,从创建只读账户、设置命令控制、键空间控制到权限类别等,详细阐述了Redis6.0及以上版本的ACL配置方法,并提供了配置示例和管理命令,适用于提高数据安全性与管理效率

一、需求说明

作为一名运维工程师,经常安装和配置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等)

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Redis如何实现延迟队列

    Redis如何实现延迟队列

    这篇文章主要介绍了Redis如何实现延迟队列问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • Redis配置外网可访问(redis远程连接不上)的方法

    Redis配置外网可访问(redis远程连接不上)的方法

    默认情况下,当我们在部署了redis服务之后,redis本身默认只允许本地访问。Redis服务端只允许它所在服务器上的客户端访问,如果Redis服务端和Redis客户端不在同一个机器上,就要进行配置。
    2022-12-12
  • Redis中的数据结构跳表详解

    Redis中的数据结构跳表详解

    跳表是一种基于并联的链表结构,用于在有序元素序列中快速查找元素的数据结构,本文给大家介绍Redis中的数据结构跳表,感兴趣的朋友跟随小编一起看看吧
    2024-06-06
  • kubernetes环境部署单节点redis数据库的方法

    kubernetes环境部署单节点redis数据库的方法

    这篇文章主要介绍了kubernetes环境部署单节点redis数据库的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • Redis数据备份与恢复方式的五种方式

    Redis数据备份与恢复方式的五种方式

    本文主要介绍了Redis数据备份与恢复方式,包含了五种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-07-07
  • Redis中键值过期操作示例详解

    Redis中键值过期操作示例详解

    这篇文章主要给大家介绍了关于Redis中键值过期操作的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Redis具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-11-11
  • 一篇吃透Redis缓存穿透、雪崩、击穿问题

    一篇吃透Redis缓存穿透、雪崩、击穿问题

    这篇文主要介绍了Redis缓存穿透,缓存雪崩,缓存击穿的问题解决方法,文中有详细的图文介绍,对大家了解Redis有一定的帮助,需要的朋友可以参考下
    2023-05-05
  • 如何自定义redis工具jar包供其他SpringBoot项目直接使用

    如何自定义redis工具jar包供其他SpringBoot项目直接使用

    这篇文章主要介绍了如何自定义redis工具jar包供其他SpringBoot项目直接使用,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • Redis的持久化方案详解

    Redis的持久化方案详解

    在本篇文章里小编给大家整理的是关于Redis的持久化方案详解,有兴趣的朋友们可以参考下。
    2020-03-03
  • 详解Redis 键和字符串常用命令

    详解Redis 键和字符串常用命令

    字符串是 Redis 最基本的数据结构,它将以一个键 和一个值 储存在 Redis 内部,本文重点给大家介绍Redis键和字符串常用命令,感兴趣的朋友一起看看吧
    2022-02-02

最新评论