<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Building MultiTenant Architecture on Databricks Platform in Community Articles</title>
    <link>https://community.databricks.com/t5/community-articles/building-multitenant-architecture-on-databricks-platform/m-p/142956#M927</link>
    <description>&lt;P class=""&gt;Good breakdown of the Databricks storage and catalog isolation patterns.&lt;/P&gt;&lt;P class=""&gt;One thing to keep in mind: workspace binding and Unity Catalog handle data isolation well, but the authentication layer is where tenant context gets established first. Without proper tenant identification at auth time, even the best data isolation can be bypassed.&lt;/P&gt;&lt;P class=""&gt;For the complete picture, you'll want to ensure:&lt;/P&gt;&lt;UL class=""&gt;&lt;LI&gt;Identity provider properly scopes tenant context in tokens&lt;/LI&gt;&lt;LI&gt;Workspace access policies validate tenant claims before any catalog access&lt;/LI&gt;&lt;LI&gt;Service principals are tenant-scoped&lt;/LI&gt;&lt;/UL&gt;&lt;P class=""&gt;&lt;A class="" href="https://ssojet.com/blog/tenant-isolation-in-multi-tenant-systems#1-why-tenant-isolation-becomes-critical-the-moment-you-add-authentication" target="_blank" rel="noopener"&gt;This covers how authentication ties into tenant isolation&lt;/A&gt; - particularly relevant when connecting your IdP to Databricks workspaces.&lt;/P&gt;&lt;P class=""&gt;Overall, solid architecture though. The catalog-per-tenant + workspace binding approach gives you strong isolation guarantees.&lt;/P&gt;</description>
    <pubDate>Mon, 05 Jan 2026 04:50:10 GMT</pubDate>
    <dc:creator>andyssojet</dc:creator>
    <dc:date>2026-01-05T04:50:10Z</dc:date>
    <item>
      <title>Building MultiTenant Architecture on Databricks Platform</title>
      <link>https://community.databricks.com/t5/community-articles/building-multitenant-architecture-on-databricks-platform/m-p/125937#M791</link>
      <description>&lt;P&gt;This use case demonstrates how a SaaS product can be deployed for multiple customers or business units, ensuring data isolation at every layer through workspace separation, fine-grained access control with Unity Catalog, and secure processing using UDF-based row-level security.&lt;/P&gt;&lt;P&gt;It would consist of the below steps in order to build multi-Tenant:&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="rathorer_0-1753157201307.png" style="width: 400px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/18335i2F04E95978277D45/image-size/medium?v=v2&amp;amp;px=400" role="button" title="rathorer_0-1753157201307.png" alt="rathorer_0-1753157201307.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Design Approaches:&lt;/STRONG&gt; I will talk about 2 different design approaches for this.&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="rathorer_1-1753157291951.png" style="width: 400px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/18337i95A4B88E597934FD/image-size/medium?v=v2&amp;amp;px=400" role="button" title="rathorer_1-1753157291951.png" alt="rathorer_1-1753157291951.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;H2&gt;&lt;STRONG&gt;Architecture Components&lt;/STRONG&gt;&lt;/H2&gt;&lt;H3&gt;1. &lt;STRONG&gt;Cloud Storage Setup (S3/ADLS):&lt;/STRONG&gt;&lt;/H3&gt;&lt;P&gt;Organize buckets/folders by tenant for strict isolation. This point is required for Storage Isolation and needs to follow below steps:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Single Bucket for each Tenant (Customer)&lt;/LI&gt;&lt;LI&gt;Folder wise segregation at Env Level.&lt;/LI&gt;&lt;LI&gt;Attach External Locations to catalogs, map them to storage paths.&lt;/LI&gt;&lt;LI&gt;Use IAM roles per tenant workspace (one per tenant) for secure access via Unity Catalog’s External Locations + Storage Credentials.&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;s3://my-saas-lakehouse/&lt;/P&gt;&lt;P&gt;├── tenant_a/&lt;/P&gt;&lt;P&gt;│&amp;nbsp;&amp;nbsp; ├── raw/&lt;/P&gt;&lt;P&gt;│&amp;nbsp;&amp;nbsp; ├── bronze/&lt;/P&gt;&lt;P&gt;│&amp;nbsp;&amp;nbsp; ├── silver/&lt;/P&gt;&lt;P&gt;│&amp;nbsp;&amp;nbsp; └── gold/&lt;/P&gt;&lt;P&gt;├── tenant_b/&lt;/P&gt;&lt;P&gt;│&amp;nbsp;&amp;nbsp; ├── raw/&lt;/P&gt;&lt;P&gt;│&amp;nbsp;&amp;nbsp; ├── bronze/&lt;/P&gt;&lt;P&gt;│&amp;nbsp;&amp;nbsp; ├── silver/&lt;/P&gt;&lt;P&gt;│&amp;nbsp;&amp;nbsp; └── gold/&lt;/P&gt;&lt;P&gt;└── shared/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ├── reference_data/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; └── system_logs/&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="rathorer_2-1753157577943.png" style="width: 400px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/18338iCA4FEC5D40B3278D/image-size/medium?v=v2&amp;amp;px=400" role="button" title="rathorer_2-1753157577943.png" alt="rathorer_2-1753157577943.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;H3&gt;2. &lt;STRONG&gt;Unity Catalog Structure&lt;/STRONG&gt;&lt;/H3&gt;&lt;P&gt;&lt;STRONG&gt;Create one catalog per tenant&lt;/STRONG&gt;:&lt;BR /&gt;Catalogs:&lt;BR /&gt;- tenant_a_catalog&lt;BR /&gt;- tenant_b_catalog&lt;BR /&gt;- shared_catalog&lt;BR /&gt;Each catalog contains:&lt;BR /&gt;Schemas:&lt;BR /&gt;- raw&lt;BR /&gt;- bronze&lt;BR /&gt;- silver&lt;BR /&gt;- gold&lt;BR /&gt;Attach External Locations to catalogs, map them to storage paths.&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;H3&gt;3. &lt;STRONG&gt;Workspace Binding&lt;/STRONG&gt;&lt;/H3&gt;&lt;P&gt;&lt;STRONG&gt;Each customer/tenant has a dedicated Databricks workspace&lt;/STRONG&gt;.&lt;/P&gt;&lt;P&gt;Use the &lt;STRONG&gt;Unity Catalog workspace binding&lt;/STRONG&gt; feature:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P&gt;Bind only tenant_a_catalog to Tenant A Workspace&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Bind only tenant_b_catalog to Tenant B Workspace&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;This ensures:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P&gt;Workspace cannot access any unbound catalogs&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Security is enforced by design&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;Example:&amp;nbsp;&lt;BR /&gt;databricks unity-catalog bind-catalogs \&lt;BR /&gt;--workspace-id=12345 \&lt;BR /&gt;--catalogs tenant_a_catalog,shared_catalog&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;UC Isolation with Workspace Binding&lt;/STRONG&gt;:&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="rathorer_3-1753157853253.png" style="width: 400px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/18339i9D70428842BA389A/image-size/medium?v=v2&amp;amp;px=400" role="button" title="rathorer_3-1753157853253.png" alt="rathorer_3-1753157853253.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Environment Isolation with Access pattern per Tenant&lt;/STRONG&gt;:&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="rathorer_4-1753157916598.png" style="width: 400px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/18340i8A2DB016938E3D93/image-size/medium?v=v2&amp;amp;px=400" role="button" title="rathorer_4-1753157916598.png" alt="rathorer_4-1753157916598.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;SDLC Setup with UC per Tenant&lt;/STRONG&gt;:&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="rathorer_5-1753157967028.png" style="width: 400px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/18341iFACDA011A0A21DC4/image-size/medium?v=v2&amp;amp;px=400" role="button" title="rathorer_5-1753157967028.png" alt="rathorer_5-1753157967028.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Approach &lt;/STRONG&gt;&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;For Every Tenant, all related SDLC workspaces (DEV, STG, PRD, …)&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;oIsolate the environments on the Catalog level of the 3-level namespace of Unity Catalog. Assign DEV, STG, PRD workspaces to their respective catalog only.&lt;/P&gt;&lt;P&gt;oIsolate the DEV, STG, PRD data locations by assigning dedicated managed buckets/containers to the catalogs&lt;/P&gt;&lt;P&gt;oIsolate admin scope by delegating administration of the catalogs to different admins for DEV, STG, PRD&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Catalog names can be combinations of SDLC and business / organizational unit names, e.g. sales_dev, sales_prd, engineering_dev&lt;/LI&gt;&lt;LI&gt;Access to workspaces, clusters and endpoints needs to be configured accordingly&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;U&gt;&lt;STRONG&gt;Central Analytics&lt;/STRONG&gt;: &lt;/U&gt;&lt;/P&gt;&lt;P&gt;This approach is used as if Centralized Analytics is required for all the Tenants. This would have separate Centralized WS+ Catalog and ETL process would flow the data to this catalog. Data agreement should be done with all tenants before setting up this process and only agreed data sets should be flown. Proper Security framework should be setup for the data processing and data access for the ETL and consumption from Centralized catalog. It performs below tasks:&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Data Production &lt;/STRONG&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Central Ingest &amp;amp; ETL by the central BU&lt;/LI&gt;&lt;LI&gt;Other BUs create (business) data sets&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;Data &lt;/STRONG&gt;&lt;STRONG&gt;Publishing &lt;/STRONG&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Central BU publishes data in central PRD storage and into the PRD catalog of the Central BU in UC&lt;/LI&gt;&lt;LI&gt;BUs requests from Central team to publish from their PRD storage to central PRD storage and into the BU catalog in UC that is maintained by Central&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;Data Governance (centralized) &lt;/STRONG&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Central team and each BU (for non published) data can work independently on their catalogs&lt;/LI&gt;&lt;LI&gt;Central team applies additional quality assurance and maintains ACLs in the central BU catalog&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;Data &lt;/STRONG&gt;&lt;STRONG&gt;Consumption &lt;/STRONG&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Published data will be discovered in the Central catalog and consumed from the central PRD storage&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;Platform &lt;/STRONG&gt;&lt;STRONG&gt;operations &lt;/STRONG&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Central team provides platform blueprints, creates environments for BUs (automated)&lt;/LI&gt;&lt;LI&gt;Central team could provide common data services&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="rathorer_6-1753158483417.png" style="width: 400px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/18342iCE891674F2A492B7/image-size/medium?v=v2&amp;amp;px=400" role="button" title="rathorer_6-1753158483417.png" alt="rathorer_6-1753158483417.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;Here BU1 and BU2 represents the Tenants and there will be no access across BUs should be provided.&amp;nbsp;&lt;/P&gt;&lt;P&gt;How the Metadata Managment should like:&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="rathorer_7-1753158582789.png" style="width: 400px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/18343i10A084DCA605DD23/image-size/medium?v=v2&amp;amp;px=400" role="button" title="rathorer_7-1753158582789.png" alt="rathorer_7-1753158582789.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;In this Architecture Design Secure access to data is important key factor. It is required to make sure that no cross access of data across tenants allowed at any cost.&lt;/P&gt;&lt;H3&gt;4. &lt;STRONG&gt;Secure Data Processing&lt;/STRONG&gt;&lt;/H3&gt;&lt;P&gt;In each tenant workspace:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P&gt;Setup ETL/ELT jobs using Databricks Jobs or Workflows&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Use &lt;STRONG&gt;Delta Live Tables (DLT)&lt;/STRONG&gt; for managing CDC/incremental pipelines&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Enforce row-level security in &lt;STRONG&gt;Delta tables&lt;/STRONG&gt; using UDFs + UC GRANTS&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;H3&gt;5. &lt;STRONG&gt;Security Controls&lt;/STRONG&gt;&lt;/H3&gt;&lt;H4&gt;a. &lt;STRONG&gt;Row-Level Security via SQL UDFs&lt;/STRONG&gt;&lt;/H4&gt;&lt;P&gt;Create a SQL UDF that filters rows based on the current user’s group or email:&lt;BR /&gt;CREATE FUNCTION shared_catalog.security_fn.tenant_row_filter(user_email STRING, tenant_id STRING)&lt;BR /&gt;RETURNS BOOLEAN&lt;BR /&gt;RETURN user_email IN (&lt;BR /&gt;SELECT user_email&lt;BR /&gt;FROM shared_catalog.security_mapping&lt;BR /&gt;WHERE tenant_id = tenant_id&lt;BR /&gt;);&lt;BR /&gt;Then apply the filter on table:&lt;BR /&gt;ALTER TABLE tenant_a_catalog.silver.orders&lt;BR /&gt;SET ROW FILTER shared_catalog.security_fn.tenant_row_filter(user(), tenant_id)&lt;BR /&gt;ON (tenant_id);&lt;/P&gt;&lt;P&gt;This ensures:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P&gt;Even if someone queries tenant table from shared context, only matching rows are visible.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;No need to duplicate logic across tenants.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;b. Schema/Column Masking&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;This is useful when group level access to be provided within single tenant&amp;nbsp;&lt;/P&gt;&lt;P&gt;ALTER TABLE tenant_a_catalog.gold.customer_info&lt;BR /&gt;ALTER COLUMN ssn&lt;BR /&gt;SET MASKING POLICY shared_catalog.security_fn.mask_ssn&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Security Control – Account Mapping for Access Control&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="rathorer_10-1753159394385.png" style="width: 400px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/18346iC0EE1EDAE2394DE8/image-size/medium?v=v2&amp;amp;px=400" role="button" title="rathorer_10-1753159394385.png" alt="rathorer_10-1753159394385.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;H3&gt;6. &lt;STRONG&gt;User Access Management&lt;/STRONG&gt;&lt;/H3&gt;&lt;UL&gt;&lt;LI&gt;&lt;P&gt;Use &lt;STRONG&gt;SCIM provisioning&lt;/STRONG&gt; or APIs to automate user/group creation per tenant workspace&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Add users to tenant-specific groups:&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;group_tenant_a_users → Access only tenant_a_catalog&lt;BR /&gt;group_tenant_b_users → Access only tenant_b_catalog&lt;/P&gt;&lt;P&gt;Grant permissions:&lt;BR /&gt;GRANT USAGE ON CATALOG tenant_a_catalog TO `group_tenant_a_users`;&lt;BR /&gt;GRANT SELECT ON TABLE tenant_a_catalog.gold.orders TO `group_tenant_a_users`;&lt;BR /&gt;&lt;BR /&gt;If I need to summarize this overall security process, it follows the steps:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Secure Data Processing: Each Teant Workspace Includes:&lt;UL&gt;&lt;LI&gt;Setup ETL/ELT jobs using Databricks Jobs or Workflows&lt;/LI&gt;&lt;LI&gt;Enforce row-level security in Delta tables using UDFs + UC GRANTS&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;LI&gt;Security Control&lt;UL&gt;&lt;LI&gt;Row Level Security via UDF&lt;/LI&gt;&lt;LI&gt;Schema/ Column Masking&lt;BR /&gt;&lt;BR /&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;LI&gt;User Access Management by external IDP&lt;/LI&gt;&lt;LI&gt;Use SCIM provisioning or APIs to automate user/group creation per tenant workspace&lt;/LI&gt;&lt;LI&gt;Add users to tenant-specific groups &amp;amp; Grant permissions.&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="rathorer_9-1753159307147.png" style="width: 400px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/18345i714AEBBBDC97906D/image-size/medium?v=v2&amp;amp;px=400" role="button" title="rathorer_9-1753159307147.png" alt="rathorer_9-1753159307147.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Summary of Isolation Techniques&lt;BR /&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Layer Technique&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;STRONG&gt;Storage&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;Folder-level + Storage Credential isolation&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;STRONG&gt;Compute&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;Workspace-level isolation&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;STRONG&gt;Data Access&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;Unity Catalog bindings + RBAC&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;STRONG&gt;Row-level access&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;UDF-based row filter&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;STRONG&gt;Column masking&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;Data masking policies&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;STRONG&gt;Auditing&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;Unity Catalog audit logs&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;U&gt;&lt;STRONG&gt;Isolation at Metastore level&lt;/STRONG&gt;&lt;/U&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Approach&lt;/STRONG&gt;:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Single Metastore per Tenant&lt;/LI&gt;&lt;LI&gt;Create Catalog under Tenant specific Metastore. Isolate Env specific catalogs (minimum 2, prod and lower env as per standard).&lt;/LI&gt;&lt;LI&gt;WS to catalog binding to segrate the processing and access control for different Environment.&lt;/LI&gt;&lt;LI&gt;Security:&lt;/LI&gt;&lt;LI&gt;Storage level access&lt;/LI&gt;&lt;LI&gt;Schema level isolation if required&lt;/LI&gt;&lt;LI&gt;Create User/ group and implement RLC/ CLS&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="rathorer_11-1753159666798.png" style="width: 400px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/18347iF5EEDF6FC67252F9/image-size/medium?v=v2&amp;amp;px=400" role="button" title="rathorer_11-1753159666798.png" alt="rathorer_11-1753159666798.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&lt;U&gt;&lt;STRONG&gt;Single and Multi Metastore Comparison Analysis&lt;/STRONG&gt;&lt;/U&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE width="1731"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD width="432"&gt;&lt;P&gt;&lt;STRONG&gt;Feature / Concern&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width="687"&gt;&lt;P&gt;&lt;STRONG&gt;Single Metastore (Shared)&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width="613"&gt;&lt;P&gt;&lt;STRONG&gt;Multi-&lt;/STRONG&gt;&lt;STRONG&gt;Metastore&lt;/STRONG&gt;&lt;STRONG&gt; (One per Tenant)&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="432"&gt;&lt;P&gt;Metastore Isolation&lt;/P&gt;&lt;/TD&gt;&lt;TD width="687"&gt;&lt;P&gt;Shared across all tenants&lt;/P&gt;&lt;/TD&gt;&lt;TD width="613"&gt;&lt;P&gt;Fully isolated&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="432"&gt;&lt;P&gt;Data Isolation&lt;/P&gt;&lt;/TD&gt;&lt;TD width="687"&gt;&lt;P&gt;Requires RLS, masking&lt;/P&gt;&lt;/TD&gt;&lt;TD width="613"&gt;&lt;P&gt;Natural hard boundary&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="432"&gt;&lt;P&gt;Workspace Binding&lt;/P&gt;&lt;/TD&gt;&lt;TD width="687"&gt;&lt;P&gt;Catalog-level binding&lt;/P&gt;&lt;/TD&gt;&lt;TD width="613"&gt;&lt;P&gt;Bound to one workspace&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="432"&gt;&lt;P&gt;Cross-Tenant Access Risk&lt;/P&gt;&lt;/TD&gt;&lt;TD width="687"&gt;&lt;P&gt;Higher risk&lt;/P&gt;&lt;/TD&gt;&lt;TD width="613"&gt;&lt;P&gt;Very low risk&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="432"&gt;&lt;P&gt;Access Control Complexity&lt;/P&gt;&lt;/TD&gt;&lt;TD width="687"&gt;&lt;P&gt;High (groups, UDFs)&lt;/P&gt;&lt;/TD&gt;&lt;TD width="613"&gt;&lt;P&gt;Lower (per metastore)&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="432"&gt;&lt;P&gt;Row-Level Security (RLS)&lt;/P&gt;&lt;/TD&gt;&lt;TD width="687"&gt;&lt;P&gt;Mandatory&lt;/P&gt;&lt;/TD&gt;&lt;TD width="613"&gt;&lt;P&gt;Needed when user group level Access Required&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="432"&gt;&lt;P&gt;Storage Layer&lt;/P&gt;&lt;/TD&gt;&lt;TD width="687"&gt;&lt;P&gt;Bucket Level Isolation&lt;/P&gt;&lt;/TD&gt;&lt;TD width="613"&gt;&lt;P&gt;Different Storage Account&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="432"&gt;&lt;P&gt;Metastore Admins&lt;/P&gt;&lt;/TD&gt;&lt;TD width="687"&gt;&lt;P&gt;See all data unless filtered&lt;/P&gt;&lt;/TD&gt;&lt;TD width="613"&gt;&lt;P&gt;Per-tenant control&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="432"&gt;&lt;P&gt;Scalability&lt;/P&gt;&lt;/TD&gt;&lt;TD width="687"&gt;&lt;P&gt;Supports 100+ tenants&lt;/P&gt;&lt;/TD&gt;&lt;TD width="613"&gt;&lt;P&gt;Practical &amp;lt; 50 tenants&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="432"&gt;&lt;P&gt;Governance Overhead&lt;/P&gt;&lt;/TD&gt;&lt;TD width="687"&gt;&lt;P&gt;High&lt;/P&gt;&lt;/TD&gt;&lt;TD width="613"&gt;&lt;P&gt;Lower as Cross Tenant access is not feasible.&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="432"&gt;&lt;P&gt;Backup / DR&lt;/P&gt;&lt;/TD&gt;&lt;TD width="687"&gt;&lt;P&gt;Global for all tenants&lt;/P&gt;&lt;/TD&gt;&lt;TD width="613"&gt;&lt;P&gt;Per-tenant plan&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="432"&gt;&lt;P&gt;Cost Management&lt;/P&gt;&lt;/TD&gt;&lt;TD width="687"&gt;&lt;P&gt;Hard to split, would need tag based processing&lt;/P&gt;&lt;/TD&gt;&lt;TD width="613"&gt;&lt;P&gt;Per-tenant tracking&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="432"&gt;&lt;P&gt;Use Case Fit&lt;/P&gt;&lt;/TD&gt;&lt;TD width="687"&gt;&lt;P&gt;B2B SaaS, shared analytics&lt;/P&gt;&lt;/TD&gt;&lt;TD width="613"&gt;&lt;P&gt;Regulated industries. Cross Tenant Access for Admin is restricted.&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;</description>
      <pubDate>Tue, 22 Jul 2025 04:53:40 GMT</pubDate>
      <guid>https://community.databricks.com/t5/community-articles/building-multitenant-architecture-on-databricks-platform/m-p/125937#M791</guid>
      <dc:creator>rathorer</dc:creator>
      <dc:date>2025-07-22T04:53:40Z</dc:date>
    </item>
    <item>
      <title>Re: Building MultiTenant Architecture on Databricks Platform</title>
      <link>https://community.databricks.com/t5/community-articles/building-multitenant-architecture-on-databricks-platform/m-p/142956#M927</link>
      <description>&lt;P class=""&gt;Good breakdown of the Databricks storage and catalog isolation patterns.&lt;/P&gt;&lt;P class=""&gt;One thing to keep in mind: workspace binding and Unity Catalog handle data isolation well, but the authentication layer is where tenant context gets established first. Without proper tenant identification at auth time, even the best data isolation can be bypassed.&lt;/P&gt;&lt;P class=""&gt;For the complete picture, you'll want to ensure:&lt;/P&gt;&lt;UL class=""&gt;&lt;LI&gt;Identity provider properly scopes tenant context in tokens&lt;/LI&gt;&lt;LI&gt;Workspace access policies validate tenant claims before any catalog access&lt;/LI&gt;&lt;LI&gt;Service principals are tenant-scoped&lt;/LI&gt;&lt;/UL&gt;&lt;P class=""&gt;&lt;A class="" href="https://ssojet.com/blog/tenant-isolation-in-multi-tenant-systems#1-why-tenant-isolation-becomes-critical-the-moment-you-add-authentication" target="_blank" rel="noopener"&gt;This covers how authentication ties into tenant isolation&lt;/A&gt; - particularly relevant when connecting your IdP to Databricks workspaces.&lt;/P&gt;&lt;P class=""&gt;Overall, solid architecture though. The catalog-per-tenant + workspace binding approach gives you strong isolation guarantees.&lt;/P&gt;</description>
      <pubDate>Mon, 05 Jan 2026 04:50:10 GMT</pubDate>
      <guid>https://community.databricks.com/t5/community-articles/building-multitenant-architecture-on-databricks-platform/m-p/142956#M927</guid>
      <dc:creator>andyssojet</dc:creator>
      <dc:date>2026-01-05T04:50:10Z</dc:date>
    </item>
  </channel>
</rss>

