Skip to content
MCP server built inHow that works

Governance & identity

In lavalake, governance is not a layer on top of the platform — it is the path every query takes. There is no route around it, not for search, dashboards, the BI feed or the AI assistant.

On this page

Delegated identity instead of a service account

A backend that reads data with broad rights of its own and then decides what to show the user is the common case — and the point at which authorization models fall apart. lavalake inverts it: the agent exchanges the signed-in user's token through Keycloak's standard token exchange (RFC 8693) for a token addressed to Trino, and issues the query with that.

What you see in lavalake is exactly what Trino shows your identity. A bug in the interface cannot reveal a row you are not allowed to see.

Row and column policies

Under Verwaltung → Richtlinien (administration → policies) a platform administrator defines which rows a role sees and which columns are masked. The console does not merely store those rules — it compiles them into Trino's file-based access control. Trino reads the generated rules file from a shared volume and applies it to every query, wherever it comes from.

  • Row access: a condition Trino appends to every query against the table.
  • Column masking: an expression that replaces the value rather than hiding the column.
  • Effective on every path — worksheet, search, dashboard, BI feed, assistant.

Policies take effect inside Trino

For that, the agent writes the rules file to a volume Trino reads, set through TRINO_ACCESS_RULES_FILE. Without that path, policies are stored but not enforced.

The audit log

Every access is logged, and the entries form a hash chain: each entry carries the checksum of its predecessor. An entry altered or removed after the fact breaks the chain at a provable point. Archival goes to MinIO under Object Lock — storage that refuses to be overwritten.

The access is logged, not the content

The chain records who queried what, and when — not the values. Otherwise it would become a second, unprotected copy of the data.

Lineage and access history

From the same chain, the lineage page derives two questions nobody else can answer: where did this table's data come from — which import, which source, which document? And who has read or changed it since? Both are derived rather than separately maintained, and therefore cannot drift away from reality.

The “Herkunft & Zugriffe” (lineage and access) page with the table picker across catalog, schema and table.
Lineage and access are answered per table. Both are derived from the audit chain rather than maintained separately.

What else protects the installation

MeasureEffect
Reachable only through the reverse proxyBackend, database, object storage and the Keycloak backchannel stay on the internal network.
Encrypted secretsSource passwords, LLM and embedding keys and OAuth material are AES-256-GCM encrypted and never returned, logged or audited.
TLS to source databasesDefault verify — TLS with certificate verification, switchable per source.
Egress guardAdmin-triggered connection tests and embedding calls cannot reach link-local or cloud-metadata addresses. An allowlist can narrow this further.
Isolated document parsingPDF and Word extraction runs in a resource-limited worker with a hard timeout. A hostile document can only kill its own worker.

Applies to: This page describes lavalake 0.16.0. Product and documentation live in separate repositories — when in doubt, what the console shows is authoritative.

Something missing?

If these pages do not answer your question, we will walk through the platform against your own case in half an hour.

Book a demo