gstack 部署 Supabase RLS 收紧迁移后如何用 verify-rls.sh 验证读与更新已被拦截

发布时间:2026/11/5 5:38:50

gstack 部署 Supabase RLS 收紧迁移后如何用 verify-rls.sh 验证读与更新已被拦截 gstack 部署 Supabase RLS 收紧迁移后如何用 verify-rls.sh 验证读与更新已被拦截【免费下载链接】gstackUse Garry Tans exact Claude Code setup: 23 opinionated tools that serve as CEO, Designer, Eng Manager, Release Manager, Doc Engineer, and QA项目地址: https://gitcode.com/GitHub_Trending/gs/gstackgstack 的遥测数据存储在 Supabase 上supabase/migrations/002_tighten_rls.sql这条迁移把 anon key 对所有遥测表的 SELECT 策略和 installations 表的 UPDATE 策略全部移除只保留 INSERT 策略供 v0.11.16 之前的旧客户端继续直写 PostgREST。迁移部署到 Supabase 项目后需要用supabase/verify-rls.sh跑一遍冒烟测试确认三件事读请求确实被 RLS 拦截、对 installations 的更新确实被拦截、INSERT 仍然放行否则旧客户端会坏掉。这个脚本就是 0.11.16.0 版本随迁移一起引入的配套验证工具。002 迁移做了什么脚本在验证什么002_tighten_rls.sql 的关键动作DROP POLICY移除telemetry_events、installations、update_checks三张表上的anon_select策略DROP POLICY移除 installations 上不受限的anon_update_last_seen策略原策略允许更新全部列REVOKE SELECT显式收回crash_clusters、skill_sequences两个视图的 anon 读权限注释里写作 belt-and-suspenders三张表的anon_insert_only策略保留注释明确说明这是为了 v0.11.16 之前的旧客户端待 edge-function 同步普及后才会在后续迁移中移除。脚本头部注释verify-rls.sh声明的验证目标与之一一对应SELECT denied on all tables and views、UPDATE denied on installations、INSERT still allowed。运行前提需要bash和curl脚本内部用curl发请求mktemp建临时响应文件需要能访问 config.sh 里配置的 Supabase 项目地址。该文件自动提供两个变量GSTACK_SUPABASE_URL项目 URL和GSTACK_SUPABASE_ANON_KEY公开 key注释说明 RLS 已拒绝 anon key 的一切数据访问因此安全可提交仓库脚本必须针对已经部署了 002 迁移的 Supabase 项目运行否则验证结果没有意义。一个必须在运行前明确的副作用第三组 INSERT 检查会向该项目的telemetry_events、update_checks、installations表真实写入测试行如gstack_version: verify_rls_test、installation_id: verify_rls_test。这是脚本设计如此——它要验证的就是INSERT 仍然放行。如果你不想在生产数据里留下这些测试行应在测试环境项目上运行或运行后自行清理。执行验证在 gstack 仓库根目录运行脚本verify-rls.sh 头部注释给出的方式bash supabase/verify-rls.shCHANGELOG 中另外记录过cd supabase ./verify-rls.sh的等价写法两种方式都是文档中出现过的真实命令。脚本会依次执行 9 项检查全部走${GSTACK_SUPABASE_URL}/rest/v1/路径携带apikey和Authorization: Bearer头值就是 anon key检查项方法预期SELECTtelemetry_events/installations/update_checks/crash_clusters/skill_sequences各 1 条GETdenyUPDATEinstallationsinstallation_ideq.test_verify_rlsbody{gstack_version:hacked}PATCHdenyINSERTtelemetry_events/update_checks/installationsPOSTallow如何判断结果每个检查打印一行PASS、FAIL或WARN结束后输出汇总Results: 9 passed, 0 failed (of 9 checks) VERDICT: PASS — reads/updates blocked, inserts allowed以上为脚本输出格式PASS/FAIL 行是脚本按判断逻辑拼接生成的具体每条的 HTTP 码取决于服务端响应Results与VERDICT行的文案来自 verify-rls.sh。退出码全部通过为 0有任何 FAIL 或 WARN 时打印VERDICT: FAIL并以 1 退出。deny 类检查的判定规则verify-rls.sh值得留意因为 HTTP 码相同但含义不同返回401/403被拒绝PASSGET 返回200且响应体是[]或空说明 RLS 在行级过滤了数据PASS输出注明 RLS filteringGET 返回200且有数据说明数据泄漏FAILPATCH 返回204没有行被修改——无论原因是 RLS 拦截还是行不存在攻击者都无法改数据计为 PASS连接失败HTTP 码记为000或其他未预期状态码记 WARN 并计入 failed最终VERDICT: FAIL。allow 类检查中200/201/204以及409主键冲突说明 INSERT 策略生效、行已存在都计 PASS若 INSERT 被拒401/403则 FAIL意味着迁移误删了旧客户端依赖的策略。两个会影响判读的版本细节003 迁移会改变 UPDATE 检查的语义。003_installations_upsert_policy.sql 在 002 之后重新给 installations 加了一条受限的 UPDATE 策略anon 通过列级GRANT UPDATE (last_seen, gstack_version, os)只能更新这三列first_seen和installation_id不可改。如果你的项目已经部署到 003脚本里那条gstack_version的 PATCH 检查即使服务端允许该列更新也会因为test_verify_rls这行不存在而返回 204脚本按no rows affected计为 PASS。也就是说这条检查在 002 之后的完整迁移链上验证的是匿名调用者无法造成数据变更而不是字面上的UPDATE 语句被策略拒绝。旧版脚本的边界 case 已修复。CHANGELOG0.11.16.1记录了verify-rls.sh曾存在的误判现在 INSERT 成功、409冲突、204空更新都被正确处理为通过。如果你手上的脚本版本早于该修复遇到409/204时的判定结果可能和本文描述不一致建议先确认脚本内容。结论与限制成功条件唯一9 项检查全部 PASSVERDICT: PASS退出码 0即读/更新被拦截、INSERT 放行与 002 迁移的设计目标一致。任何FAIL或WARN含连接失败都意味着验证未通过要么迁移未部署到位要么 URL/anon key 配置config.sh与目标项目不符要么网络不通。脚本对mktemp失败会直接中止verify-rls: mktemp failed, aborting不使用可预测的 PID 路径回退——这是共享机器上防止响应文件被预建/符号链接攻击的行为遇到中止时应检查TMPDIR//tmp的可写性而不是绕开它。该脚本只覆盖 REST 层PostgREST RLS的 anon key 行为服务端的读写走 edge function 与service_role_key不在本脚本的验证范围内。【免费下载链接】gstackUse Garry Tans exact Claude Code setup: 23 opinionated tools that serve as CEO, Designer, Eng Manager, Release Manager, Doc Engineer, and QA项目地址: https://gitcode.com/GitHub_Trending/gs/gstack创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/10/31 1:46:13

个人开发者AI编程工具选型指南:提效、避坑与工作流实践

我见过不少个人开发者,装了AI编程工具之后效率反而没提升多少,甚至还被一把梭生成的错误代码坑到凌晨三点。问题通常不在工具本身,而在于没搞明白AI编程工具在当前阶段到底擅长什么、不擅长什么,以及自己的项目到底需要哪一层能力…

2026/10/21 15:32:21

AI编程工具怎么选怎么用?独立开发者实战指南

先聊个很现实的事:我见过不少独立开发者,工具装了一堆,GitHub 星标收藏了几百个,真到写代码的时候还是靠手工硬扛。AI 编程这事火了两三年了,从最早的 Copilot 到现在的各种 AI IDE、对话式编程助手,选择多…

2026/11/5 5:37:57

C# WinForm实现JSON转Excel:动态Schema与嵌套扁平化

简介:这是一份面向C#初学者与WinForm开发者的实用工具型资源,解决JSON数据快速导入Excel的常见需求,适用于数据处理、报表生成及轻量级桌面应用开发场景。压缩包共61个文件,总大小192KB,包含14个核心C#源码文件&#x…

2026/11/5 5:37:57

1km土地利用栅格:编码、投影与转移矩阵避坑

简介:中国1km土地利用数据1980—2015压缩包面向地理学、环境科学、城乡规划与资源管理等领域的研究者和学生,提供覆盖1980至2015年多个时点的1km格网土地利用类型信息,可用于分析近四十年土地变迁、城市扩张、生态保护与农业动态。包内共126个…

2026/11/5 5:37:57

MCD19A2 AOD数据处理:HDF4解析、QA掩膜与批量重投影

简介:MCD19A2数据处理代码包面向遥感与地球科学领域的开发者、研究生及科研人员,聚焦MODIS气溶胶光学厚度与地表反射率产品的批量处理流程,帮助读者跳过重复手工操作、快速搭建可复用的处理链路。压缩包共12个文件、约11KB,以py脚…

2026/11/5 5:37:57

指针仪表数据集:VOC xml校验、YOLO转换与读数落地

简介:指针仪表数据集面向目标检测任务,适合机器学习研究者、算法开发者及需要仪表读数识别项目实践的中高级学习者,用于训练与评估指针仪表定位及关键读数信息提取模型。压缩包共785个文件,以783张jpg仪表图像为主,另含…

2026/11/5 5:37:57

从手势到按键:Python+MediaPipe手势控制键盘与防误触状态机

简介:AI手势识别控制键盘项目以Python为核心,结合Mediapipe的Hand Detection模块与OpenCV视频流处理,把手部动作映射为键盘输入,适合计算机视觉、人机交互方向的初学者和课程设计开发者,也便于需要快速搭建手势控制原型…

2026/11/5 5:32:56

第 2 章|你的系统难,难在哪:本质复杂度 vs 偶然复杂度

上一章立了一个论:没有银弹。这一章把刀磨细——你系统里的"难",到底难在哪一类? 分不清这两类,你就会把力气全花在错的地方:拿框架去解决一个根本不是框架的问题,却把真正难的那两处一直晾着。 一、先回到那张地基表(本章的一切从这里长出来) 本质复杂度 偶…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 0:02:07

多智能体协作系统架构设计与实践优化

1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中…

2026/11/5 0:02:07

大模型系统性入门实战指南:从原理到部署微调的全链路路线

提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#…

2026/11/5 0:02:07

鸿蒙文件系统沙箱机制解析与开发实践

1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑