TSKaigi 2024 ref: https://tskaigi.org/talks/tockn
![Prisma ORMを2年運用して培ったノウハウを共有する](https://cdn-ak-scissors.b.st-hatena.com/image/square/e01e01d37d8382a10d67c94078a00e06a8c428f6/height=288;version=1;width=512/https%3A%2F%2Ffiles.speakerdeck.com%2Fpresentations%2F7c6c5ab6613343eeb15a2124bba68e3a%2Fslide_0.jpg%3F30043160)
文脈、背景や問題点の説明 マルチテナントを実装するうえで企業情報(以下company)単位で最小限の情報を扱うようにしたいがcompany単位にTableを作ったりDatabaseを作るのはALTERなどの運用が大変。 そこでRLSを採用するために実際の技術検証をした上での注意点と実際の運用について必要な情報をまとめる。 PostgreSQL 14を前提としている 公式ドキュメント CREATE POLICY 必ず一読はすること。 困ったとき、わからないときはまずは公式ドキュメントを都度見ること。 このドキュメントのゴール RLSの概要をつかめる RLSの最低限の注意点を理解し、実装時に罠を踏まない 自分たちでRLSのポリシー自体をメンテナンスすることができ、デバッグできる テーブル構成 create table if not exists company ( id uuid defaul
SmartHRで届出書類という機能を担当しているプロダクトエンジニアのsato-sと申します。 今日は、以前私が調査にとても苦労したパフォーマンス上の問題の話を紹介したいと思います。 TL;DR PostgreSQLのアップグレードを実施した アップグレード後、今までは問題のなかった特定のクエリの実行に1時間超かかり、DBのCPU使用率がピッタリ100%に張り付くようになった 色々調査した結果、PostgreSQL上の型キャストの場所のせいで、良くないクエリプランが選択されることが原因だった 型キャストの場所には気をつけよう PostgreSQLのアップグレードと挫折 SmartHRでは基本的にWebアプリケーションのデータベースとしてGoogle CloudのCloudSQLによって提供されるPostgreSQLを利用しています。 私の担当している届出書類機能では、利用中のPostgre
こんにちは、清水(@_smzst)です。直近の業務でマルチテナントな DB でアプリケーションでのスイッチロール機能を実現するために Amazon Cognito や表題にある Row Level Security について技術検証や設計検討を行っていました。 今回はこの Row Level Security について PostgreSQL での例を挙げて挙動を確認しながら、実際に導入するにあたって必要な知識や注意点までを網羅します。本記事が安全で堅牢なアプリケーション構築の一助となれば幸いです。 1. マルチテナントとは 2. Row Level Security とは 3. 実際に試してみる 3-1. 実現するための SQL 3-2. RLS 有効化前 3-3. RLS 有効化後 4. 補足 4-1. クエリのパフォーマンスについて 4-2. ユーザーとロールの管理について 4-3.
マルチテナントなECサイトの注文データをイメージしています。tenant_nameのカラムにテナント名が入り、このカラムとDBユーザーの一致を行セキュリティポリシーよってチェックするようなイメージです。 テストデータ等の準備 それでは検証環境を準備していきましょう。今回の検証にはPostgreSQLバージョン11.11を利用しています。 まずはテーブルを作成 CREATE TABLE orders ( id SERIAL PRIMARY KEY, tenant_name text, product_code text, order_date timestamp ); CREATE TABLE 続いてマルチテナント用のDBユーザーを作成 CREATE ROLE user01 LOGIN; CREATE ROLE CREATE SCHEMA "saas"; CREATE SCHEMA GRAN
はじめに 最近GoでマルチテナントSaaSの開発をやっておりまして、PostgreSQLのRLSの実装をはじめてやって見ましたので、その内容について共有したいと思います。 RLSとは テーブルレベルで行う設定でSELECT、UPDATE、INSERT、DELETEで影響を受ける行を制限する仕組みです。データベースエンジンが管理する自動化したWHERE句と考えることができます。 簡単な例で見てみましょう。 -- テナントテーブル作成及び、初期データ導入 CREATE TABLE IF NOT EXISTS tenants ( id serial PRIMARY KEY, name varchar(100) NOT NULL UNIQUE ); INSERT INTO tenants (name) values ('tenant1'); INSERT INTO tenants (name) v
Amazon Web Services ブログ PostgreSQL の行レベルのセキュリティを備えたマルチテナントデータの分離 Software as a Service (SaaS) プロバイダーには、基本的にテナントデータの分離を適用する責任があります。テナントの 1 つが別のテナントのデータにアクセスした場合、信頼はなくなり、ビジネスのブランドに永久的な損害を与える可能性があるだけでなく、さらにひどい場合には、ビジネスを失う可能性があります。 リスクが非常に大きいため、効果的なデータの分離を計画することが重要です。マルチテナントアーキテクチャは、各テナントのリソースをレプリケートするのではなく、すべてのテナントのデータストレージリソースを共有することで、俊敏性と運用コストを節約します。しかし、共有モデルで分離を適用することは難しいため、マルチテナントデータモデルで妥協して、テナント
こんにちは、サーバーサイドエンジニアーのユキチです。 SaaSの開発を行う上では複数の企業様のデータを扱うことになります。 そういったマルチテナントのデータ設計を行う上で、弊社ではPostgreSQLのRow Level Securityという機能を使って実装しました。 今回はPostgreSQLのRow Level Security(以下RLS)という機能を使ってマルチテナントのデータ操作を安全に扱う方法を紹介していきたいと思います。 マルチテナントデータベース設計 主に3パターンの設計手法が考えられます。 Multi Tenants in 1 Database:複数企業のデータを一つのデータベースで管理 1 Tenant in 1 Database:テナントごとにデータベースを分けて管理。物理的なインスタンスは同じ。 1 Tenant in 1 Instance:テナントごとにデータベ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く