Shared dashboard access sounds simple until the wrong customer sees the wrong row. One dashboard for everyone is absolutely doable, but only if row-level security is wired into the data, the BI tool, and the sign-in flow from the start.

What shared dashboard access actually needs to work

The goal is straightforward: every customer opens the same dashboard experience, but each one only sees the data tied to that account. No duplicate dashboards. No manual swapping. No nervous refresh right before a demo at 4:47 p.m.

That only works when row-level security, usually shortened to RLS, filters every query based on who is signed in. If the dashboard is shared but the data rules are loose, the setup is not shared access. It is a leak waiting to happen.

A secure analytics screen showing the same set of charts and tables for every user, with one visible customer record row highlighted while neighboring rows are dimmed or hidden behind a data-filtered layer, suggesting row-level security controlling what appears on the shared dashboard

What you’ll need before you start

Before Step 1, make sure the basics are in place. You need a BI tool that supports RLS, such as Tableau, Power BI, or AWS QuickSight. You also need a stable user identifier, tenant-aware data, and a clear login flow.

Your dashboard platform and data model

The dashboard tool is only half the job. Your data model needs fields the security layer can actually use, such as customer_id, tenant_id, account_id, region, or role. If those keys are missing or inconsistent across tables, the dashboard cannot reliably know what to hide.

A shared dashboard with clean tenant keys is far easier to secure than a pile of report-specific fixes. If you want a deeper look at the pattern, this guide on avoiding duplicate dashboards across tenants lays out the logic clearly.

A source of truth for users and permissions

You need one place that says which user can see which tenant, region, or account. That can live in your app database, an identity provider, or a dedicated entitlement table. The format matters less than the discipline. It needs to stay current.

A clear definition of tenant access

Tenant access means one simple thing: which slice of data each signed-in user can view. Decide that before setup begins. If access rules get invented during testing, the security model turns into duct tape.

Step 1: Map who should see what

Start by translating business rules into data access rules. This is where a lot of RLS projects either stay clean or get messy for months.

  1. Write down every audience type that will use the dashboard.
  2. Define the exact data scope for each one.
  3. Flag any exceptions before building roles.

List your audience types

Most setups include customer admins, standard customer users, internal support, and leadership. Those groups often use the same dashboard but need different visibility. A customer admin may see every record for one account, while support may need temporary visibility across several.

Choose the field that will drive RLS

Pick one primary field for filtering, usually tenant_id or customer_id. It should be stable, unique, and available anywhere the dashboard pulls data from. If one chart filters on account_id and another relies on region with no tenant bridge, cracks show up fast.

Decide on exceptions before they become problems

Some users belong to multiple accounts. Some internal roles need wider access. Some partner managers need five customers, but not six. Define those cases now, not later. If you want a plain-English refresher on who should see which dashboard data, keep that model nearby while mapping roles.

Step 2: Prepare your data for row level security

Clean structure beats clever workarounds every time. RLS depends on predictable joins and consistent keys.

  1. Confirm tenant identifiers exist in every relevant table.
  2. Build an access mapping table.
  3. Test for bad data before publishing.

Add or validate tenant identifiers in every relevant table

Every fact table and every dimension involved in filtering should include the right tenant key, directly or through a reliable join. If one supporting table is missing that key, a visual can break security quietly. Quiet failures are the worst kind.

Create an access mapping table

Build a simple table that links user identity to tenant identity. For example, email or user_id on one side, tenant_id on the other. If access is region-based or role-based, include those fields too. This table becomes the bridge between sign-in and filtered results.

Test for messy data before you publish

Check for null IDs, duplicate user mappings, mismatched formats, and inconsistent casing. Think of it like labeling house keys. If two keys look the same but open different doors, the mistake only shows up when somebody is already locked out, or worse, inside the wrong room.

A data engineering workspace with several connected database tables and an access-mapping spreadsheet-style table linking user identities to tenant IDs, while a checklist and warning icons sit beside rows with missing or mismatched keys to show data being cleaned before security rules are applied

Step 3: Set up RLS in your BI tool

Now connect user identity to the access rule inside the reporting layer. The pattern is the same across platforms: identify the signed-in user, match that user to allowed data, and apply the filter automatically.

  1. Create the security rule in the BI tool.
  2. Tie the rule to a user attribute or mapping table.
  3. Validate it with non-admin test accounts.

Tableau: Use user filters or entitlement tables

In Tableau, user filters can be driven by username functions, calculated logic, or entitlement-table joins. The cleaner setup is usually an entitlement table, because it scales better and is easier to inspect later. The result should be simple: signed-in users only see rows tied to allowed accounts.

Power BI: Create roles and map users to data

In Power BI, create roles and apply DAX filters based on the signed-in identity. Keep the expressions readable. A role you cannot explain in one minute is a role that will be painful to debug in three months. For a broader breakdown of how row-level filtering works in embedded analytics, it helps to compare the shared pattern before getting tool-specific.

AWS QuickSight: Apply rules-based security

QuickSight supports row-level permissions through rules datasets and related controls. It works best when the user-to-tenant mapping is maintained outside the dashboard and refreshed reliably. That keeps reporting focused on rendering data, not acting like a user directory.

Step 4: Connect dashboard access to your app or portal

This is where many setups wobble. The dashboard may be secure on its own, but the handoff from your app to the BI tool has to pass the right identity every time.

  1. Match application users to BI users.
  2. Send the right identity context during embedding.
  3. Reduce manual provisioning.

Match application users to BI users

Your app account and your BI account need a clean match. That can happen through SSO, embedded sessions, or synced user records. If a user logs into your app as one identity but hits the dashboard as another, RLS gets shaky immediately.

Pass the right context during embedding

When the dashboard loads inside your product, pass the correct signed-in identity, token, or session context. That is what turns a shared dashboard into a secure customer experience instead of a public hallway with nicer charts.

Avoid manual user provisioning where possible

Adding BI users one by one does not scale. It also turns user management into the hidden tax on customer-facing analytics. If you are sorting through platform choices, this overview of what matters in an embedded analytics setup helps clarify where provisioning and access control usually get painful.

Step 5: Test access like a real customer would

If you only test as an admin, you have not really tested RLS. Admins often bypass the very rules customers depend on.

  1. Log in as a single-tenant user.
  2. Test broader-access roles.
  3. Verify exports, subscriptions, and cached views.

Test single-tenant users

Use a staging account tied to one customer and inspect every page, filter, and drill-down. For example, if a user belongs to Acme West, confirm no Acme East data appears anywhere, including tooltips and detail tables.

Test multi-tenant and internal roles

Now test users with intentional broad access, such as support leads or account owners. Confirm wider access is coming from the mapping table or role logic, not from a default setting that accidentally opens everything.

Test exports, subscriptions, and cached views

RLS must hold up outside the live dashboard too. Test CSV downloads, scheduled snapshots, subscriptions, and any cached results. This is also a good point to review practical guardrails for external-facing RLS, because leaks often happen in the extras, not the main visual.

Step 6: Roll out shared dashboard access safely

A careful rollout saves support time and awkward customer messages.

  1. Launch with a small pilot.
  2. Document the rules.
  3. Monitor changes to permissions.

Start with a pilot group

Pick a small customer group first. That gives you room to catch bad mappings, weird edge cases, and dashboard behavior that looked fine in staging but acts differently in production.

Document your access rules

Keep a short plain-language record of who gets access to what and why. Nothing fancy. Just enough so product, engineering, and data teams can fix issues without reverse-engineering old logic.

Set alerts for permission changes

Monitor new users, revoked access, stale mappings, and sync failures. Shared dashboard access is not a one-time switch. It needs a light maintenance loop.

Troubleshooting common RLS issues

When something breaks, start with identity and mappings before rewriting the whole model.

A user sees no data

This usually comes from a missing user mapping, wrong login identity, unmatched tenant ID, or a filter that is too strict. Check the runtime identity first. A blank dashboard often means the user arrived correctly, but the entitlement table did not.

A user sees too much data

Treat this as urgent. Common causes include broken joins, broad default roles, fallback accounts, or internal permissions bleeding into external access. One leak can burn trust fast.

Performance drops after adding RLS

Complex permission joins and oversized access tables can slow dashboards down. Simplify the logic, index key fields, and strip out calculations that do not need to run at query time.

Permissions become hard to manage over time

This is the maintenance trap. Manual users across Tableau, Power BI, and QuickSight eventually become a spreadsheet problem with security consequences. Centralizing provisioning and access logic is usually the fix.

What success looks like after setup

When this is working, your customers all use the same dashboard experience, but each one automatically sees only the right data. Your team stops cloning reports for every account. Support questions drop. New customer rollout gets boring, which is exactly what you want from security.

Next step: try a simpler way to manage users and RLS

Try one thing this week: set up a test flow in embedportal.com and see how shared dashboard access feels when user management and RLS live in one place. It can simplify provisioning, access mapping, and secure embedding for Tableau, Power BI, and AWS QuickSight, without turning every new customer into a manual setup task.

Frequently Asked Questions

What is shared dashboard access?

It means multiple customers or user groups use the same dashboard framework, while access rules ensure each signed-in user only sees the rows meant for that account or role.

Is row-level security enough on its own?

No. RLS is the enforcement layer, but it depends on clean tenant keys, reliable user identity, and correct embedding or sign-in context.

Can one user have access to multiple customers?

Yes. That is common for partner managers, support teams, and account owners. The clean way to handle it is through an access mapping table, not custom report copies.

Which BI tool is best for customer-facing RLS?

Tableau, Power BI, and AWS QuickSight can all handle it. The bigger difference usually comes from how cleanly your user provisioning, identity matching, and entitlement data are managed.

Why do RLS issues show up after launch?

Because real usage finds the edge cases. Exports, stale mappings, multi-account users, and cached views often reveal problems that basic admin testing misses.

Curious how this would work on your own data?

Try EmbedPortal →
Scroll to Top