关于 rowstile
rowstile 是面向使用 PostgreSQL 的应用开发者的授权工具,将策略文件编译为 SQL 和行级安全规则。它直接依据应用现有数据判定权限,无需另设授权服务。
主要功能
- 01用策略文件描述访问规则
- 02编译为 SQL、视图和行级安全策略
- 03支持继承、共享、群组和租户规则
- 04生成数据库迁移以接入常用迁移工具
- 05提供权限检查、审查和审计函数
适用场景
- 01按所有者、群组或文件夹继承控制行访问
- 02为多租户应用制定数据访问策略
- 03测试并审查行级安全策略变更
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
7收录的工具列表 · 更新于 5 天前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| policy | string | 否 | 策略文件(默认:rowstile.toml 的 `policy`) |
详细介绍
rowstile:在策略文件中定义访问规则,由 Postgres 强制执行
在你的 Postgres 中进行授权。 共享、群组、嵌套文件夹和租户,都写在一个策略文件中,并编译为行级安全策略。无需在数据库旁运行授权服务,也无需将权限数据复制到服务中并保持同步:规则直接读取应用已有的表。

在一个小文件中写明谁能对什么执行哪些操作,并将文件放在它所依赖的数据旁边。rowstile
命令会将其编译为纯 SQL:视图、通过触发器维护的继承表、行级安全策略,以及供应用代码使用的函数:检查、共享、“谁有访问权限”、“为什么”、访问请求、审核和审计。每次策略变更都会作为迁移交给应用已有的工具(Alembic、Prisma、Drizzle Kit、纯 SQL)。数据库无需预先安装任何内容,也无需在数据库旁运行任何服务:任何 Postgres 16、17 或 18 都适用,无论是否托管;表的所有者即可运行迁移,无需超级用户权限。
app role app_user -- the Postgres role the app connects as
type user = app.users
type folder = app.folders
owner : user = owner_id -- a relation read from a column
parent : folder = parent_id
editor : user = app.folder_editors(folder_id -> user_id) -- ... or from a link table
can edit = owner or editor or parent.edit -- inherited down the tree
can view = edit
rules app.folders
select : view
update : edit
update owner_id : owner -- only the owner gives it away
update parent_id after : parent.edit -- moved only under a folder they may edit
应用会在每个事务中说明请求者是谁,并像往常一样查询表;RLS 会过滤每次读取,并检查每次写入:
BEGIN;
SELECT authz.act_as('user', '42'); -- a trusted backend, or:
-- SELECT authz.login_key('ak_...'); -- an API key (optionally limited by scopes)
-- SELECT authz.login_jwt('eyJ...'); -- a JWT from your identity provider
SELECT * FROM app.folders; -- only the folders 42 may view
SELECT authz.can('folder', 7, 'edit'); -- ask directly
SELECT * FROM authz.perms_of('folder', ARRAY['7', '8']); -- a list's buttons, in one call
COMMIT;
适合你吗?
适用情况:
- 应用数据存储在一个 Postgres 数据库中;
- 某行是否可见或可更改,取决于其他行:该行的所有者、团队成员(团队中还包含团队)、可向下传递访问权限的文件夹或项目、租户,以及人们彼此共享的内容;
- 你正打算添加授权服务并使其与数据库保持同步,或者手写的行级安全策略已变得难以测试和修改。
不适用情况:
- 决定访问权限的数据分散在多个数据库中,或位于 Postgres 之外;
- 浏览器通过 Supabase 的 Data API 读取表(它的角色不是应用角色:必须由后端登录);
- 同一棵树需要执行许多次移动,并链接另一棵树(它们会互相等待);
- 你现在就需要外部审计或背靠供应商的保障:rowstile 仍处于 beta 阶段,目前只有一位维护者。
状态
rowstile 0.1.0 处于 beta 阶段:功能已足够完善,可在正式发布前使用;使用过程中发现需要改动的地方,也仍可能发生变化。在 1.0 之前,小版本可能会更改语言、authz.* 函数、SDK 和文件格式;从 beta 阶段开始,每个版本都能将数据库从前一版本升级,变更日志会说明操作方法。0.x 版本承诺的内容。
rowstile 在 0.1.0-alpha.1 之前名为 rowfence;另一个产品先用了这个名字。变更日志说明了各个 alpha 版本的情况:beta 之前。
安装
目前只发布了预发布版本:请索取最新版本。
npm i -D rowstile@next # 自带 Python 的命令:TypeScript 应用无需安装 Python
pip install --pre rowstile # 命令和 Python SDK:rowstile[fastapi]、[sqlalchemy] 等
docker run --rm -u "$(id -u):$(id -g)" -v "$PWD:/work" ghcr.io/rowstile/rowstile:0.1.0-beta.1 migrate
npm 会提供适用于 Linux(glibc 和 musl,x64 和 arm64)、macOS(x64 和 arm64)以及 Windows x64 的 Python。镜像适用于 x64 和 arm64 上的 Linux;除非另行指定,否则会以 root 身份运行:-u 可确保它写入的文件归你所有。安装说明
中包含其余内容:预发布版本、附加组件和代码仓库。
在此代码仓库中,将 core/cli 添加到 PATH。rowstile init 随后会检测技术栈(Next.js、Prisma、
Drizzle、FastAPI、SQLAlchemy、Alembic、goose、dbmate、Flyway),为其迁移工具编写 rowstile.toml,
将 SDK 的软件包添加到 package.json(对于 Python,会指出要添加的软件包),并说明要修改哪一行。
文档
- 入门:从架构到策略、测试、编辑循环和首次迁移,大约只需十五分钟。
- rowstile 与其他方案:授权服务、策略引擎、ORM 中的规则、手动配置行级安全;以及rowstile 的检查方式。
- 你的技术栈:FastAPI、Next.js、其他 Node 和 Python 应用,以及任何其他语言发送的 SQL。
- 手册、故障排除、运行 rowstile、托管 Postgres(Neon、Supabase)、S3 兼容存储中的文件、错误代码。
- 参考:策略语言、应用代码、身份、治理、工具、迁移、审查变更、工作原理、速度和限制。
- 在线体验:在浏览器中使用编译器和真实的 Postgres,无需安装任何东西。
- 面向编码 Agent:llms.txt,以及 rowstile.dev 的每个页面的 Markdown 版本,可通过在页面地址后添加
.md访问 (https://rowstile.dev/getting-started.md)。
此代码库
| 文件夹 | 内容 |
|---|---|
core/ | 编译器和 rowstile 命令、它们的测试和基准测试 |
sdk/ | SDK:Python(FastAPI、SQLAlchemy、psycopg、asyncpg)和 TypeScript(Next.js、Prisma、Drizzle、pg、postgres.js、React) |
integrations/ | 每个 SDK 的一致性测试套件:一个小型应用及其必须通过的检查 |
examples/ | 使用 rowstile 构建的完整应用:文件管理器和即时通信应用 |
editor/ | VS Code 和 Zed 扩展、Tree-sitter 语法(Helix、Neovim);其他编辑器可启动 rowstile lsp |
review-ci/ | 用于拉取请求的策略审查:GitHub action 和 GitLab CI 模板 |
docs/ | Markdown 格式的指南和参考文档 |
site/ | 文档网站 rowstile.dev(VitePress):从 docs/ 构建页面 |
playground/ | 在浏览器中运行 rowstile(Pyodide 和 PGlite) |
packaging/ | rowstile 的安装方式:npm、PyPI 和 Docker 镜像 |
demo/ | 本页顶部的视频录制:record.sh 会在指南自带的应用上运行 demo.tape |
参与贡献
有问题,或想分享你用 rowstile 构建的东西:讨论区。 欢迎提交问题和拉取请求:CONTRIBUTING.md 说明如何将变更合并进来,行为准则说明我们如何协作。每个版本的变更内容见 CHANGELOG.md。版本号的规则和发布方式见 RELEASING.md。
安全
rowstile 尚未接受项目外部人员的审计。威胁模型说明了它保护什么,以及防范谁。请私下报告漏洞:SECURITY.md。
OpenSSF Scorecard 衡量项目自身的运行方式(固定版本的 action、每个工作流令牌的权限、依赖项中的已知漏洞、审查、发布):
项目对 OpenSSF 最佳实践标准的自评,达到合格级别:关于文档、变更、测试和安全保障的每项回答,都注明了核查位置:
License
Apache License 2.0; see LICENSE. Copyright 2026 Salaheddine EL HSSANI.
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。