当前位置:首页 > 文章列表 > 数据库 > Redis > Redis ACL LIST 怎样导出用户权限并比较两台实例差异

Redis ACL LIST 怎样导出用户权限并比较两台实例差异

来源:17golang原创 2026-11-11 04:50:18 0浏览 收藏

迁移 Redis 或做权限审计时,我更愿意先把两台实例的有效 ACL 规则导出成文本,再讨论差异。这个动作只读取当前权限,不会修改用户;核心命令是 ACL LIST,它返回按 ACL 文件格式表达的用户规则。

官方地址:https://redis.io/docs/latest/commands/acl-list/

用 redis-cli --raw ACL LIST 分别导出两台实例,按“完整用户规则行”排序后执行 diff -u。不要把一行里的规则 token 再排序,因为 Redis ACL 规则按从左到右解释。

下面只讨论导出、规范化和比较,不执行 ACL SETUSER、ACL LOAD 等修改动作。

ACL LIST 导出的内容到底是什么

Redis 官方文档把 ACL LIST 定义为导出当前有效规则的命令。通常可以把返回结果理解为“一行一个用户”,每行以 user 和用户名开头,后面跟着启停状态、密码规则、键模式、频道模式和命令类别等 ACL 规则。

user default on nopass ~* &* +@all
user app on # ~cache:* &events:* +@read -@dangerous

示例中的哈希只是脱敏占位,不应把真实导出文件直接贴到工单或聊天窗口。ACL 规则的排列不是普通无序标签:官方 ACL 说明强调规则从左到右生效,后面的规则可能覆盖前面的允许或禁止。因此,比较时可以改变“用户行”的排列,却不要拆开单行后按字母重排。

Redis 实例、ACL LIST、用户规则行、ACL 文件格式和只读审计文件的静态关系说明图
图1:结构说明图,查看 ACL LIST 从 Redis 实例到用户规则文件的边界关系;这是静态说明图,不是运行截图。

先把两台实例导出成同一种文本

两端都使用 --raw,让 redis-cli 输出更适合保存和比较的原始行。认证方式用 --askpass 或现有安全凭据管理方式,示例不把密码写进命令行。

# 从实例 A 导出有效 ACL 规则;--raw 保留每个用户一行
redis-cli -h redis-a.example --user audit-reader --askpass --raw ACL LIST > acl-a.txt

# 从实例 B 导出有效 ACL 规则;示例地址只用于说明,不代表真实环境
redis-cli -h redis-b.example --user audit-reader --askpass --raw ACL LIST > acl-b.txt

# 只对完整用户行排序,不拆开单行中的 ACL 规则
LC_ALL=C sort acl-a.txt > acl-a.sorted.txt
LC_ALL=C sort acl-b.txt > acl-b.sorted.txt

这里的排序目的是消除两台实例返回用户的顺序差异。LC_ALL=C 让同一批文件在不同机器上使用一致的字节序排序,便于审计脚本重复运行。它不会改变任何 Redis 权限,也不会改变一行内部的规则先后。

用 diff 区分三类权限差异

规范化后直接比较两个完整文件:

# 输出统一格式的差异;--- 和 +++ 分别代表两端文件
diff -u acl-a.sorted.txt acl-b.sorted.txt

看结果时可以按下面的方式判断:

diff 现象通常表示优先复核
只有 -user ...实例 A 有而实例 B 没有,或整行规则不同用户名、启停状态、密码规则、键和命令范围
只有 +user ...实例 B 有而实例 A 没有,或整行规则不同是否是迁移后新增账号,是否超出变更单
同名用户出现一删一加用户名相同但有效规则行不同逐段比较规则,不要只看用户是否存在

如果担心终端颜色或上下文影响归档,可以把差异保存为文件。对 ACL 导出文件和差异文件都设置最小访问权限,并在审计结束后按组织的保留策略清理。

# 保存差异并限制本地文件的默认可读范围
umask 077
diff -u acl-a.sorted.txt acl-b.sorted.txt > acl-diff.patch || diff_status=$?

# diff 返回 1 表示存在差异,不要把它误当成命令执行失败
if [ "${diff_status:-0}" -gt 1 ]; then
  echo "diff 执行失败,请检查输入文件" >&2
  exit "${diff_status}"
fi

迁移前后的边界别混在一起

ACL LIST 适合回答“当前两台实例的有效用户规则是否一致”,但它不是完整的迁移动作。导出文件能帮助发现用户、键模式、频道模式和命令类别的差异;它不能替你确认客户端是否拿到了正确密码,也不能证明业务连接已经切换。

实际迁移时,我会把审计分成三层:先比较 ACL 规则文本,再由授权人员确认密码和凭据分发,最后单独安排应用连接切换。不要因为 diff 为空就把生产凭据写入脚本,也不要把导出的规则文件当成可公开分享的普通日志。

两台 Redis 实例导出完整用户规则并通过 diff 区分新增、缺失和同名用户变化的静态结构图
图2:关系说明图,查看两台实例如何以完整用户规则行进入差异对照;这是静态说明图,不是运行截图。

几个容易误判的问题

为什么不能把每行拆开排序? 因为 ACL 规则的左到右顺序有语义,拆开后可能把原本有意义的覆盖关系改写成另一种文本。

为什么同一个用户会显示成一删一加? diff 比较的是整行文本,只要该用户的一项规则变化,就会以旧行删除、新行新增的方式呈现。这正好提醒你逐项查看,而不是把它误判成两个用户。

ACL LIST 能否直接恢复另一台实例? 本文不把导出结果当成自动恢复脚本。恢复或修改需要单独的变更流程、权限审批和凭据处理;本方法只负责提供可审计的只读对照材料。

总结

比较 Redis ACL 的关键不是把输出“洗成任意格式”,而是保持每个用户规则行的语义,再消除用户行顺序造成的噪声。两端用 --raw ACL LIST 导出,整行排序后用 diff -u 对照,就能清楚看到新增用户、缺失用户和同名用户权限变化,同时把审计与权限修改、凭据切换分开。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
Redis ACL DRYRUN 怎么预演用户权限而不执行命令Redis ACL DRYRUN 怎么预演用户权限而不执行命令
上一篇
Redis ACL DRYRUN 怎么预演用户权限而不执行命令
Redis ACL SAVE 和 ACL LOAD 怎么迁移用户权限文件
下一篇
Redis ACL SAVE 和 ACL LOAD 怎么迁移用户权限文件
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    976次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    981次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    1096次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    1068次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    906次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议 和 隐私政策
返回登录
  • 重置密码