4.1 Hierarchical Privilege Model & Securable Objects
Key Takeaways
- Unity Catalog organizes all data and operational assets into a strict securable object hierarchy: Metastore -> Catalog -> Schema -> Securables (Tables, Views, Volumes, Functions, Models).
- Permissions cascade downward through privilege inheritance: granting an operational privilege on a parent container (Catalog or Schema) automatically propagates that privilege to all current and future child objects within it.
- Querying or modifying any table, view, or volume strictly requires traversal privileges: USE CATALOG on the parent catalog AND USE SCHEMA on the parent schema, in addition to the object-level action privilege (such as SELECT, MODIFY, or READ VOLUME).
- Unity Catalog operates on an explicit, default-deny security model managed via standard ANSI SQL GRANT and REVOKE syntax against users, service principals, and account groups.
- The ALL PRIVILEGES grant assigns all current and future operational privileges on a securable object to a principal, but it does NOT grant object ownership or the ability to alter ownership.
4.1 Hierarchical Privilege Model & Securable Objects
DP-750 Exam Focus: Master the Unity Catalog hierarchical securable object model and the mechanics of downward privilege inheritance. You must understand the prerequisite traversal privileges (
USE CATALOGon the catalog andUSE SCHEMAon the schema) required before a user can query tables or read volumes, the exact ANSI SQLGRANTandREVOKEsyntax, and the operational differences betweenALL PRIVILEGES, specific verb privileges, and object ownership.
The Unity Catalog Securable Object Hierarchy
In Azure Databricks Unity Catalog, a securable object is any entity on which permissions can be granted to a principal (user, service principal, or account group). Unity Catalog structures all securable objects in a strict, containment-based tree hierarchy. Access control applied at higher tiers of the tree influences accessibility at lower tiers.
+---------------------------------------------------+
| METASTORE |
| (Top-level account container for metadata) |
+---------------------------------------------------+
|
+-------------------------------------+-------------------------------------+
| | |
v v v
+---------------------------------+ +-----------------------------------+ +---------------------------------+
| STORAGE CREDENTIALS | | CATALOGS | | EXTERNAL LOCATIONS |
| (Encapsulates Azure Managed Id) | | (First level of 3-level name) | | (Gov. ADLS Gen2 URI paths) |
+---------------------------------+ +-----------------------------------+ +---------------------------------+
| | |
| (Used to create) v | (Used to register)
+-----------------------------> SCHEMAS <------------------------------+
(Second level / database)
|
+---------------------+-------------------------+-------------------------+---------------------+
| | | | |
v v v v v
+-----------------+ +-----------------+ +-----------------+ +-----------------+ +-----------------+
| TABLES | | VIEWS | | VOLUMES | | FUNCTIONS | | MODELS |
| (Managed/Ext.) | | (Standard/Mask) | | (Managed/Ext.) | | (UDFs / TVFs) | | (MLflow Models) |
+-----------------+ +-----------------+ +-----------------+ +-----------------+ +-----------------+
Primary Securable Object Types
- Metastore: The root metadata container deployed per Azure region. Governs global objects such as Catalogs, Storage Credentials, External Locations, Connections, Delta Sharing Providers, and Recipients.
- Catalog: The primary organizational boundary (the first identifier in
catalog.schema.table). Represents environments (e.g.,prod_dw,dev_sandbox) or business domains (finance,marketing). - Schema (Database): The logical grouping within a catalog (the second identifier in
catalog.schema.table). Represents business processes or medallion layers (bronze,silver,gold). - Data Securables (Leaf / Execution level):
- Tables: Tabular datasets (Managed Delta tables or External tables).
- Views: Virtual tables defined on top of one or more tables or views.
- Volumes: Logical governance endpoints for unstructured or semi-structured files in ADLS Gen2.
- Functions: User-defined scalar and table-valued functions (UDFs/TVFs) registered in the catalog.
- Models: Registered machine learning models tracked and deployed via Unity Catalog MLflow.
- Infrastructure Securables:
- Storage Credentials: Authentication mechanisms wrapping Azure Access Connectors / Managed Identities.
- External Locations: Governed bindings between Storage Credentials and specific ADLS Gen2 paths (
abfss://...). - Connections: Governed connection endpoints to external database engines (Lakehouse Federation).
Privilege Inheritance Mechanics
Unity Catalog implements downward privilege inheritance. When an operational privilege is granted on a parent securable object, that privilege is automatically and implicitly inherited by all existing and future child objects contained within that parent container.
+------------------------------------------+
| GRANT SELECT ON CATALOG | <-- Assigned at Catalog level
| prod_catalog | to group `analysts`
+------------------------------------------+
|
| (Inherited automatically)
v
+------------------------------------------+
| All Schemas | <-- `analysts` can query tables
| (e.g., prod_catalog.silver, etc.) | in all schemas
+------------------------------------------+
|
| (Inherited automatically)
v
+------------------------------------------+
| All Current & Future Tables | <-- Newly created tables in these
| (e.g., prod_catalog.silver.orders_fact) | schemas are instantly queryable
+------------------------------------------+
How Inheritance Operates in Practice
- Catalog-Level Grants: Executing
GRANT SELECT ON CATALOG prod_dw TO data_analysts;givesdata_analystsread access to every table and view across every schema inprod_dw. When a data engineer adds a new schema or creates a new table inprod_dwweeks later,data_analystsimmediately inheritsSELECTprivileges on that new asset without administrative intervention. - Schema-Level Grants: Executing
GRANT SELECT ON SCHEMA prod_dw.gold TO marketing_team;restricts inherited read access strictly to tables and views within thegoldschema ofprod_dw. Assets inprod_dw.silverorprod_dw.bronzeremain inaccessible. - Object-Level Grants: Executing
GRANT SELECT ON TABLE prod_dw.gold.customer_360 TO external_auditors;grants access strictly to that single table.
Exam Tip: Privilege inheritance in Unity Catalog flows only downward, never upward. Granting
SELECTon a table does not grant privileges on its parent schema or catalog. Furthermore, Unity Catalog uses a default-deny model; if no grant exists at the object, schema, catalog, or metastore level, access is denied.
The Traversal Prerequisite Principle: USE CATALOG and USE SCHEMA
A critical concept tested heavily on the DP-750 exam is the requirement for traversal privileges. In Unity Catalog, granting an action privilege (such as SELECT on a table or READ VOLUME on a volume) is insufficient by itself for a user to interact with the object. The user must also possess traversal permissions along the full parent hierarchy.
The Mandatory Traversal Chain for Tables and Views
To execute SELECT * FROM prod_dw.silver.orders;, the querying principal must hold:
USE CATALOGonprod_dw(the parent catalog).USE SCHEMAonprod_dw.silver(the parent schema).SELECTonprod_dw.silver.orders(or inheritSELECTfromsilver,prod_dw, or the metastore).
Required Privilege Check Flow for: SELECT * FROM prod_dw.silver.orders
+------------------------+
| 1. Check Catalog Level | ---> Does principal have USE CATALOG on `prod_dw`?
+------------------------+ [NO] --> FAIL: Permission Denied (Cannot traverse catalog)
| [YES]
v
+------------------------+
| 2. Check Schema Level | ---> Does principal have USE SCHEMA on `prod_dw.silver`?
+------------------------+ [NO] --> FAIL: Permission Denied (Cannot traverse schema)
| [YES]
v
+------------------------+
| 3. Check Object Level | ---> Does principal have SELECT on `prod_dw.silver.orders`?
+------------------------+ (Or inherited SELECT from schema/catalog?)
| [YES] [NO] --> FAIL: Permission Denied (Cannot read table)
v
[SUCCESS: Query Executes]
What Traversal Privileges Enable
| Privilege Verb | Securable Target | What It Allows | What It Does NOT Allow |
|---|---|---|---|
USE CATALOG | CATALOG | Allows the user to traverse into the catalog, inspect schema names (if permitted), and resolve 3-level names. | Does NOT allow reading data inside tables, creating schemas, or modifying catalog metadata. |
USE SCHEMA | SCHEMA | Allows the user to traverse into the schema, resolve 2-level/1-level object names, and execute functions. | Does NOT allow reading table data (SELECT), creating tables (CREATE TABLE), or reading files (READ VOLUME). |
BROWSE | CATALOG, SCHEMA, TABLE | Allows the user to view object metadata and schema definitions in Catalog Explorer without granting data access. | Does NOT allow reading data or traversing the namespace in SQL queries. |
-- Correct Traversal Provisioning for an Analyst Group
GRANT USE CATALOG ON CATALOG prod_dw TO `bi_analysts`;
GRANT USE SCHEMA ON SCHEMA prod_dw.gold TO `bi_analysts`;
GRANT SELECT ON TABLE prod_dw.gold.daily_revenue TO `bi_analysts`;
-- Alternative using Inheritance at the Schema level:
GRANT USE CATALOG ON CATALOG prod_dw TO `bi_analysts`;
GRANT USE SCHEMA, SELECT ON SCHEMA prod_dw.gold TO `bi_analysts`;
Complete Unity Catalog Privilege Matrix
Unity Catalog supports specific ANSI SQL privilege verbs tailored to each securable object type:
| Securable Object | Valid Privileges | Description & Primary Use Case |
|---|---|---|
| METASTORE | CREATE CATALOG | Allows principal to create top-level catalogs in the metastore. |
CREATE STORAGE CREDENTIAL | Allows principal to create storage credentials wrapping Azure Access Connectors. | |
CREATE EXTERNAL LOCATION | Allows principal to register new external ADLS Gen2 locations. | |
CREATE CONNECTION | Allows principal to configure Lakehouse Federation connection endpoints. | |
MANAGE ALLOWLIST | Allows principal to configure init script, JAR, and library allowlists. | |
| CATALOG | USE CATALOG | Required traversal privilege to access schemas and securables within the catalog. |
CREATE SCHEMA | Allows principal to create new schemas inside the catalog. | |
BROWSE | Allows inspecting catalog structure in Catalog Explorer without data access. | |
APPLY TAG | Allows adding or modifying Unity Catalog tags on the catalog. | |
ALL PRIVILEGES | Grants all available catalog-level operational privileges. | |
| SCHEMA | USE SCHEMA | Required traversal privilege to access tables, volumes, and functions in the schema. |
CREATE TABLE | Allows creating managed and external tables within the schema. | |
CREATE VIEW | Allows creating standard or dynamic views within the schema. | |
CREATE VOLUME | Allows creating managed or external volumes within the schema. | |
CREATE FUNCTION | Allows registering SQL UDFs and custom functions in the schema. | |
CREATE MODEL | Allows logging and registering MLflow models in the schema. | |
ALL PRIVILEGES | Grants all available schema-level operational privileges. | |
| TABLE | SELECT | Allows reading data from the table (Delta, Parquet, CSV). |
MODIFY | Allows inserting, updating, deleting, and merging data (INSERT, UPDATE, DELETE, MERGE). | |
APPLY TAG | Allows tagging table columns and table metadata for governance/ABAC. | |
ALL PRIVILEGES | Grants full operational data control (SELECT, MODIFY, APPLY TAG). | |
| VIEW | SELECT | Allows reading and executing the view definition. |
ALL PRIVILEGES | Grants full operational control over the view. | |
| VOLUME | READ VOLUME | Allows reading files stored within the managed or external volume. |
WRITE VOLUME | Allows writing, appending, and deleting files within the volume. | |
ALL PRIVILEGES | Grants both READ VOLUME and WRITE VOLUME. | |
| FUNCTION | EXECUTE | Allows invoking the scalar, table-valued, or Python UDF in SQL/DataFrame queries. |
| EXTERNAL LOCATION | CREATE EXTERNAL TABLE | Allows creating external tables pointing to ADLS Gen2 paths within this location. |
CREATE EXTERNAL VOLUME | Allows creating external volumes pointing to ADLS Gen2 paths within this location. | |
READ FILES | Allows querying files directly via SELECT * FROM text.abfss://...``. | |
WRITE FILES | Allows writing files directly to ADLS Gen2 storage paths. | |
| STORAGE CREDENTIAL | CREATE EXTERNAL LOCATION | Allows binding this credential to create external locations. |
ANSI SQL Syntax: GRANT, REVOKE, and SHOW GRANTS
Unity Catalog uses standard ANSI SQL statements to manage privileges. All grant statements can be executed in Databricks Notebooks, the SQL Editor, or programmatically via the Databricks REST API and Terraform.
1. Granting Privileges
-- Syntax: GRANT <privileges> ON <securable_type> <securable_name> TO <principal>;
-- Granting traversal and read access on a catalog and schema
GRANT USE CATALOG ON CATALOG finance_prod TO `finance_analysts`;
GRANT USE SCHEMA, SELECT ON SCHEMA finance_prod.reporting TO `finance_analysts`;
-- Granting write privileges on a table
GRANT MODIFY ON TABLE finance_prod.reporting.monthly_gl TO `finance_data_engineers`;
-- Granting file access privileges on a Volume
GRANT READ VOLUME, WRITE VOLUME ON VOLUME finance_prod.raw.invoices_landing TO `ingestion_pipeline_sp`;
-- Granting external storage creation on an External Location
GRANT CREATE EXTERNAL TABLE, READ FILES ON EXTERNAL LOCATION adls_landing_loc TO `data_engineers`;
2. Revoking Privileges
-- Syntax: REVOKE <privileges> ON <securable_type> <securable_name> FROM <principal>;
-- Revoke write access from a group
REVOKE MODIFY ON TABLE finance_prod.reporting.monthly_gl FROM `finance_data_engineers`;
-- Revoke schema creation from a user
REVOKE CREATE SCHEMA ON CATALOG finance_prod FROM `contractor@company.com`;
3. Inspecting Active Grants (SHOW GRANTS)
-- Show all privileges granted on a specific table
SHOW GRANTS ON TABLE finance_prod.reporting.monthly_gl;
-- Show all privileges granted to a specific principal across securables
SHOW GRANTS TO `finance_analysts`;
-- Show grants on an external location
SHOW GRANTS ON EXTERNAL LOCATION adls_landing_loc;
ALL PRIVILEGES vs. Object Ownership
A critical distinction on the DP-750 exam is the difference between having ALL PRIVILEGES on an object versus being the Owner of the object.
| Capability / Action | Principal with ALL PRIVILEGES | Object Owner (OWNER) | Metastore Admin |
|---|---|---|---|
Query / Read Data (SELECT, READ VOLUME) | Yes | Yes | Yes |
Modify Data (MODIFY, WRITE VOLUME) | Yes | Yes | Yes |
Alter Table Schema / Add Columns (ALTER TABLE) | No (Requires Ownership) | Yes | Yes |
Drop the Object (DROP TABLE, DROP SCHEMA) | No (Requires Ownership) | Yes | Yes |
| Grant / Revoke Privileges to Other Principals | No (Requires Ownership) | Yes | Yes |
Transfer Ownership (ALTER ... OWNER TO) | No (Requires Ownership) | Yes | Yes |
| Set / Modify Object Properties / Tags | Yes (via APPLY TAG) | Yes | Yes |
Key Concept:
ALL PRIVILEGESis an operational shortcut. It grants all current and future operational verbs (e.g.,SELECT,MODIFY,CREATE TABLE) applicable to that object type. However,ALL PRIVILEGESdoes NOT confer administrative control. You cannot alter object definitions, drop objects, or delegate permissions to others unless you are the explicit Owner of the object or a Metastore Admin.
A data analyst is added to the 'marketing_analysts' group. The security team executes the following SQL statement:
GRANT SELECT ON TABLE enterprise_dw.campaigns.conversions TO marketing_analysts;
When the analyst executes 'SELECT * FROM enterprise_dw.campaigns.conversions;', Databricks returns a 'Permission Denied' error. What additional privileges must be granted to resolve this error?
A data governance administrator executes the following SQL command in a production Databricks workspace:
GRANT SELECT ON SCHEMA supply_chain.inventory TO logistics_readers;
Two weeks later, a data engineer creates a new table named 'supply_chain.inventory.warehouse_stock'. What privileges do members of 'logistics_readers' hold on the new 'warehouse_stock' table?
A senior data engineer has been granted 'ALL PRIVILEGES' on the table 'sales_dw.gold.customer_metrics'. Which of the following operations is the engineer still UNAUTHORIZED to perform on this table?