An Apache Spark-based analytics platform optimized for Azure.
Hi Bill Chie
Your current design already aligns well with best practices for data and network isolation. The key point to clarify is how metadata isolation works in Unity Catalog.
In Azure Databricks, Unity Catalog follows an account-level metastore model, with one metastore per region per Azure Databricks account. All workspaces attached to that metastore share the same metadata service. Because of this design, metadata is not physically isolated per environment when using a single metastore.
Within this model, the supported way to achieve DEV / QAT / PRD separation is through logical isolation, not physical separation of the metadata layer.
The recommended approach is to:
- Use separate catalogs per environment
Bind each catalog only to its corresponding workspace(s) using workspace-catalog bindings
Apply catalog-level permissions to restrict access
Use separate external locations and storage accounts per environment
With workspace-catalog binding, a catalog is only accessible from the workspaces it is explicitly bound to. This prevents users in one environment from accessing or interacting with catalogs from another environment, even if they have underlying permissions. This is the supported and recommended pattern for isolation within a shared metastore.
It is also important to note that Unity Catalog’s metadata plane is a control-plane service and is not exposed as a VNet-isolated resource. Network controls such as VNets and private endpoints apply to the data plane (storage and compute), not to metadata visibility.
If your requirement is strict isolation, where metadata must also be physically separated (for example, due to compliance requirements), then environments must not share the same metastore. The supported options in that case are:
Deploy environments in separate regions (each region has its own metastore), or
Use separate Azure Databricks accounts (each account has its own metastore)
Within a single region and account, Unity Catalog provides strong logical isolation using catalogs and workspace bindings, but not full physical isolation of metadata. For full containment including metadata, separation at the metastore level (region or account) is required.
Helpful References:
https://learn.microsoft.com/en-us/azure/databricks/data-governance/unity-catalog/
https://learn.microsoft.com/en-us/azure/databricks/data-governance/unity-catalog/create-metastore
https://learn.microsoft.com/en-us/azure/databricks/catalogs/binding
https://learn.microsoft.com/en-us/azure/databricks/data-governance/unity-catalog/best-practices
https://docs.databricks.com/aws/en/data-governance/unity-catalog/best-practices
Hope this helps, Please let us know if you have any questions and concerns.