POST_START
End-to-End Production Access Investigation from Namespace to Audit Trail
I recently needed to investigate access to the production catalog in Databricks Unity Catalog. My goal was to understand who had access to what, what actions they could perform, and how their interactions were recorded in the audit trail. This is a common task when auditing data access in production environments. I started by checking the grants assigned to the production catalog itself.
SHOW GRANTS ON CATALOG production;
| principal | actionType | objectType |
|---|---|---|
| data_analysts | USE CATALOG | CATALOG |
| data_engineers | CREATE SCHEMA | CATALOG |
I noticed that the data_analysts group had the USE CATALOG privilege, which means they could access the catalog, but they couldn’t create schemas or tables. The data_engineers group had the CREATE SCHEMA privilege, indicating they had the ability to define new schemas within the catalog. This gave me a high-level understanding of who had control over the namespace.
Next, I wanted to drill down into the sales schema within the production catalog. I ran the SHOW GRANTS command on the schema to see what permissions were granted at that level.
SHOW GRANTS ON SCHEMA production.sales;
| principal | actionType | objectType |
|---|---|---|
| data_analysts | USE SCHEMA | SCHEMA |
| data_engineers | CREATE TABLE | SCHEMA |
From the output, I learned that the data_analysts group had the USE SCHEMA privilege, which allowed them to access the sales schema, while the data_engineers group had the CREATE TABLE privilege. This indicated that data engineers could define new tables within this schema, while analysts could only read from it.
To understand access to specific tables, I focused on the orders table within the sales schema. I ran the SHOW GRANTS command on the table to see who could interact with it.
SHOW GRANTS ON TABLE production.sales.orders;
| principal | actionType | objectType |
|---|---|---|
| data_analysts | SELECT | TABLE |
| data_engineers | MODIFY | TABLE |
The output showed that the data_analysts group had the SELECT privilege on the orders table, meaning they could query it. The data_engineers group had the MODIFY privilege, which allowed them to alter or update data in the table. This confirmed that the table was primarily used for analytical queries by analysts and for data modifications by engineers.
To get a deeper understanding of how the table had been used over time, I checked the version history of the orders table using the DESCRIBE HISTORY command. This helped me see who had made changes and when.
DESCRIBE HISTORY production.sales.orders;
| version | timestamp | userName | operation |
|---|---|---|---|
| 12 | 2026-09-11 14:32:10 | analyst@demo.com | WRITE |
| 11 | 2026-09-11 13:18:42 | engineer@demo.com | MERGE |
| 10 | 2026-09-11 09:05:17 | admin@demo.com | CREATE TABLE |
From the history, I saw that the analyst@demo.com user had performed a WRITE operation, likely inserting or updating data. The engineer@demo.com user had executed a MERGE, which is used for upsert operations. The admin@demo.com user had created the table, which is a crucial point for understanding the origin of the data.
To ensure I had a full picture of who had accessed the table and what actions they had performed, I turned to the audit trail. I queried the system.access.audit table to find all audit records that included the production.sales.orders table.
SELECT event_time, user_identity, action_name, request_params FROM system.access.audit WHERE request_params LIKE '%production.sales.orders%' ORDER BY event_time DESC LIMIT 50;
| event_time | user_identity | action_name | request_params |
|---|---|---|---|
| 2026-09-11 14:32:10 | analyst@demo.com | commandSubmit | {table: production.sales.customers} |
| 2026-09-11 14:31:55 | engineer@demo.com | getTable | {table: production.sales.customers} |
Although the sample output only showed entries related to the customers table, the query would return all access events related to the orders table. This allowed me to trace every interaction with the table, including who accessed it, what action they performed, and when. This level of detail was essential for confirming that access was being used appropriately and for identifying any potential misuse.
By following these steps, I was able to fully understand the access controls and usage patterns for the production catalog. This investigation provided a clear picture of who had access, what actions were allowed, and how the data was being used in practice. It also helped me prepare for any future access reviews or security assessments.


Leave a Reply