<?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 Integrating row and column level security in parent child tables with masking only selected rows in Data Engineering</title>
    <link>https://community.databricks.com/t5/data-engineering/integrating-row-and-column-level-security-in-parent-child-tables/m-p/81600#M36357</link>
    <description>&lt;P&gt;Currently I am working with a project where we need to mask PIIs in few columns for VIP customers only.&lt;/P&gt;&lt;P&gt;Let me explain briefly with example:&lt;/P&gt;&lt;P&gt;Table A: [personid, status, address, UID, VIPFLAG]&amp;nbsp; &amp;nbsp;--&amp;gt; Mask "UID" and "address" only where VIPFLAG is 1&lt;/P&gt;&lt;P&gt;Table B: [personID, phonenumber, countrycode] --&amp;gt; mask PhoneNumber only for PersonIDs where value is 1, in Table A&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I tried with masking functions like:&lt;/P&gt;&lt;P&gt;Table A mask:&amp;nbsp;&lt;/P&gt;&lt;DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;CREATE&lt;/SPAN&gt; &lt;SPAN&gt;FUNCTION&lt;/SPAN&gt; &lt;SPAN&gt;vip_filter&lt;/SPAN&gt;&lt;SPAN&gt;(VIPFLAG &lt;/SPAN&gt;&lt;SPAN&gt;STRING&lt;/SPAN&gt;&lt;SPAN&gt;)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;RETURN&lt;/SPAN&gt; &lt;SPAN&gt;IF&lt;/SPAN&gt;&lt;SPAN&gt;(IS_ACCOUNT_GROUP_MEMBER(&lt;/SPAN&gt;&lt;SPAN&gt;'admins'&lt;/SPAN&gt;&lt;SPAN&gt;), &lt;/SPAN&gt;&lt;SPAN&gt;True&lt;/SPAN&gt;&lt;SPAN&gt;, VIPFLAG &lt;/SPAN&gt;&lt;SPAN&gt;!=&lt;/SPAN&gt;&lt;SPAN&gt;'V'&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Table B mask:&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;CREATE&lt;/SPAN&gt; &lt;SPAN&gt;FUNCTION&lt;/SPAN&gt; &amp;nbsp;&lt;SPAN&gt;vip_filter_child (PERSONID &lt;/SPAN&gt;&lt;SPAN&gt;STRING&lt;/SPAN&gt;&lt;SPAN&gt;)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;RETURN&lt;/SPAN&gt; &lt;SPAN&gt;IF&lt;/SPAN&gt;&lt;SPAN&gt;(IS_ACCOUNT_GROUP_MEMBER(&lt;/SPAN&gt;&lt;SPAN&gt;'admins'&lt;/SPAN&gt;&lt;SPAN&gt;), &lt;/SPAN&gt;&lt;SPAN&gt;TRUE&lt;/SPAN&gt;&lt;SPAN&gt;, PERSONID &lt;/SPAN&gt;&lt;SPAN&gt;not&lt;/SPAN&gt; &lt;SPAN&gt;in&lt;/SPAN&gt;&lt;SPAN&gt; (&lt;/SPAN&gt;&lt;SPAN&gt;select distinct&lt;/SPAN&gt;&lt;SPAN&gt; PERSONID &lt;/SPAN&gt;&lt;SPAN&gt;from&lt;/SPAN&gt;&amp;nbsp;Table A&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;where&lt;/SPAN&gt;&lt;SPAN&gt; VIPFLAG &lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt; &lt;SPAN&gt;'V'&lt;/SPAN&gt;&lt;SPAN&gt;)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;I can apply the filters but when querying i receive this error:&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&lt;SPAN class=""&gt;[UNSUPPORTED_NESTED_ROW_OR_COLUMN_ACCESS_POLICY] Table A&amp;nbsp; has a row level security policy or column mask which indirectly refers to another table with a row level security policy or column mask; this is not supported. Call sequence: (Table scan: Table B, Table scan: Table A, Row filter: "vip_filter") SQLSTATE: 0A000&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;</description>
    <pubDate>Fri, 02 Aug 2024 09:29:52 GMT</pubDate>
    <dc:creator>vishal48</dc:creator>
    <dc:date>2024-08-02T09:29:52Z</dc:date>
    <item>
      <title>Integrating row and column level security in parent child tables with masking only selected rows</title>
      <link>https://community.databricks.com/t5/data-engineering/integrating-row-and-column-level-security-in-parent-child-tables/m-p/81600#M36357</link>
      <description>&lt;P&gt;Currently I am working with a project where we need to mask PIIs in few columns for VIP customers only.&lt;/P&gt;&lt;P&gt;Let me explain briefly with example:&lt;/P&gt;&lt;P&gt;Table A: [personid, status, address, UID, VIPFLAG]&amp;nbsp; &amp;nbsp;--&amp;gt; Mask "UID" and "address" only where VIPFLAG is 1&lt;/P&gt;&lt;P&gt;Table B: [personID, phonenumber, countrycode] --&amp;gt; mask PhoneNumber only for PersonIDs where value is 1, in Table A&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I tried with masking functions like:&lt;/P&gt;&lt;P&gt;Table A mask:&amp;nbsp;&lt;/P&gt;&lt;DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;CREATE&lt;/SPAN&gt; &lt;SPAN&gt;FUNCTION&lt;/SPAN&gt; &lt;SPAN&gt;vip_filter&lt;/SPAN&gt;&lt;SPAN&gt;(VIPFLAG &lt;/SPAN&gt;&lt;SPAN&gt;STRING&lt;/SPAN&gt;&lt;SPAN&gt;)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;RETURN&lt;/SPAN&gt; &lt;SPAN&gt;IF&lt;/SPAN&gt;&lt;SPAN&gt;(IS_ACCOUNT_GROUP_MEMBER(&lt;/SPAN&gt;&lt;SPAN&gt;'admins'&lt;/SPAN&gt;&lt;SPAN&gt;), &lt;/SPAN&gt;&lt;SPAN&gt;True&lt;/SPAN&gt;&lt;SPAN&gt;, VIPFLAG &lt;/SPAN&gt;&lt;SPAN&gt;!=&lt;/SPAN&gt;&lt;SPAN&gt;'V'&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Table B mask:&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;CREATE&lt;/SPAN&gt; &lt;SPAN&gt;FUNCTION&lt;/SPAN&gt; &amp;nbsp;&lt;SPAN&gt;vip_filter_child (PERSONID &lt;/SPAN&gt;&lt;SPAN&gt;STRING&lt;/SPAN&gt;&lt;SPAN&gt;)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;RETURN&lt;/SPAN&gt; &lt;SPAN&gt;IF&lt;/SPAN&gt;&lt;SPAN&gt;(IS_ACCOUNT_GROUP_MEMBER(&lt;/SPAN&gt;&lt;SPAN&gt;'admins'&lt;/SPAN&gt;&lt;SPAN&gt;), &lt;/SPAN&gt;&lt;SPAN&gt;TRUE&lt;/SPAN&gt;&lt;SPAN&gt;, PERSONID &lt;/SPAN&gt;&lt;SPAN&gt;not&lt;/SPAN&gt; &lt;SPAN&gt;in&lt;/SPAN&gt;&lt;SPAN&gt; (&lt;/SPAN&gt;&lt;SPAN&gt;select distinct&lt;/SPAN&gt;&lt;SPAN&gt; PERSONID &lt;/SPAN&gt;&lt;SPAN&gt;from&lt;/SPAN&gt;&amp;nbsp;Table A&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;where&lt;/SPAN&gt;&lt;SPAN&gt; VIPFLAG &lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt; &lt;SPAN&gt;'V'&lt;/SPAN&gt;&lt;SPAN&gt;)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;I can apply the filters but when querying i receive this error:&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&lt;SPAN class=""&gt;[UNSUPPORTED_NESTED_ROW_OR_COLUMN_ACCESS_POLICY] Table A&amp;nbsp; has a row level security policy or column mask which indirectly refers to another table with a row level security policy or column mask; this is not supported. Call sequence: (Table scan: Table B, Table scan: Table A, Row filter: "vip_filter") SQLSTATE: 0A000&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;</description>
      <pubDate>Fri, 02 Aug 2024 09:29:52 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-engineering/integrating-row-and-column-level-security-in-parent-child-tables/m-p/81600#M36357</guid>
      <dc:creator>vishal48</dc:creator>
      <dc:date>2024-08-02T09:29:52Z</dc:date>
    </item>
  </channel>
</rss>

