Row-Level Security (RLS) is the data governance control that automatically filters which rows from a table are visible to a given user based on that user's identity or attributes. Like column-level security, RLS is enforced at query time by the query engine, not by physical data partitioning. This allows a single shared Iceberg table to serve multiple user populations, each seeing only their authorized subset of data.

Classic Row-Level Security Scenarios

RLS Implementation in Dremio

Dremio implements row-level security through row filter policies defined at the VDS (Virtual Dataset) level. A policy expression like WHERE region = SESSION_USER_ATTRIBUTE('region') is automatically injected into every query against the dataset. The user never writes the WHERE clause themselves; it is transparently enforced by the engine based on the authenticated user's identity context from the SSO provider. This means users cannot bypass RLS by writing their own SQL, since the filter is applied before query planning completes.

Master the Agentic Lakehouse

Architecting an Apache Iceberg Lakehouse

Architecting an Apache Iceberg Lakehouse

Buy on Manning
The AI Lakehouse

The AI Lakehouse

Buy on Amazon