Serving Apache Superset to multiple customers (multi-tenant) requires a thought-out architecture: isolation, security, performance, billing. Several patterns exist, each with its trade-offs. This guide compares approaches in 2026 for a SaaS stack that wants to integrate Superset.
1. Three multi-tenant patterns
| Pattern | Isolation | Cost | Use case |
|---|---|---|---|
| Shared instance + RLS | Logical | Low | Light B2B SaaS, similar dashboards |
| Dedicated instance per tenant | Strict | High | Strong compliance, customizations |
| Hybrid (pool + RLS) | Medium | Medium | SaaS scale-up |
If you want a dedicated instance per customer without complexity, TVL Managed Superset offers a "dedicated instance per tenant" mode provisioned in 10 minutes.
2. Pattern 1 — Shared instance + RLS
One single Superset instance, all tenants use the same metadata DB. Isolation via dynamic Row Level Security.
Pros
- Lowest infrastructure cost;
- Single maintenance;
- Update simplicity.
Cons
- Misconfigured RLS risk = data leak;
- No customization per tenant (logo, branding);
- Noisy neighbor (a heavy tenant impacts others);
- Compliance difficult for regulated sectors.
3. Pattern 2 — Dedicated instance per tenant
Each customer has their own complete Superset instance: their web pod, worker, metadata DB.
Pros
- Strict isolation (separate data plane);
- Total customization (branding, plugins, version);
- No noisy neighbor;
- Compliance simplified (DPA per tenant).
Cons
- Linear infrastructure cost (×N tenants);
- Multi-instance maintenance;
- Provisioning to automate.
This configuration is applied by default on TVL Managed Superset in dedicated mode, which follows community best practices.
4. Pattern 3 — Hybrid (pool + RLS)
Multiple Superset pools, each pool containing 10-100 similar tenants. RLS in each pool.
Pros
- Intermediate cost;
- Possibility to place "big" tenants in dedicated pools;
- Scalability (add pool if saturated).
5. Shared data model
For pattern 1 (RLS), typical structure:
-- All tables include tenant_id
CREATE TABLE orders (
id UUID PRIMARY KEY,
tenant_id VARCHAR NOT NULL,
customer_id UUID,
amount DECIMAL,
created_at TIMESTAMP
);
-- Index on tenant_id mandatory
CREATE INDEX idx_orders_tenant ON orders(tenant_id, created_at);
And the Superset RLS rule:
tenant_id = '{{ current_user_id() }}'
6. Automated provisioning
For pattern 2 (dedicated), typical workflow:
- Customer signup on the SaaS;
- Webhook → provisioning service;
- Helm install of a new Superset instance (1-3 min);
- Dynamic DNS
tenant.app.example.com; - Email to customer with credentials.
7. Billing
| Model | Compatible pattern |
|---|---|
| Flat fee per tenant | All |
| Pay-per-user | Shared |
| Pay-per-query | Shared (with quotas) |
| Pay-per-instance | Dedicated |
8. Multi-tenant security
- RLS tested automatically in CI;
- Audit log per tenant;
- Quotas CPU/RAM/queries per tenant;
- Embed token with dynamic RLS clause for SaaS embedded;
- DPA GDPR-compliant signed with each tenant.
9. Conclusion
Superset multi-tenant architecture is non-trivial but masterable with the three patterns above. For a B2B SaaS stack, the hybrid (pool + RLS) is often the right compromise. For regulated sectors (banking, health), dedicated instance per tenant remains the safest path.
Want the benefits of Apache Superset without the friction of multi-tenant architecture? Deploy your instance in 3 clicks with TVL Managed Superset, hosted in Europe (OVHcloud, Roubaix, France), "dedicated instance per tenant" mode available.
For more: Row Level Security, embedded dashboards, customer isolation.