Skip to main content

Access contract.

Access contracts describe catalog security. Keep them separate from normal ingestion because grants, row filters and column masks often require a different approval path and stronger privileges.

Complete example

_metadata:
contract_version: 1.0.0

access_policy:
mode: validate_only
on_drift: warn
revoke_unmanaged: false
grants:
- principal: account users
privileges: [SELECT]
- principal: data-platform
privileges: [SELECT, MODIFY]
row_filters:
- name: region_filter
function: main.security.filter_region
columns: [region]
applies_to:
principals: [regional-managers]
column_masks:
- column: email
function: main.security.mask_email
using_columns: [email]
applies_to:
principals: [analysts]

In bundle mode, the matching *.ingestion.yaml owns the target table. Keep target out of the access file unless you intentionally want an explicit compatibility assertion.

Fields

FieldTypeDefaultUse
_metadataobjectFile metadata for audit and bundle checks.
targetobjectoptionalOptional compatibility check against the ingestion target.
access_policy.modeapply | validate_only | ignoreapplyWhether access should be applied, only validated or ignored.
access_policy.on_driftfail | warn | reconcilewarnBehavior when actual grants differ from declared grants.
access_policy.revoke_unmanagedbooleanfalseWhether unmanaged grants may be revoked during reconciliation.
mode, on_drift, revoke_unmanagedsame as policysameTop-level aliases for compact contracts.
grantslist[object][]Declared grants.
grants[].principalstringrequiredCatalog principal, user or group.
grants[].privilegesstring | list[string]requiredPrivileges such as SELECT, MODIFY, MANAGE, READ FILES, WRITE FILES, EXECUTE or ALL PRIVILEGES.
row_filterslist[object][]Unity Catalog row filters.
row_filters[].namestringrequiredLogical rule name.
row_filters[].functionqualified stringrequiredFully qualified filter function, for example catalog.schema.function.
row_filters[].columnsstring | list[string]requiredColumns passed to the filter function.
row_filters[].applies_to.principalsstring | list[string][]Principals associated with the rule for documentation/drift context.
column_maskslist[object] | object[]Unity Catalog column masks. Object form is keyed by column name.
column_masks[].columnstringrequired in list formMasked column.
column_masks[].functionqualified stringrequiredFully qualified mask function.
column_masks[].using_columnsstring | list[string][]Columns passed to the mask function.
column_masks[].applies_to.principalsstring | list[string][]Principals associated with the rule for documentation/drift context.

Apply workflow

Normal ingestion should not require access-management privileges. Use a dedicated workflow for access checks and application.

contractforge validate-access contracts/silver/s_customers
contractforge governance-check contracts/silver/s_customers
contractforge apply-access contracts/silver/s_customers