<?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 Re: Dashboard Security Control in Data Governance</title>
    <link>https://community.databricks.com/t5/data-governance/dashboard-security-control/m-p/164980#M2944</link>
    <description>&lt;P&gt;Yes, you can Dynamic Views for that. Putting an example below:&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;Steps:&lt;/STRONG&gt;&lt;BR /&gt;1. Create an employee-access mapping table containing:&lt;BR /&gt;viewer_email&lt;BR /&gt;employee_email&lt;BR /&gt;&lt;BR /&gt;2.&amp;nbsp;Create a secured view or apply a Unity Catalog row filter:&lt;/P&gt;
&lt;LI-CODE lang="markup"&gt;CREATE OR REPLACE VIEW hr.employee_performance_secure AS
SELECT p.*
FROM hr.employee_performance p
JOIN hr.employee_access a
  ON p.employee_email = a.employee_email
WHERE lower(a.viewer_email) = lower(current_user());&lt;/LI-CODE&gt;
&lt;P&gt;3. Build every dashboard dataset from this secured view. KPIs and aggregations will automatically reflect the rows authorized for the current viewer.&lt;BR /&gt;&lt;BR /&gt;4.&amp;nbsp;Grant users access to the secured view and dashboard, but do not grant them direct access to the unrestricted base table. Dynamic views can use &lt;STRONG&gt;current_user()&lt;/STRONG&gt; and &lt;STRONG&gt;is_account_group_member()&lt;/STRONG&gt; for identity- or group-based rules&lt;BR /&gt;&lt;BR /&gt;5.&amp;nbsp;Publish using &lt;STRONG&gt;Individual data permissions&lt;/STRONG&gt;, not &lt;STRONG&gt;Share data permissions&lt;/STRONG&gt;. With shared permissions, queries run using the publisher’s identity, so viewer-specific row-level security does not apply.&lt;/P&gt;</description>
    <pubDate>Wed, 05 Aug 2026 19:44:00 GMT</pubDate>
    <dc:creator>adnan_alvee</dc:creator>
    <dc:date>2026-08-05T19:44:00Z</dc:date>
    <item>
      <title>Dashboard Security Control</title>
      <link>https://community.databricks.com/t5/data-governance/dashboard-security-control/m-p/164976#M2942</link>
      <description>&lt;P&gt;While creating Databricks Dashboard , can we control the access like a manager can see all employee performances and kpi metrics under it , but an employee can see only its own performance dashboard and its related metrics .&lt;/P&gt;&lt;P&gt;Thanks,&lt;/P&gt;&lt;P&gt;Pragya Sharma&lt;/P&gt;</description>
      <pubDate>Wed, 05 Aug 2026 18:21:06 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-governance/dashboard-security-control/m-p/164976#M2942</guid>
      <dc:creator>pragya17</dc:creator>
      <dc:date>2026-08-05T18:21:06Z</dc:date>
    </item>
    <item>
      <title>Re: Dashboard Security Control</title>
      <link>https://community.databricks.com/t5/data-governance/dashboard-security-control/m-p/164979#M2943</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/230503"&gt;@pragya17&lt;/a&gt;,&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Yes, this is absolutely possible!&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;Databricks AI/BI Dashboards support Row-Level Security (RLS) natively through&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;Unity Catalog Row Filters&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;— no dashboard-level configuration needed.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;How it works:&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Create a&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;mapping table&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;defining who can see what:&lt;/P&gt;&lt;LI-CODE lang="markup"&gt;CREATE TABLE hr.security.manager_access (
  manager_email STRING,
  employee_id  STRING
);
-- Managers have rows for ALL their reports; employees have only their own row&lt;/LI-CODE&gt;&lt;P&gt;Create a&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;row filter function&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;using&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=""&gt;CURRENT_USER()&lt;/SPAN&gt;:&lt;/P&gt;&lt;LI-CODE lang="markup"&gt;CREATE FUNCTION hr.security.performance_filter(emp_id STRING)
RETURN
  -- Managers: see all employees under them
  EXISTS (
    SELECT 1 FROM hr.security.manager_access m
    WHERE m.manager_email = CURRENT_USER()
      AND m.employee_id = emp_id
  )
  OR
  -- Employees: see only their own record
  emp_id = CURRENT_USER();&lt;/LI-CODE&gt;&lt;P&gt;&lt;STRONG&gt;Apply the filter&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;to your table:&lt;/P&gt;&lt;LI-CODE lang="markup"&gt;ALTER TABLE hr.gold.employee_performance
SET ROW FILTER hr.security.performance_filter ON (employee_id);&lt;/LI-CODE&gt;&lt;P&gt;&lt;STRONG&gt;Publish the dashboard with "Individual data permissions"&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;(not "Shared"). This ensures each viewer's identity is used to evaluate the row filter.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Key points:&lt;/STRONG&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;SPAN class=""&gt;CURRENT_USER()&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;and&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=""&gt;IS_ACCOUNT_GROUP_MEMBER()&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;are evaluated per viewer automatically&lt;/LI&gt;&lt;LI&gt;If you publish with&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;Shared data permissions&lt;/STRONG&gt;, all viewers see the publisher's data (RLS is bypassed)&lt;/LI&gt;&lt;LI&gt;You can also use&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=""&gt;IS_ACCOUNT_GROUP_MEMBER('managers')&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;for group-based logic instead of a mapping table&lt;/LI&gt;&lt;LI&gt;No changes needed in the dashboard queries themselves — filtering is transparent at the data layer&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;If my answer was helpful, please consider marking it as accepted solution!&lt;/STRONG&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 05 Aug 2026 19:40:11 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-governance/dashboard-security-control/m-p/164979#M2943</guid>
      <dc:creator>GabFernandes</dc:creator>
      <dc:date>2026-08-05T19:40:11Z</dc:date>
    </item>
    <item>
      <title>Re: Dashboard Security Control</title>
      <link>https://community.databricks.com/t5/data-governance/dashboard-security-control/m-p/164980#M2944</link>
      <description>&lt;P&gt;Yes, you can Dynamic Views for that. Putting an example below:&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;Steps:&lt;/STRONG&gt;&lt;BR /&gt;1. Create an employee-access mapping table containing:&lt;BR /&gt;viewer_email&lt;BR /&gt;employee_email&lt;BR /&gt;&lt;BR /&gt;2.&amp;nbsp;Create a secured view or apply a Unity Catalog row filter:&lt;/P&gt;
&lt;LI-CODE lang="markup"&gt;CREATE OR REPLACE VIEW hr.employee_performance_secure AS
SELECT p.*
FROM hr.employee_performance p
JOIN hr.employee_access a
  ON p.employee_email = a.employee_email
WHERE lower(a.viewer_email) = lower(current_user());&lt;/LI-CODE&gt;
&lt;P&gt;3. Build every dashboard dataset from this secured view. KPIs and aggregations will automatically reflect the rows authorized for the current viewer.&lt;BR /&gt;&lt;BR /&gt;4.&amp;nbsp;Grant users access to the secured view and dashboard, but do not grant them direct access to the unrestricted base table. Dynamic views can use &lt;STRONG&gt;current_user()&lt;/STRONG&gt; and &lt;STRONG&gt;is_account_group_member()&lt;/STRONG&gt; for identity- or group-based rules&lt;BR /&gt;&lt;BR /&gt;5.&amp;nbsp;Publish using &lt;STRONG&gt;Individual data permissions&lt;/STRONG&gt;, not &lt;STRONG&gt;Share data permissions&lt;/STRONG&gt;. With shared permissions, queries run using the publisher’s identity, so viewer-specific row-level security does not apply.&lt;/P&gt;</description>
      <pubDate>Wed, 05 Aug 2026 19:44:00 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-governance/dashboard-security-control/m-p/164980#M2944</guid>
      <dc:creator>adnan_alvee</dc:creator>
      <dc:date>2026-08-05T19:44:00Z</dc:date>
    </item>
  </channel>
</rss>

