Deck 01
Identity, Authorization, and Tool Governance for Enterprise AI
The Challenge
Ask plain-English questions, get governed answers. Search docs. Build dashboards.
Multiple agents collaborate on complex tasks. Partners and customers need the same capabilities through their own portals.
Authentication
Databricks has one authorization layer — Unity Catalog. Authentication can come from multiple sources: the workspace IdP for internal users, or external IdPs via token federation for partners and customers. All paths converge on UC, which enforces governance regardless of how the token was obtained.
Entra ID
BYO IdP (Okta, Ping, any SAML/OIDC)
Cloud Identity or BYO IdP
Token Architecture
U2M, OBO, and M2M are token acquisition paths, not different authentication systems.
| Path | Who Authenticates | Identity in UC | Token Acquired By |
|---|---|---|---|
| U2M | The human (directly) | The human | Human's client |
| OBO | The human (via app) | The human | App, forwarding token |
| M2M | Service Principal | The SP | The application itself |
ELI5
One restaurant (Databricks). One ID-check at the door (your company IdP). Same bouncer for everyone.
You walk in yourself, show your badge at the door, sit down and order. The kitchen checks your allergy list, serves your food.
You're the one at the table.
You're in a meeting, so you send your assistant with your badge. Same door, same bouncer. Kitchen checks your allergy list.
Assistant carries the tray. Never shows their own badge.
Your company has a catering account. The catering bot shows the company badge. Standard menu, same meal for everyone.
Doesn't matter who placed the order.
Decision Framework
Resource Model
Authorization differs by what you're accessing, not where the app runs.
Authorization Matrix
| Resource | Recommended Path | Identity in UC | AuthZ Model |
|---|---|---|---|
| Serving Endpoints | OBO or M2M | User or SP | UC + OAuth scopes |
| Genie | OBO | Calling user | UC + genie scopes |
| UC Functions | OBO or M2M | User or SP | UC EXECUTE |
| Vector Search | M2M | App SP | UC SELECT |
| UC HTTP Connections | M2M + per-user OAuth | SP + external user | USE CONNECTION |
| Tables | Any | Depends on path | Row filters, column masks |
| Lakebase | M2M | App SP (PG role) | PG-native (GRANT, RLS) — NOT UC |
Defense in Depth
Common Pitfall
current_user() vs is_member()The #1 source of auth bugs in AI apps.
| Path | current_user() Returns | is_member() Evaluates |
|---|---|---|
| U2M | Human email | Human's groups ✓ |
| OBO (direct SQL) | Human email | Human's groups ✓ |
| OBO (via Genie / Agent Bricks) | Human email | Execution service identity ✗ |
| M2M | SP UUID | SP's groups ✓ |
current_user() for row filters. It works correctly in every path.
External Identity
U2M / OBO / M2M answer "who does Databricks see?" External connections add: "who does the external service see?"
| Connection Auth Method | Databricks Sees | External Service Sees |
|---|---|---|
| Bearer Token | Caller | Shared |
| OAuth M2M | Caller | Shared |
| OAuth U2M Shared | Caller | Shared |
| OAuth U2M Per User | Caller | Per-user ✓ |
| Managed OAuth | Caller | Per-user ✓ |
Federation
Any app with a trusted IdP JWT can exchange it for a Databricks token via federation. No secrets.
Users & SPs. Requires SCIM sync. 5 issuer limit per account.
CI/CD pipelines. Per-SP binding. Unlimited issuers. Completely secretless.
Scopes
| Operation | Required Scope |
|---|---|
| Genie | dashboards.genie + genie both required |
| Agent Bricks / Serving | model-serving |
| SQL | sql |
| UC / External MCP | unity-catalog |
| Vector Search | vector-search |
| Refresh tokens | offline_access |
Exception
Lakebase uses PG-native authorization (roles, GRANT, RLS), not UC.
Databricks OAuth (token as PG password) or native PG roles
PG GRANT + RLS policies. Not Unity Catalog.
Instance owner (LOGIN, CREATEDB, CREATEROLE). App SP → auto-created PG role. System roles for sync/monitoring.
Register → read-only UC catalog for cross-source queries. Lakehouse Sync → continuous CDC to Delta (SCD2 history via wal2delta).
Agent Pattern
How agents are governed — mapped to the six enforcement layers.
system.access.auditChecklist
current_user(), not is_member()Checklist
current_user() returns SP UUID)Security
request_idDifferentiation
No PATs, no static credentials. Federation + OAuth everywhere.
UC grants per resource type, not blanket access.
system.access.audit captures every API call. MLflow traces every agent step.
Implementation
system.access.audit + MLflowSummary
Same governance model — whether the user is internal or external, whether the app runs on Databricks or outside.
| → or Space | Next slide |
| ← | Previous slide |
| Home | First slide |
| End | Last slide |
| ? | Toggle this help |