mcpField
R
rowstile

rowstile

ローカル
rowstile.devセキュリティ31 日前に更新

rowstile について

rowstileは、Postgresを使うアプリの開発者向け認可ツールです。ポリシーファイルを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 内の認可。 共有、グループ、ネストされたフォルダーやテナントを、1 つのポリシーファイルに記述し、行レベルセキュリティにコンパイルします。データベースの隣で稼働させる認可サービスは不要です。また、権限データを別の場所にコピーして同期を保つ必要もありません。ルールは、アプリがすでに使っているテーブルを読み取ります。

ポリシー、そのテスト、変更前後の一語とレビュー内容、理由を示す拒否された書き込み、それを許可する方法

誰が何をできるかを、依存するデータのそばにある小さなファイルに記述します。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;

対象となるケース

次のような場合に適しています。

  • アプリのデータが 1 つの Postgres データベースにある。
  • 行へのアクセス可否が他の行に依存する。たとえば、所有者、チームのメンバー(チーム内のチームを含む)、アクセス権を引き継ぐフォルダーやプロジェクト、テナント、ユーザー同士の共有など。
  • 認可サービスを追加してデータベースと同期させようとしている、または手書きの行レベルセキュリティがテストや変更をしにくくなっている。

次のような場合には適していません。

  • アクセスを決める情報が複数のデータベースにある、または Postgres の外にある。
  • ブラウザーが Supabase の Data API 経由でテーブルを読み取る(そのロールはアプリのロールではないため、バックエンドでサインインする必要があります)。
  • 1 つのツリーに多数の移動があり、別のツリーと相互にリンクしている(互いの完了を待ちます)。
  • 外部監査や、すぐに利用できるベンダーの後ろ盾が必要である。rowstile はベータ版で、メンテナーは 1 人です。

ステータス

rowstile 0.1.0 はベータ版です。リリース前に使える程度には完成していますが、利用して必要性が明らかになった部分は、今後も変更される可能性があります。1.0 までは、マイナーリリースで言語、authz.* 関数、SDK、ファイル形式が変更される場合があります。ベータ版以降、各リリースではその直前のバージョンからデータベースをアップグレードでき、変更履歴には必要な作業が記載されます。0.x リリースで保証されること。

rowstile は 0.1.0-alpha.1 までは rowfence という名前でした。別の製品が先にその名前を使っていたためです。アルファ版での変更内容は変更履歴をご覧ください:ベータ版以前。

インストール

現在公開されているのはプレリリースのみです。最新版をお使いください。

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 を同梱します。イメージは Linux の x64 と arm64 向けで、指定がなければ 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 アクションと 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 が評価する、プロジェクト自体の運営方法(アクションの固定、各ワークフローのトークンに許可される操作、依存関係の既知の脆弱性、レビュー、リリース): OpenSSF Scorecard

OpenSSF Best Practices の基準を合格レベルで満たすための、プロジェクト独自の回答です。文書化、変更、テスト、セキュリティ確保の方法を、各項目の確認先とともに示しています: OpenSSF Best Practices

License

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

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。