Redis如何控制只读从库的安全_配置replica-read-only防止从节点数据被意外篡改
必须开且默认就该是 yesRedis 6.0 默认启用老版本或手动配置常误设为 no导致从库可写引发数据不一致需 CONFIG SET replica-read-only yes 并持久化到 redis.conf。replica-read-only 配置到底开不开开。必须开且默认就该是 yes。Redis 6.0 默认已是 replica-read-only yes但老版本或手动配置过 redis.conf 的实例常被改成 no导致从库可写——这不是“功能”是安全隐患。从库可写最直接的后果应用误连从库执行 SET、DEL 或 FLUSHDB数据瞬间不一致主从复制不报错但业务读到脏数据或空值排查时往往卡在“为什么从库有数据主库没有”。实操建议检查当前值redis-cli CONFIG GET replica-read-only返回 1) replica-read-only 2) no 就得改运行时启用redis-cli CONFIG SET replica-read-only yes立即生效无需重启持久化配置在 redis.conf 中确保有 replica-read-only yes避免重启后回退注意该配置只影响 Redis 自身命令写入不阻止客户端用 EVAL 执行恶意 Lua 脚本绕过见下一条从库能执行 EVAL 吗replica-read-only 拦不住replica-read-only yes 只禁用普通写命令SET、HSET、LPUSH 等但 EVAL 和 EVALSHA 默认仍可执行——只要脚本里没调用写命令Redis 就不拦而一旦脚本里含 redis.call(SET, ...)它会直接报错 ERR Write commands are not allowed on a read-only replica但这个报错发生在脚本运行中不是语法校验阶段。风险在于攻击者或误操作的运维可能用 EVAL 读取键再拼接写逻辑或依赖脚本原子性做非幂等操作结果在从库上留下中间状态。实操建议生产环境从库务必禁用 Lua 写能力redis-cli CONFIG SET lua-replicate-commands noRedis 3.2更彻底的做法在 redis.conf 加 lua-replicate-commands no replica-read-only yes 双保险注意lua-replicate-commands no 不影响只读脚本如 GET、EXISTS但会拒绝任何含写操作的 EVAL包括 redis.call(INCR)客户端连错从库还写了数据怎么快速发现没有自动告警。Redis 本身不记录“谁在从库上写了什么”MONITOR 开销大不能常开SLOWLOG 也不区分主从上下文。真正能抓到问题的是日志和监控链路。 AI智研社 AI智研社是一个专注于人工智能领域的综合性平台