Talk with our engineers by joining the new Onehouse community Slack!

Core capabilities

Data governance catalog

Onehouse ships with its own data governance catalog. It is compatible with the Iceberg REST Catalog (IRC) protocol, so any Iceberg client connects to it as a standard REST catalog, and it applies the same access policies to tables in every other format: Apache Hudi, Delta Lake, plain Parquet and ORC tables, and the Hive tables you already have. Every Onehouse engine in your project uses the catalog to enforce those policies on every query.

One catalog for every format

  • Iceberg tables are served through the Iceberg REST API, so Spark, Trino, PyIceberg, and any other Iceberg client read and write them with standard catalog configuration.
  • Non-Iceberg tables, including Hudi, Delta Lake, Parquet, ORC, and plain Hive tables, are registered in the same catalog through a path specific to each format. Engines resolve them by name, and the same privileges, down to row filters, govern them. You can bring existing Hive tables under governance without converting them.

SQL and Spark clusters can instead use one external catalog per cluster: the AWS Glue Iceberg REST endpoint, Snowflake Open Catalog, Microsoft OneLake, or any other Iceberg REST-compatible catalog, so teams that standardize on another catalog can keep using it as well. Clusters on an external catalog do not enforce Onehouse catalog policies.

Diagram of Iceberg clients, Lakegres, and SQL and Spark clusters connecting to the Onehouse governance catalog, which serves the Iceberg REST API for Iceberg and non-Iceberg tables with database, table, row, and column policies; clusters can instead use an external IRC catalog such as Glue, Snowflake Open Catalog, or OneLake, and OneSync syncs tables and permissions to Glue and Lake Formation, Unity Catalog, Snowflake Horizon, and OneLake.

The Onehouse governance catalog, another IRC catalog per cluster, and OneSync keeping tables and permissions in step across catalogs.

The catalog is the primary catalog for Onehouse SQL and Spark clusters, Lakegres, and notebooks, and it works alongside the external catalogs you already run: OneSync registers the same tables in AWS Glue, Databricks Unity Catalog, Snowflake, and Microsoft OneLake, and syncs table and database privileges to Lake Formation, Unity Catalog, Snowflake, and OneLake. Row filters and column masks are not synced.

Access policies

Policies follow the structure of your data. Tables are organized as lake, database, and table. Principals are users and groups from single sign-on and SCIM provisioning, and service principals created in Onehouse. To cover every table in a database, or every database in a lake, including ones created later, grant ON ALL TABLES IN DATABASE or ON ALL DATABASES IN LAKE. A grant on a single object applies to that object only.

Privilege Grantable on What it allows
SELECT Table Read table data
INSERT Table Insert and update data, and take savepoints
DELETE Table Delete data
DESCRIBE Lake, database, table View metadata only, without access to data
ALTER Lake, database, table Change table metadata and services
CREATE_DATABASE Lake Create databases in the lake
CREATE_TABLE Database Create tables
DROP Lake, database, table Drop the object
ALL Lake, database, table Every privilege on the object

Policies apply at five levels of granularity:

Level What it controls Status
Database Access to every table in the database, including future ones Production
Table Read, write, and administrative access to a single table Production
Row Row filters per principal and table, so each user sees only the rows they are entitled to Production
Column Which columns a principal can read Preview
Column masking Masking of values, such as hashing or redacting sensitive fields for specific principals Preview

Policy evaluation builds on Apache Ranger, the standard for access control in open data lakes, so policies follow semantics that security teams already know. Grants and revocations are made in the console, through the SQL command API (GRANT PRIVILEGE, REVOKE PRIVILEGE), or via UI panels.

Where policies are enforced

The same policies are enforced at every point a query can reach your data:

  • The catalog server makes every access decision. Engines and Iceberg REST clients ask it before listing, opening, creating, altering, or dropping a table: listings are filtered to what the principal may see, loading a table it may not read is refused, and commits are checked against write privileges.
  • Spark, SQL, and notebook clusters check table access through the catalog plugin for every format. A query-plan extension applies row filters and column access rules before the query runs, so the plan that executes is already filtered and masked. Lock storage access down to the engines, and have each cluster vend short-lived credentials for the data its policies allow.
  • Lakegres enforces the same policies on every query its Postgres endpoint serves, including the tool calls agents make through the AI Gateway.

The control plane authenticates every request and passes the end user’s identity to each engine, so policies apply per user even on a shared SQL cluster or a notebook. Engines ask the catalog server for each decision. The catalog server evaluates it in memory against a policy set it refreshes every few seconds, an interval you can tune down to one second, so a grant or revoke takes effect within that window. On the TPC-DS suite at 1 TB and 10 TB, on Iceberg and Hudi, table-level authorization added no measurable query time; results were within normal run-to-run variation.

Further reading