rowstile について
rowstileは、Postgresを使うアプリの開発者向け認可ツールです。ポリシーファイルをSQLと行レベルセキュリティ規則に変換し、既存データを使って権限を判定します。別の認可サービスは不要です。
主な機能
- 01ポリシーファイルでアクセス規則を定義
- 02ポリシーをSQLと行レベルセキュリティに変換
- 03継承、共有、グループ、テナントに対応
- 04一般的なマイグレーションツール向けに移行を生成
- 05権限確認、レビュー、監査用関数を提供
活用シーン
- 01所有者、グループ、フォルダーの継承による行アクセス制御
- 02マルチテナントアプリのデータアクセス方針の設定
- 03行レベルセキュリティ変更のテストとレビュー
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
7掲載時のツール一覧 · 5 日前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| policy | string | いいえ | ポリシーファイル(既定値: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 の場合は追加するパッケージ名を示し)、変更する行も案内します。
ドキュメント
- はじめに:スキーマからポリシー、テスト、編集の反復、最初のマイグレーションまでを約15分で紹介します。
- rowstile と代替手段:認可サービス、ポリシーエンジン、ORM 内のルール、手動での行レベルセキュリティ、およびrowstile の検証方法。
- お使いの技術スタック:FastAPI、Next.js、その他の Node および Python アプリ、さらに他の言語から送信する SQL。
- クックブック、トラブルシューティング、rowstile の実行、マネージド Postgres(Neon、Supabase)、S3 互換ストレージ内のファイル、エラーコード。
- リファレンス:ポリシー言語、アプリコード、アイデンティティ、ガバナンス、ツール、マイグレーション、変更のレビュー、仕組み、速度と制限。
- プレイグラウンド:ブラウザー内でコンパイラーと実際の Postgres を利用できます。インストールは不要です。
- コーディングエージェント向け:llms.txt、および rowstile.dev の各ページの Markdown 版(各ページの URL の末尾に
.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 アクションと 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 Best Practices の基準を合格レベルで満たすための、プロジェクト独自の回答です。文書化、変更、テスト、セキュリティ確保の方法を、各項目の確認先とともに示しています:
License
Apache License 2.0; see LICENSE. Copyright 2026 Salaheddine EL HSSANI.
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。