What you will be able to do
- Place catalogs, schemas, tables, views, volumes and functions in the Unity Catalog three-level namespace and tell container objects apart from non-container objects
- Work out the full set of privileges an operation needs, including the USE CATALOG and USE SCHEMA usage privileges
- Predict how a grant on a catalog or schema reaches its child objects, and what ALL PRIVILEGES and BROWSE do and do not include
- Grant, revoke and inspect privileges with SQL and Catalog Explorer
Key concept
The securable hierarchy as the access-control boundary — Unity Catalog stores data as objects in a catalog.schema.table hierarchy. Access is controlled at every level of that hierarchy: a privilege granted on a parent container passes down to its children, and a user can't reach a child object without the usage privilege on each parent above it.
1.The three-level namespace and securable objects
In Unity Catalog, all data and metadata sit inside a top-level container called a metastore. Inside the metastore, data is addressed through a three-level namespace, catalog.schema.table. That name is also how access works. Every object in the hierarchy is a securable object, so you can grant privileges such as SELECT, MODIFY or USE SCHEMA on it to a principal: a user, a service principal or a group.
Unity Catalog has two kinds of securable object. Container objects hold other objects. Catalogs are the top level and contain schemas. Schemas are the middle level and contain tables, views, volumes and functions as direct children. Non-container objects are tables, views, volumes and functions, and they contain nothing. So a volume sits beside a table, one level below a schema. The difference matters because privileges granted on a container can reach its children, which later sections cover.
Privileges are not the only control. Unity Catalog combines four models. Privileges and ownership decide *who* can access *what*. Attribute-based (ABAC) policies use governed tags to decide what data users can access. Table-level row filters and column masks control what users see inside a table. Workspace bindings decide *where* objects can be reached from. This lesson covers privileges, ownership and roles. Tag-driven policies and masking have their own lesson.
| Object | Kind | Direct children |
|---|---|---|
| Catalog | Container (top level) | Schemas |
| Schema | Container (middle level) | Tables, views, volumes, functions |
| Table, view, volume, function | Non-container | None |
Checkpoint 1 of 7· Check yourself
Which Unity Catalog object directly contains volumes?
Schemas are the middle level of the namespace. Their direct children are tables, views, volumes and functions. Catalogs contain schemas, not volumes.
“Schemas contain tables, views, volumes, and functions as direct children.”Source: docs.databricks.com
2.Usage privileges: why SELECT alone is not enough
Nothing in Unity Catalog is allowed by default. A user or group must be explicitly granted a privilege before it can perform an action. The common privileges are SELECT (read from tables or views), MODIFY (write to tables or views), CREATE TABLE (create tables in a schema), and the two usage privileges, USE CATALOG and USE SCHEMA.
Usage privileges open a container. They give no access to data by themselves. To work with any object in a catalog, you need USE CATALOG on that catalog. To work with any object in a schema, you need USE SCHEMA on that schema. Most operations on a table, view, volume or function therefore need three grants: USE CATALOG on the parent catalog, USE SCHEMA on the parent schema, and the privilege for the operation itself, such as SELECT, MODIFY, EXECUTE or READ VOLUME.
This rule also lets administrators set boundaries. A table owner might want to share their table, but other users still can't reach it without USE CATALOG and USE SCHEMA on the parents. Only catalog and schema owners, or users with MANAGE, can grant those usage privileges. That stops table owners from granting access outside approved boundaries.
| Operation | Required privileges |
|---|---|
| Read data from a table or view | USE CATALOG on catalog, USE SCHEMA on schema, SELECT on table or view |
| Write data to a table | USE CATALOG on catalog, USE SCHEMA on schema, MODIFY on table |
| Create a schema in a catalog | USE CATALOG on catalog, CREATE SCHEMA on catalog |
| Create a table in a schema | USE CATALOG on catalog, USE SCHEMA on schema, CREATE TABLE on schema (or catalog if granted at catalog-level) |
| Execute a function | USE CATALOG on catalog, USE SCHEMA on schema, EXECUTE on function |
| Read files from a volume | USE CATALOG on catalog, USE SCHEMA on schema, READ VOLUME on volume |
Checkpoint 2 of 7· Exam question
A data analyst has been granted `SELECT` on the `finance` schema inside the `analytics` catalog, but every query against the table `analytics.finance.transactions` fails with a permission error. What additional grant is most likely needed to resolve this?
Correct answer: B — Grant `USE CATALOG` on `analytics` and `USE SCHEMA` on `finance` to the analyst, since `SELECT` alone does not include the catalog- and schema-level access needed to reach the table.
- A. Ownership is not required to query a table, and transferring schema ownership to an individual analyst would be an unnecessary and risky change just to fix a read permission. The `SELECT` grant already held on the schema is the relevant privilege for reading data, so ownership is not the missing piece here.
- B. Unity Catalog requires `USE CATALOG` on the containing catalog and `USE SCHEMA` on the containing schema before a `SELECT` grant on a lower object can take effect, since these usage privileges control the ability to traverse the namespace. Without them, the analyst cannot reach the table even though `SELECT` is already granted.
- C. `MODIFY` grants write access such as inserting or updating rows; it plays no role in enabling read-only `SELECT` queries and would not resolve a query failure caused by missing navigation privileges.
- D. Privileges granted on a schema do inherit down to the tables it contains, so `SELECT` already covers `transactions`. Re-granting `SELECT` directly on the table would not add anything, since the missing privileges are `USE CATALOG` and `USE SCHEMA`, not `SELECT` itself.
Checkpoint 3 of 7· Check yourself
A data engineer must append rows to finance.ledger.entries. Which set of privileges is enough?
Writing to a table needs USE CATALOG on the catalog, USE SCHEMA on the schema and MODIFY on the table. Missing any one of the three blocks the write.
“All three are required.”Source: docs.databricks.com
3.Inheritance, ALL PRIVILEGES and BROWSE
Yes. A privilege granted on a container object automatically applies to all current *and future* child objects. For example, SELECT granted on a catalog lets the grantee read every table in that catalog, provided they also hold the usage privileges. This is why containers also accept privileges that apply to objects inside them. You can grant SELECT, MODIFY, EXECUTE or READ VOLUME at the catalog or schema level, and they cover objects created later as well. Containers also have creation privileges, such as CREATE SCHEMA on a catalog and CREATE TABLE on a schema.
ALL PRIVILEGES covers every applicable privilege for an object type, and you don't have to list each one. On a table it implies SELECT, MODIFY and APPLY TAG. On a volume it implies READ VOLUME, WRITE VOLUME and APPLY TAG. It does not include everything, though. EXTERNAL USE SCHEMA, EXTERNAL USE LOCATION, MANAGE and READ METADATA are excluded.
Some privileges are composite, and each has narrower child privileges. MODIFY is the composite for INSERT, UPDATE and DELETE (Beta). MANAGE is the composite for READ METADATA and MANAGE ACCESS CONTROL. Composite and child privileges are granted and revoked independently. Granting the composite does not grant its children, and revoking the composite does not remove a child that was granted explicitly.
BROWSE separates finding data from reading it. A user with BROWSE can see that an object exists, view its name, description and tags, and request access, without USE CATALOG or USE SCHEMA. BROWSE gives no access to the data itself. It is granted at the catalog level, and Databricks recommends granting BROWSE on catalogs to the All account users group so data is discoverable across the organization.
Checkpoint 4 of 7· Match them up
Match each privilege to what it allows
Tap a term, then the definition that fits it.
SELECT reads and MODIFY writes. USE SCHEMA only opens the container. BROWSE is for discovery and gives no data access.
“BROWSE allows users to discover objects and view their metadata without granting access to the underlying data.”Source: docs.databricks.com
Checkpoint 5 of 7· Check yourself
A group is granted ALL PRIVILEGES on a table. Which of these can its members NOT do because of that grant?
On a table, ALL PRIVILEGES implies SELECT, MODIFY and APPLY TAG. MANAGE, which is needed to manage privileges and transfer ownership, is explicitly excluded.
“ALL PRIVILEGES on a table implies the ability to perform SELECT, MODIFY, and APPLY TAG.”Source: docs.databricks.com
Sources1
4.Granting, revoking and inspecting privileges
You can manage privileges with SQL commands, the Databricks CLI, the Databricks Terraform provider or Catalog Explorer. In SQL the pattern is GRANT <privilege-type> ON <securable-type> <securable-name> TO <principal>. The principal is a user, a service principal (identified by its applicationId) or a group. Names that contain special characters, such as a hyphen, must be enclosed in backticks.
The example below gives the group finance-team everything it needs to create tables in main.default. Because of the usage rule, CREATE TABLE alone would not be enough, so the example also grants USE SCHEMA and USE CATALOG.
GRANT CREATE TABLE ON SCHEMA main.default TO `finance-team`;
GRANT USE SCHEMA ON SCHEMA main.default TO `finance-team`;
GRANT USE CATALOG ON CATALOG main TO `finance-team`;SHOW GRANTS ON SCHEMA main.default; lists the grants on an object. You see all of them only if you are a metastore admin, hold READ METADATA or MANAGE on the object, own it, or own its parent catalog or schema. Anyone else sees only their own grants. REVOKE <privilege-type> ON <securable-type> <securable-name> FROM <principal> removes a privilege. A REVOKE succeeds even when the privilege was never granted, because it only guarantees that the privilege is absent afterwards.
Registered models are a special case. They are a type of function, so you grant on them with ON FUNCTION.
In Catalog Explorer the grant flow is: click Catalog, select the object, open the Permissions tab, click Grant, enter a user's email or a group name, select the permissions, and click OK.
REVOKE CREATE TABLE ON SCHEMA main.default FROM `finance-team`;Checkpoint 6 of 7· Fill the gap
Which securable type completes this grant on the registered model prod.ml_team.iris_model?
GRANT EXECUTE ON ? prod.ml_team.iris_model TO `ml-team-acme`;Registered models are a type of function, so privileges on a model are granted with GRANT ... ON FUNCTION.
Source: docs.databricks.comCheckpoint 7 of 7· Put it in order
Put the Catalog Explorer steps for granting a privilege in order
- 1.Click Grant
- 2.Go to the Permissions tab
- 3.In your workspace, click Catalog
- 4.Enter the email address for a user or the name of a group
- 5.Select the object, such as a catalog, schema, table or view
- 6.Select the permissions to grant and click OK
You go to the object first, then to its Permissions tab. Only then do you name the principal and choose the privileges.
“Go to the Permissions tab.”Source: docs.databricks.com
Sources4
Exam traps
Each one states something that sounds right. Open it to see what is actually true.
1.Granting SELECT on a table is enough for a user to query it.Why is that wrong?
The user also needs USE CATALOG on the parent catalog and USE SCHEMA on the parent schema. Usage privileges are a prerequisite for every object below them.
2.ALL PRIVILEGES makes the grantee able to manage permissions on the object.Why is that wrong?
ALL PRIVILEGES excludes MANAGE and READ METADATA, as well as the two external-use privileges. Managing grants needs MANAGE or ownership.
Covered in Inheritance, ALL PRIVILEGES and BROWSE
3.Privileges on a registered model are granted with GRANT ... ON MODEL.Why is that wrong?
Registered models are a type of function, so the grant uses ON FUNCTION.
Covered in Granting, revoking and inspecting privileges
Sources
Every claim above is drawn from one of these pages, quoted as it was written on the date shown.
- 1.https://docs.databricks.com/aws/en/data-governance/unity-catalog/access-control/permissions-conceptsOfficial docs
“data is represented as objects in a three-level namespace: catalog.schema.table”
↩︎ The three-level namespace and securable objects“Every object in this hierarchy is a securable object.”
↩︎ The three-level namespace and securable objects“A user or group must be explicitly granted a privilege to perform an action.”
↩︎ Usage privileges: why SELECT alone is not enough“this prevents table owners from granting access outside approved boundaries”
↩︎ Usage privileges: why SELECT alone is not enough“that privilege automatically applies to all current and future child objects”
↩︎ Inheritance, ALL PRIVILEGES and BROWSE“Composite and child privileges are granted and revoked independently.”
↩︎ Inheritance, ALL PRIVILEGES and BROWSE“Databricks recommends granting BROWSE on catalogs to the All account users group to make data discoverable throughout your organization.”
↩︎ Inheritance, ALL PRIVILEGES and BROWSE“This hierarchical structure also provides the foundation for access control in Unity Catalog.”
↩︎ Key concept“Having only the SELECT privilege on a table is not sufficient to read it”
↩︎ Exam trap 1“ALL PRIVILEGES does not include the EXTERNAL USE SCHEMA, EXTERNAL USE LOCATION, MANAGE, or READ METADATA privileges.”
↩︎ Exam trap 2“Schemas contain tables, views, volumes, and functions as direct children.”
↩︎ Checkpoint“Having only the SELECT privilege on a table is not sufficient to read it”
↩︎ Prediction“All three are required.”
↩︎ Checkpoint“BROWSE allows users to discover objects and view their metadata without granting access to the underlying data.”
↩︎ Checkpoint“ALL PRIVILEGES on a table implies the ability to perform SELECT, MODIFY, and APPLY TAG.”
↩︎ Checkpoint - 2.
“Privileges and ownership control who can access what, using grants on securable objects.”
↩︎ The three-level namespace and securable objects - 3.https://docs.databricks.com/aws/en/data-governance/unity-catalog/access-control/privileges-referenceOfficial docs
“Required to interact with any object inside a catalog. Does not itself grant access to data.”
↩︎ Usage privileges: why SELECT alone is not enough - 4.
“A REVOKE statement succeeds even if the specified privileges were not granted in the first place.”
↩︎ Granting, revoking and inspecting privileges“If you do not have the above permissions, you can view only your own grants on the object.”
↩︎ Granting, revoking and inspecting privileges“To grant a privilege on a model, you must use GRANT ON FUNCTION.”
↩︎ Exam trap 3“Go to the Permissions tab.”
↩︎ Checkpoint