Skip to main content
Data Governance

Microsoft Fabric Security Best Practices for Manufacturers: Plant-Level Access Without Killing Adoption

The awkward conversation in a manufacturing Fabric rollout is rarely about encryption. It is that plant-level margin, standard cost, supplier pricing and payroll now sit on the same platform as the OEE board everyone wants on a screen by the line. Those two populations want opposite things — and Fabric gives you enough control to serve both, but not with a single switch.

Amit Kumar Singh - Technology Consulting Partner at MyData Insights

Technology Consulting Partner · MyData Insights

14+ years in industrial data · Former Accenture & EY · India, GCC, SEA

19 August 2026 · 14 min read

The bottom line

Securing Microsoft Fabric for a multi-plant manufacturer means designing five independent control layers — Entra ID identity plus Conditional Access, workspace roles, item permissions, OneLake data access roles, and engine-level controls including SQL permissions and semantic model row-level security — plus Purview labels over the top. Assign every workspace role to an Entra ID security group, never a named person. Separate restricted financial data (cost, margin, payroll) into its own workspace so broad-access controls never have to be clever. Know the bypasses: workspace Admin, Member and Contributor read everything and defeat RLS entirely; OneLake security is GRANT-only; and shared shop-floor terminals defeat per-user security completely. Get the workspace topology wrong and every finer control becomes a patch over a structural problem.

The awkward conversation is rarely about encryption

It is that plant-level margin, standard cost build-ups, supplier price files and payroll extracts now sit on the same platform as the OEE board everybody wants running on a screen next to the line. Those two populations want opposite things. The shop floor wants a dashboard that opens in three seconds on a shared terminal with no login friction. Finance wants margin data that a plant manager physically cannot reach.

Both defaults fail. Lock it down hard and adoption dies — people go back to the Excel extract, the least secure artefact in the estate and the one nobody audits. Leave it open and you have a governance incident waiting for an auditor to find. Fabric gives you enough control to solve this. What it does not give you is a single switch.

What securing Fabric actually means for a manufacturer

Securing Microsoft Fabric means designing five independent control layers — Entra ID identity and Conditional Access, workspace roles, item permissions, OneLake data access roles, and engine-level controls such as SQL granular permissions and semantic model row-level security — plus Microsoft Purview classification over the top.

The constraint everything hangs off: workspaces are the primary security boundary. Get the topology wrong and every finer-grained control becomes a patch over a structural problem. By the time you have 300 items across nine workspaces, restructuring is a project, not a change.

Identity foundations: Entra ID groups, never named people

Assign workspace roles to Microsoft Entra ID security groups, not to individual users. The reason is joiner-mover-leaver arithmetic, not elegance. Grant per person and within eighteen months you have a planner who moved from Plant B to Plant D two years ago and still reads Plant B cost, with no owner able to say why.

Build the taxonomy around how the business splits, not the tool: by plant, by function (finance, production, quality, maintenance, supply chain), and by seniority tier where a genuine data distinction exists — FAB-Plant-Jeddah-Production, FAB-Finance-GroupMargin, FAB-Contractor-EPC-ProjectX. Because the highest permission across groups wins, one over-broad group silently defeats every narrow one beneath it. Audit for that, not for individual grants.

Workspace and domain topology: the boundary you design before items proliferate

Workspaces are the primary security boundary; domains are not. Domains look like a security construct in the admin portal and are not one — domain assignment gives items a metadata attribute for discovery in the OneLake catalog, but item visibility still depends on workspace roles. What domains give you is federated governance: domain admins can override delegated tenant settings including the default sensitivity label.

The topology that works in industrial estates separates by data sensitivity first, lifecycle second:

WorkspaceContentsReadership
Ingestion / BronzePipelines, raw landingMachine identities only, no human viewers
Curated / SilverConformed plant, product, supplier, calendar dimensionsEngineering only
Operations GoldProduction, quality, maintenance, logistics modelsBroad plant readership
Restricted GoldStandard cost, margin, supplier pricing, payroll, headcountNarrow readership, its own audit posture

That fourth workspace is the one manufacturers most often skip and the one that pays for itself: separate the restricted items and the broad-access controls never have to be clever.

The layered permission model, and what each layer does not control

The layers are independent. Each stops somewhere specific — and workspace Admin, Member and Contributor roles override most finer-grained restrictions beneath them.

LayerWhat it controlsWhat it does NOT control
Entra ID + Conditional AccessWho authenticates, from where, with MFA (needs Entra ID P1)Anything inside Fabric; applies broadly, a blunt instrument for per-plant rules
Tenant settingsWhether capabilities exist — external sharing, guest access, publish to webWho sees which rows; gates features, not data
DomainsDiscovery grouping; delegated default label and certificationAccess; does not affect item visibility
Workspace rolesThe primary boundary; Viewer gets read, higher roles get controlGranularity within a workspace; Admin/Member/Contributor read all data and override OneLake Read
Item permissionsAccess to one lakehouse/warehouse/model without workspace membershipRows and columns; all-or-nothing for the object
OneLake data access rolesRead/ReadWrite on tables and folders, with RLS and CLSDENY — it is GRANT-only, and cannot restrict workspace Admin/Member/Contributor
SQL granular permissionsObject-level GRANT/DENY/REVOKE in Warehouse and SQL endpointConnection rights alone; still needs item Read + a workspace role
Warehouse RLSRow filtering via security predicates; applies to all users including dboAlteration of itself; dbo can drop the policy (auditable, not prevented)
Semantic model RLS / OLSRows and columns in a Power BI modelAnyone above Viewer; Admin/Member/Contributor bypass both
Purview sensitivity labelsClassification and encryption on supported exportsAccess, mostly; label-based control needs protection policies

The most common error is the third column of the semantic model row. A team builds dynamic RLS by plant, assigns everyone Viewer, considers it solved — then discovers the plant analysts were also given Contributor so they could publish their own reports, which means RLS never applied to them.

Workspace Admin, Member and Contributor read Lakehouse and Warehouse data through T-SQL, OneLake APIs and Spark, and bypass semantic model RLS and OLS entirely. A Contributor added "to refresh a dataflow" reads every row.

Row-level security patterns for multi-plant reporting

Implement row-level security once at the lowest layer every consumption path shares, then verify each path independently. The pattern that holds up is a plant-security bridge table: one row per user principal name per plant code, sourced from HR or the ERP org structure rather than maintained by hand, with a dynamic RLS expression matching USERPRINCIPALNAME() against it. Sourcing it from the system of record is the part that survives contact with reality.

Three behaviours to test rather than assume. Direct Lake mode changes the answer — where the SQL analytics endpoint enforces RLS, Direct Lake on SQL falls back to DirectQuery, while Direct Lake on OneLake succeeds and SQL-based RLS is not applied. Fixed identity versus single sign-on changes who is authorised. And service principals cannot be added to RLS roles, while Entra security groups containing B2B guests may not resolve — the documented workaround is adding external users directly by email.

Object-level security has a side effect worth naming: for a user without permission the secured column behaves as if it does not exist, and any visual referencing it breaks with a "Column cannot be found" error. Hiding StandardCost with OLS breaks the cost report for plant users rather than blanking a number.

Guests, contractors and third parties

In Microsoft Fabric you can only share items with B2B guest users by sharing the workspace. Explicit sharing of particular items with guests is not supported, except for reports, dashboards, semantic models and apps. That matters in an EPC (Engineering, Procurement & Construction) or contract manufacturing estate, where third parties — line integrators, maintenance contractors, co-packers, freight partners, the parent's audit team — can outnumber internal headcount.

The workable pattern is a dedicated external-facing workspace per counterparty, holding only Power BI reports and their semantic models, fed from the internal Gold layer. Guests get Viewer there and nothing else.

The OT/IT boundary: what should never traverse into the analytics estate

In a manufacturing Fabric estate the OT/IT boundary should be unidirectional. Process data flows out of the plant network to Fabric through a broker or historian using OPC-UA or MQTT; nothing in the analytics estate writes back to SCADA, PLCs or the MES control path. The controls that matter sit below Fabric: a demilitarised zone between plant and enterprise networks, an OPC-UA or MQTT broker as the only egress, read-only access into the historian, and no inbound route to the control system.

Three categories should not cross without a documented reason: PLC and controller credentials or configuration, anything on the safety-instrumented path, and live setpoint control. Aggregated process data, alarm and event history, batch genealogy and downtime coding all cross safely. The identity consequence catches people: shop-floor terminals usually run shared logins, and a shared account defeats per-user row-level security completely — every rule evaluates against one identity.

Where security genuinely conflicts with adoption

This is the section most security guidance skips, and it is where these programmes fail. Five tensions are real, not solvable by configuration alone:

  • Shared terminals versus per-user security — irreconcilable in principle; resolve by putting only non-restricted operational data on shared screens
  • Self-service versus the Contributor bypass — plant analysts who build their own reports need Contributor, and Contributor bypasses RLS and OLS entirely; give them a separate build workspace with no restricted data
  • Least privilege versus request queues — every access request that takes four days teaches someone to email an Excel file instead
  • Private link versus everything people like — blocking public internet access costs you on-premises gateways, Copilot, PDF and PowerPoint export, and email subscriptions
  • Restricted workspaces versus one version of the truth — splitting margin out risks two cost models drifting apart; source both from the same Silver layer

Where this breaks, and what it does not fix

Workspace roles beat almost everything below them — Admin, Member and Contributor read data through T-SQL, OneLake APIs and Spark, and bypass RLS and OLS. OneLake security is GRANT-only, so you cannot carve an exception out of a broad grant — you restructure the grant instead. Distribution lists silently fail at the SQL analytics endpoint: a distribution list added to a OneLake security role cannot be resolved there, so its members appear not to hold the role.

Direct Lake on OneLake does not apply SQL-based RLS, so a model built on warehouse RLS has a hole the moment someone builds a Direct Lake on OneLake model over the same tables. Labels classify; on their own they do not restrict. And none of this addresses the Excel layer — once data leaves Fabric into a workbook on someone's laptop, every control here stops applying except label-based encryption on supported export paths.

What to do first

Answer these five this week, before you touch a permission screen:

  • How many people hold Contributor or above on a workspace containing standard cost, margin or payroll data — and can you name each one and why?
  • Is every workspace role assigned to a security group, or are there named-user grants? Count them.
  • Which identity refreshes your ERP data, what else can it reach, and who can trigger it?
  • If a plant manager opened the SQL analytics endpoint directly, rather than the Power BI report, what would they see?
  • Can any pipeline in your Fabric estate write into an MES, SCADA or historian system?

If question one returns a number above fifteen, or question five returns yes, those are your first two work packages regardless of what else is on the roadmap. We build governed Microsoft Fabric estates for manufacturers, FMCG, packaging, logistics and EPC businesses — workspace topology, Entra ID group design and Purview classification as one exercise, not three.

Two questions decide your first work packages: how many people hold Contributor-or-above on a workspace with cost, margin or payroll, and can any pipeline write into an MES, SCADA or historian. Book 30 minutes with Amit — no slides, no pitch deck, no obligation to proceed. We map each permission layer against your plant, finance, engineering and contractor populations, with the bypass conditions noted in the margin.

Free Assessment

Where does your operation sit on the data maturity curve?

8 questions. 3 minutes. You get a scored breakdown across data infrastructure, analytics readiness, and automation potential — with a specific next step for your industry.

Data GovernanceMicrosoft FabricSecurityManufacturingRLS

Your Data · Our Technology · Our Automation

Get practical insights every fortnight

Amit writes about Microsoft Fabric, Power BI, AI in operations, and digital transformation for manufacturing and supply chain leaders. Practitioner perspective - no fluff, no vendor spin.

No spam. Unsubscribe any time. Also on Substack.

FAQ

Common questions

Can a plant manager see group margin in Microsoft Fabric by default?

If the margin data sits in a workspace where they hold any role above Viewer, yes. Workspace Admin, Member and Contributor read Lakehouse and Warehouse data through T-SQL, OneLake APIs and Spark, and bypass semantic model row-level security and object-level security entirely.

Does OneLake security apply to the SQL analytics endpoint?

Yes, for the SQL analytics endpoint in user identity mode, where row-level and column-level filtering is generally available. Two caveats: distribution lists added to a OneLake security role cannot be resolved there, so members appear not to hold the role; and column-level security uses intersection semantics across roles.

Do sensitivity labels stop people downloading data from Fabric?

Not on their own. Microsoft Purview sensitivity labels control access only when associated with protection policies within the tenant, or publishing policies covering .pbix files and supported export paths. Export to .csv or .txt and cross-tenant access are outside that.

How should I give contractors access to Fabric reports?

Create a dedicated workspace per counterparty containing only reports and their semantic models, and grant guests Viewer on that workspace. In Fabric you can only share items with B2B guest users by sharing the workspace — explicit item sharing to guests is unsupported except for reports, dashboards, semantic models and apps.

Does row-level security work with Direct Lake?

It depends on the mode. Where the SQL analytics endpoint enforces row-level security, Direct Lake on SQL falls back to DirectQuery mode, while Direct Lake on OneLake queries succeed and SQL-based RLS is not applied, because that mode reads the files in OneLake directly.

Should we turn on private link for our Fabric tenant?

Only after checking your ingestion path. On-premises data gateways are not supported and fail to register when private link is enabled — and if your SAP or MES data reaches Fabric through a gateway, tenant-wide private link with public access blocked is not compatible with that path. Copilot and several export features are also affected.

Is this the challenge you're facing?

Book a 30-minute call. We'll look at your specific operation and tell you what's achievable - plainly and without slides.