mcpField
R
rowstile

rowstile

本地服务
rowstile.dev安全31 天前更新

关于 rowstile

rowstile 是面向使用 PostgreSQL 的应用开发者的授权工具,将策略文件编译为 SQL 和行级安全规则。它直接依据应用现有数据判定权限,无需另设授权服务。

主要功能

  1. 01用策略文件描述访问规则
  2. 02编译为 SQL、视图和行级安全策略
  3. 03支持继承、共享、群组和租户规则
  4. 04生成数据库迁移以接入常用迁移工具
  5. 05提供权限检查、审查和审计函数

适用场景

  1. 01按所有者、群组或文件夹继承控制行访问
  2. 02为多租户应用制定数据访问策略
  3. 03测试并审查行级安全策略变更

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"rowstile-rowstile": {
"command": "npx",
"args": [
"-y",
"rowstile"
]
}
}
}
启动命令npx -y rowstile

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmrowstile0.1.0-beta.1

工具

7

收录的工具列表 · 更新于 5 天前

参数类型必填说明
policystring否策略文件(默认: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,会指出要添加的软件包),并说明要修改哪一行。

文档

此代码库

文件夹内容
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 Scorecard

项目对 OpenSSF 最佳实践标准的自评,达到合格级别:关于文档、变更、测试和安全保障的每项回答,都注明了核查位置: OpenSSF Best Practices

License

Apache License 2.0; see LICENSE. Copyright 2026 Salaheddine EL HSSANI.

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。