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

自建 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 一样对不同的账号设置不同的访问权限。

相关文章:

  • 【Matlab算法】基于人工势场的多机器人协同运动与避障算法研究(附MATLAB完整代码)
  • Unity与SVN集成:实现高效版本控制
  • Bigemap pro如何添加星图地球
  • MySQL创建存储过程和存储函数
  • ubuntu服务器部署
  • IPv4 协议和TCP 协议的区别
  • 玩转状态模式
  • mysql基础操作语句
  • 数据结构:Map Set(一)
  • 【Jenkins流水线搭建】
  • getContainer 是 Ant Design 中重要属性
  • 0基础学LabVIEW
  • 第五篇:AI增强与未来演进——指标管理平台的智能化革命
  • org.apache.kafka.common.errors.TimeoutException
  • C语言:数组和冒泡排序
  • 进阶数据结构——树状数组
  • 鸿蒙HarmonyOS NEXT开发:优化用户界面性能——组件复用(@Reusable装饰器)
  • 【抽象代数】1.2. 半群与群
  • 云HIS医院管理信息系统程序代码,SaaS模式Java语言开发
  • 第 14 天:UE5 C++ 与蓝图(Blueprint)交互!
  • 国宝文物子弹库帛书二、三卷从美启程,18日凌晨抵京
  • 银行积分大幅贬值遭质疑,涉及工行、中行、农行等
  • 魔都眼|锦江乐园摩天轮“换代”开拆,新摩天轮暂定118米
  • 中科飞测将投资超10亿元,在上海张江成立第二总部
  • 多家外资看好中国市场!野村建议“战术超配”,花旗上调恒指目标价
  • 老人将房产遗赠给外孙,三个女儿却认为遗嘱应无效,法院判了