当前位置: 首页 > article >正文

自建 Redis 中设置 ACL 用户和权限

一、概述

在自建的 Redis 中实现类似于云 Redis 的账号权限管理,可以使用 Redis 6.0 及以上版本的 ACL(Access Control List) 功能来进行权限管理。Redis 的 ACL 允许创建不同的用户,指定其权限,从而控制用户可以执行哪些命令或访问哪些数据。

二、自建 Redis 中设置 ACL 用户和权限的步骤

1. 确保使用 Redis 6.0 或以上版本

ACL 功能从 Redis 6.0 开始支持,所以需要确保 Redis 版本是 6.0 或更高版本。可以通过以下命令检查 Redis 版本:

redis-server --version

2. 配置 Redis 以启用 ACL

在 Redis 配置文件(redis.conf)中,确保启用了 ACL 功能。默认情况下,ACL 是启用的,但可以检查是否存在类似以下的配置项:

# 默认开启 ACL
# aclfile /path/to/your/aclfile

3. 创建和管理用户

可以通过 ACL SETUSER 命令来创建和管理用户。例如:

# 创建一个名为 "user1" 的用户,密码为 "password123",并授予 "user1" 只能执行 GET 和 SET 命令的权限
ACL SETUSER user1 on >password123 ~* +GET +SET

解释:

  • user1:新创建的用户名。
  • on:启用该用户。
  • >password123:设置该用户的密码。
  • ~*:用户可以访问所有键。
  • +GET +SET:用户只允许执行 GET 和 SET 命令。

4. 配置权限

可以根据需要配置更细粒度的权限。例如,可以限制用户只能访问特定前缀的键,或者只允许特定命令:

  • ~prefix:*:只允许访问以 prefix: 开头的键。
  • +GET:允许执行 GET 命令。
  • -DEL:禁止执行 DEL 命令。

例如,创建一个只能访问 user:* 前缀的用户:

ACL SETUSER user2 on >password456 ~user:* +GET -SET +HGET +HSET

5. 查看和管理用户

可以使用 ACL LIST 来列出当前所有用户和权限:

ACL LIST

6. 配置客户端连接时验证用户身份

客户端在连接 Redis 时,需要提供用户名和密码来进行身份验证。可以在客户端使用 AUTH 命令进行验证:

AUTH user1 password123

如果身份验证成功,客户端将拥有该用户的权限。

7. 限制特定命令

可以使用ACL SETUSER来限制某些命令。假设想禁用某些高权限命令(例如 FLUSHDB 和 FLUSHALL)

ACL SETUSER user3 on >password789 ~* -FLUSHDB -FLUSHALL

这样 user3 用户就无法执行清空数据库的操作。

8. 持久化 ACL 配置

Redis 的 ACL 配置会默认保存到指定的 ACL 文件(在 redis.conf 中配置)。每次 Redis 启动时,都会加载这个文件。如果没有指定路径,默认会保存到dump.rdb所在的目录。

9. 注意事项

  • 在设置 ACL 时,确保为不同的用户分配合理的权限,以防止不必要的安全风险。
  • 如果没有显式地设置用户权限,默认的 default 用户将拥有所有权限。

三、权限设置

可以通过 ACL SETUSER 命令来精细控制每个用户的读写权限,控制用户是否能够读取(GET)、写入(SET)或者执行特定命令。以下是一些常见的读写权限配置方式:

3.1 允许读取和写入所有数据

用户能够读写所有的数据(即不限制任何命令),可以设置如下权限:

ACL SETUSER user1 on >password123 ~* +GET +SET +HGET +HSET +LPUSH +RPUSH +LPOP +RPOP +SADD +SREM +ZADD +ZREM

解释:

  • user1:用户的名称。
  • on:启用该用户。
  • >password123:设置该用户的密码为 password123。
  • ~*:允许访问所有的键。
  • +GET +SET +HGET +HSET +LPUSH +RPUSH +LPOP +RPOP +SADD +SREM +ZADD - +ZREM:允许执行所有的读写操作,包括常见的数据类型命令(如字符串、哈希、列表、集合和有序集合的操作)。

3.2 只允许读取数据

户具有读取权限(不能修改数据),可以限制用户只能执行读取命令:

ACL SETUSER user2 on >password456 ~* +GET +HGET +LPUSH +LRANGE +ZRANGE +SISMEMBER

解释:

  • user2:用户的名称。
  • on:启用该用户。
  • >password456:设置该用户的密码为 password456。
  • ~*:允许访问所有的键。
  • +GET +HGET +LPUSH +LRANGE +ZRANGE +SISMEMBER:只允许读取数据,如通过 GET 获取字符串,HGET 获取哈希值,ZRANGE 获取有序集合中的成员等。

这样配置后,user2 用户只能读取数据,不能修改数据或删除数据。

3.3 只允许写入数据

用户能够写入数据(不能读取现有数据),可以将用户的权限限制为只允许写命令:

ACL SETUSER user3 on >password789 ~* +SET +HSET +LPUSH +RPUSH +SADD +ZADD

解释:

  • user3:用户的名称。
  • on:启用该用户。
  • >password789:设置该用户的密码为 password789。
  • ~*:允许访问所有的键。
  • +SET +HSET +LPUSH +RPUSH +SADD +ZADD:允许执行所有的写操作,如设置键值、修改哈希、列表、集合和有序集合等。

这样配置后,user3 用户将只能写入数据,但不能读取数据。

3.4 细粒度控制特定键的读写权限

根据键的前缀来控制权限。例如,假设只允许某个用户对以 user:* 为前缀的键进行读写操作:

ACL SETUSER user4 on >password012 ~user:* +GET +SET +HGET +HSET

解释:

  • user4:用户的名称。
  • on:启用该用户。
  • >password012:设置该用户的密码为 password012。
  • ~user:*:只允许访问以 user: 开头的键。
  • +GET +SET +HGET +HSET:允许执行读取和写入操作。

3.5 禁用某些命令(例如禁止删除操作)

根据需要禁用特定的写命令。比如,可以禁止用户执行删除命令(如 DEL、FLUSHDB、FLUSHALL)

ACL SETUSER user5 on >password345 ~* +GET +SET -DEL -FLUSHDB -FLUSHALL

解释:

  • user5:用户的名称。
  • on:启用该用户。
  • >password345:设置该用户的密码为 password345。
  • ~*:允许访问所有的键。
  • +GET +SET:允许执行读取和写入命令。
  • -DEL -FLUSHDB -FLUSHALL:禁止执行删除和清空数据库的命令。

3.6 检查 ACL 配置的正确性

通过 ACL GETUSER 查看某个特定用户的权限配置:

ACL GETUSER user1

通过这些步骤,你可以在自建的 Redis 中实现基于用户的权限管理,像云 Redis 一样对不同的账号设置不同的访问权限。


http://www.kler.cn/a/548448.html

相关文章:

  • VMware安装Kali以及部署DVWA
  • uniapp可视化-活动报名表单系统-代码生成器
  • wordpress资讯类网站整站打包
  • 2025-2-12算法打卡
  • PMP--冲刺--流程图
  • ram的使用——初始化很重要
  • 快速入门 Tailwind CSS:现代前端开发的利器
  • [C++]多态详解
  • 掌握SQL多表连接查询_轻松处理复杂数据关系
  • 【设计模式】【行为型模式】解释器模式(Interpreter)
  • Datawhale 数学建模导论二 笔记1
  • 系统可观测性(1)基础概念
  • 深度解析2025最新微服务版本特性
  • 数据结构 day05
  • 【机器学习】常见采样方法详解
  • DeepSeek赋能制造业:图表可视化从入门到精通
  • 《On Java进阶卷》阅读笔记(五)
  • 无人机遥感图像拼接软件有哪些?无人机遥感图像采集流程;遥感图像拼接的一般流程
  • 【原创】解决vue-element-plus-admin无法实现下拉框动态控制表单功能,动态显隐输入框
  • Github 2025-02-14 Java开源项目日报 Top10