<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Best practice to enforcing row-level security across multiple catalogs sharing same schema structure in Data Engineering</title>
    <link>https://community.databricks.com/t5/data-engineering/best-practice-to-enforcing-row-level-security-across-multiple/m-p/169115#M56041</link>
    <description>&lt;P&gt;Hi Everyone,&lt;/P&gt;&lt;P&gt;We have identical schema structures replicated across three catalogs (dev, qa, prod) to support environment isolation. We now need to apply row-level security (e.g., restricting sales reps to only see their own region's data) consistently across all three catalogs without duplicating the row-filter function/logic three times.&lt;/P&gt;&lt;P&gt;What we've tried: &amp;gt; - Created a single row-filter function in a shared "utility" catalog and attempted to reference it from the other catalogs — this failed due to cross-catalog function reference limitations. &amp;gt; - Considered duplicating the filter function per catalog, but this creates a maintenance burden (any logic change requires updating 3 places).&lt;/P&gt;&lt;P&gt;&amp;nbsp;Questions:&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;Is there a supported pattern for sharing row-filter/column-mask functions across catalogs in Unity Catalog, or must each catalog maintain its own copy?&lt;/LI&gt;&lt;LI&gt;Does Unity Catalog support catalog-level inheritance of security policies, or is row/column security always scoped strictly to the catalog where the function is defined?&lt;/LI&gt;&lt;LI&gt;Has anyone solved this using Databricks Asset Bundles (DABs) to templatize and redeploy the same filter logic across catalogs, rather than trying to share a single function reference?&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;Any real-world patterns for maintaining DRY (Don't Repeat Yourself) security policies across multiple catalogs would be appreciated.&lt;/P&gt;</description>
    <pubDate>Fri, 18 Sep 2026 17:43:48 GMT</pubDate>
    <dc:creator>Khasim_1</dc:creator>
    <dc:date>2026-09-18T17:43:48Z</dc:date>
    <item>
      <title>Best practice to enforcing row-level security across multiple catalogs sharing same schema structure</title>
      <link>https://community.databricks.com/t5/data-engineering/best-practice-to-enforcing-row-level-security-across-multiple/m-p/169115#M56041</link>
      <description>&lt;P&gt;Hi Everyone,&lt;/P&gt;&lt;P&gt;We have identical schema structures replicated across three catalogs (dev, qa, prod) to support environment isolation. We now need to apply row-level security (e.g., restricting sales reps to only see their own region's data) consistently across all three catalogs without duplicating the row-filter function/logic three times.&lt;/P&gt;&lt;P&gt;What we've tried: &amp;gt; - Created a single row-filter function in a shared "utility" catalog and attempted to reference it from the other catalogs — this failed due to cross-catalog function reference limitations. &amp;gt; - Considered duplicating the filter function per catalog, but this creates a maintenance burden (any logic change requires updating 3 places).&lt;/P&gt;&lt;P&gt;&amp;nbsp;Questions:&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;Is there a supported pattern for sharing row-filter/column-mask functions across catalogs in Unity Catalog, or must each catalog maintain its own copy?&lt;/LI&gt;&lt;LI&gt;Does Unity Catalog support catalog-level inheritance of security policies, or is row/column security always scoped strictly to the catalog where the function is defined?&lt;/LI&gt;&lt;LI&gt;Has anyone solved this using Databricks Asset Bundles (DABs) to templatize and redeploy the same filter logic across catalogs, rather than trying to share a single function reference?&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;Any real-world patterns for maintaining DRY (Don't Repeat Yourself) security policies across multiple catalogs would be appreciated.&lt;/P&gt;</description>
      <pubDate>Fri, 18 Sep 2026 17:43:48 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-engineering/best-practice-to-enforcing-row-level-security-across-multiple/m-p/169115#M56041</guid>
      <dc:creator>Khasim_1</dc:creator>
      <dc:date>2026-09-18T17:43:48Z</dc:date>
    </item>
    <item>
      <title>Re: Best practice to enforcing row-level security across multiple catalogs sharing same schema struc</title>
      <link>https://community.databricks.com/t5/data-engineering/best-practice-to-enforcing-row-level-security-across-multiple/m-p/169239#M56064</link>
      <description>&lt;P&gt;Hi Khasim,&lt;/P&gt;&lt;P&gt;Look at ABAC policies instead. That is the feature Databricks built for exactly this.&lt;/P&gt;&lt;P&gt;With ABAC you write the row filter UDF once, tag the tables (governed tags are account-level, so the same taxonomy applies across all your catalogs), and attach a policy at the catalog level. The docs say a policy attached at a catalog "evaluates against all securables of that type within that catalog", and tags set on the catalog or schema are inherited by the tables when policies are evaluated. Even better for your case: you can attach the policy ON METASTORE, which the docs describe as applying "across every catalog in the metastore". That option is still in Beta and needs a metastore admin, but it collapses your problem to one UDF plus one policy. If you'd rather stay out of Beta, it's one UDF plus three one-line CREATE POLICY statements, one per catalog, all pointing at the same fully-qualified function. The requirement listed is just EXECUTE on that UDF.&lt;BR /&gt;&lt;A href="https://docs.databricks.com/aws/en/data-governance/unity-catalog/abac/" target="_blank"&gt;https://docs.databricks.com/aws/en/data-governance/unity-catalog/abac/&lt;/A&gt;&lt;BR /&gt;&lt;A href="https://docs.databricks.com/aws/en/data-governance/unity-catalog/abac/policies" target="_blank"&gt;https://docs.databricks.com/aws/en/data-governance/unity-catalog/abac/policies&lt;/A&gt;&lt;BR /&gt;&lt;A href="https://docs.databricks.com/aws/en/data-governance/unity-catalog/abac/core-concepts" target="_blank"&gt;https://docs.databricks.com/aws/en/data-governance/unity-catalog/abac/core-concepts&lt;/A&gt;&lt;/P&gt;&lt;P&gt;On your question 2: table-level row filters and masks are properties of each table, there is no inheritance. Inheritance is what ABAC adds (catalog, schema, or metastore scope). The docs also recommend attaching policies "at the highest applicable level, usually the catalog".&lt;/P&gt;&lt;P&gt;On the cross-catalog failure you hit: I couldn't find anything in the docs saying the filter function has to live in the same catalog as the table. What they do require is EXECUTE on the function, USE SCHEMA on its schema and USE CATALOG on its catalog, and the Catalog Explorer dialog explicitly lets you pick the function's catalog and schema. Worth checking the exact error message, it may have been a privilege on the utility catalog rather than a hard limitation.&lt;BR /&gt;&lt;A href="https://docs.databricks.com/aws/en/data-governance/unity-catalog/filters-and-masks/manually-apply" target="_blank"&gt;https://docs.databricks.com/aws/en/data-governance/unity-catalog/filters-and-masks/manually-apply&lt;/A&gt;&lt;/P&gt;&lt;P&gt;On bundles: there is no UC function or policy resource type in bundles today (schemas, volumes, secrets, yes; functions and policies, no), so the templating approach means a SQL task in a job with ${var.catalog} running CREATE OR REPLACE FUNCTION and CREATE OR REPLACE POLICY per target. It works, but with ABAC you mostly don't need it anymore.&lt;BR /&gt;&lt;A href="https://docs.databricks.com/aws/en/dev-tools/bundles/resources" target="_blank"&gt;https://docs.databricks.com/aws/en/dev-tools/bundles/resources&lt;/A&gt;&lt;/P&gt;&lt;P&gt;Hope this helps.&lt;/P&gt;</description>
      <pubDate>Sun, 20 Sep 2026 12:07:49 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-engineering/best-practice-to-enforcing-row-level-security-across-multiple/m-p/169239#M56064</guid>
      <dc:creator>ThomazNeto</dc:creator>
      <dc:date>2026-09-20T12:07:49Z</dc:date>
    </item>
    <item>
      <title>Re: Best practice to enforcing row-level security across multiple catalogs sharing same schema struc</title>
      <link>https://community.databricks.com/t5/data-engineering/best-practice-to-enforcing-row-level-security-across-multiple/m-p/169245#M56067</link>
      <description>&lt;P&gt;Agree with&amp;nbsp;&lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/245135"&gt;@ThomazNeto&lt;/a&gt;&amp;nbsp; - only thing I would add is your point 3 requirement: you could also consider using Terraform instead DABs or job for managing the ABAC policies across multiple environments. It does not support the beta features i.e. metastore level policies.&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;A href="https://registry.terraform.io/providers/databricks/databricks/latest/docs/resources/policy_info" target="_blank"&gt;https://registry.terraform.io/providers/databricks/databricks/latest/docs/resources/policy_info&lt;/A&gt;&lt;/P&gt;</description>
      <pubDate>Sun, 20 Sep 2026 13:20:13 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-engineering/best-practice-to-enforcing-row-level-security-across-multiple/m-p/169245#M56067</guid>
      <dc:creator>bijilsubhash</dc:creator>
      <dc:date>2026-09-20T13:20:13Z</dc:date>
    </item>
  </channel>
</rss>

