Complete example

_metadata:
  contract_version: 1.0.0

target:
  catalog: main
  schema: crm_curated
  table: s_customers
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]

Fields

FieldTypeDefaultUse
_metadataobject{}File 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