Skip to content

Multi-tenancy and catalog sharing ​

BoilStream isolates each tenant by default and permits access across tenants only through an explicit membership or catalog grant.

Isolation by default ​

Each tenant has its own:

  • managed DuckLake catalogs, including tenant-specific duckie and boil__stream defaults when automatic provisioning is enabled;
  • encrypted non-catalog secrets;
  • server-side filesystem scope; and
  • authenticated sessions and resource limits.

Two tenants may use the same catalog display name without referring to the same catalog. The canonical catalog UUID, not the display name, identifies the authorization and storage target.

Sharing one catalog ​

Sharing reuses the owner's catalog. It does not copy data into the requester's tenant or create a second physical catalog.

Blue boxes are authenticated requesters, purple boxes are authorization decisions, and the green box is the catalog they share. Sharing does not create another copy of the data.

ConceptMeaning
RequesterThe authenticated user whose access is checked and audited
Storage ownerThe tenant that owns the catalog and its data
Catalog UUIDThe authoritative identity selected for the operation
Display nameA tenant-visible presentation name that may be reused elsewhere
Access modeThe operations allowed for this requester on this catalog

The requester cannot change the storage owner by choosing a different SQL alias, database name, or same-named local catalog.

How access is obtained ​

Catalog access may come from:

  • ownership, which provides administrative catalog access;
  • active tenant membership, which currently provides admin access to catalogs owned by that tenant; or
  • a direct catalog grant, which carries an explicit mode and may expire.

Removing membership or revoking, reducing or expiring a grant can invalidate existing access. Applications must handle authorization failures and request fresh credentials when authorized; a previously issued credential does not preserve a revoked grant.

Catalog access modes ​

Catalog modes are intentionally separate from product roles:

ModeData readsData mutationsCatalog DDL
readeryesnono
writeryesyesno
adminyesyesyes

Catalog ownership, membership, and grant lifecycle remain BoilStream control-plane operations; the admin data-plane mode does not let a SQL statement rewrite those relationships.

Product roles and catalog access modes serve different purposes. Check the user's catalog permissions when an operation is denied; a successful web login alone does not grant access to every catalog.

Managed DuckDB clients ​

The public BoilStream extension authenticates to BoilStream and attaches a catalog by UUID under a local alias. The extension handles short-lived credentials and the server connection. Applications do not need catalog object-storage credentials.

sql
INSTALL boilstream FROM community;
LOAD boilstream;

PRAGMA boilstream_bootstrap_session(
    'https://your-server.example/secrets:<bootstrap-token>');

FROM boilstream_ducklakes();
PRAGMA boilstream_attach_ducklake(
    '9a927d1b-30f5-48da-91eb-af1492bf31c0',
    'shared_analytics');

SELECT * FROM shared_analytics.main.events;

Use the UUID returned by boilstream_ducklakes(). The local alias is for SQL convenience and has no authorization meaning.

Other tenant-scoped resources ​

Non-catalog secrets remain encrypted and scoped to the authenticated tenant. Server-side filesystem access is confined below the configured tenant data base path. Session and connection limits are deployment settings; use the generated configuration reference rather than copying partial security configuration.