You built an amazing app, but can the wrong people see sensitive data? This cheat sheet covers the three core security concepts every Power Apps maker needs to understand to control who sees what data in their apps. If you're focused on building and showing data but haven't thought deeply about access control, start here.
Many new app makers share their apps and discover users either can't see any data (frustrating) or can see ALL the data including sensitive information they shouldn't access (dangerous). Dataverse security works differently than you might expect, and hiding a button or disabling a control doesn't actually secure your data. Real security happens at the data layer, not the UI layer.
What it is: Security roles define what actions users can perform (Create, Read, Write, Delete, Share, Assign) and at what scope (their own records, their business unit's records, or all records in the organization).
Why it matters: Even if users can open your app, they need the right security role to actually see and work with data. Security roles are cumulative—if a user has multiple roles, they get the most permissive access.
What to think about:
Key actions:
Learn more:
What it is: Column-level security (also called field-level security) restricts access to specific columns within a table—like hiding salary data, social security numbers, or medical information from users who can still see the rest of the record.
Why it matters: Sometimes users need to see most of a record but shouldn't access certain sensitive columns. Table-level security is too broad; column-level security provides the granular control you need.
What to think about:
Key actions:
Learn more:
What it is: Business units create organizational structure and security boundaries in Dataverse. Every environment has one root business unit; you can create child business units to represent departments, regions, or teams. Each user belongs to exactly one business unit.
Why it matters: Business units work with security roles to determine data access scope. A security role set to "Business Unit" level means users only see records owned by their business unit. This enables departmental data isolation (Sales can't see Service department records).
What to think about:
When to use business units:
Key actions:
Learn more:
How it works:
What this means:
Critical point: If your canvas app connects to Dataverse, you must do BOTH—share the app AND assign security roles. One without the other won't work.
How it works:
What this means:
Critical point: Model-driven app security is simpler but less flexible—everything is controlled by Dataverse security roles, and users can't access the app without proper role assignments.
Learn more:
Relying on UI-level security: Hiding controls, disabling buttons, or filtering data in Power Fx formulas does NOT secure your data. Users can inspect network traffic or modify apps. Always implement security at the data source level using Dataverse security roles and column-level security.
Using System Administrator for testing only: If you only test as System Administrator, your app will work perfectly for you but fail or expose data for end users. Always test with representative user accounts that have the actual security roles you'll assign to real users.
Forgetting to share data sources: Sharing a canvas app doesn't automatically share Excel files, SharePoint lists, or other connections. Users will get errors when they try to use the app. Share all underlying resources when sharing canvas apps.
Building in the default environment: The default environment is shared by all users in your tenant with minimal governance. Building apps with sensitive data here risks unauthorized access. Create dedicated environments with proper security boundaries.
Not assigning Dataverse security roles: Sharing a canvas app but forgetting to assign security roles means users can open the app but can't see any data—just errors or blank screens.
Using overly restrictive security roles: Creating security roles that are too restrictive means users can't complete their work. Start with the minimum permissions needed, then add permissions as users report access issues.
Not configuring custom table privileges: For model-driven apps with custom tables, predefined security roles don't include any privileges. Users won't be able to see or work with your custom table data.
Forgetting column security profiles: Enabling column-level security without creating and assigning column security profiles means only System Administrators can see those columns—everyone else sees asterisks.
Core security concepts:
Best practices:
For understanding security roles:
For implementing column-level security:
For business units and record-level security:
For video learners:
For access teams and advanced topics:
| Concept | Controls | When to use | Complexity |
|---|---|---|---|
| Security Roles | What actions users can perform and at what scope | Every app—this is your primary security mechanism | Medium |
| Column-Level Security | Access to specific columns within tables | Only for sensitive columns (salary, SSN, medical info) | Low to Medium |
| Business Units | Organizational boundaries and departmental isolation | Only when you need strict data separation by department or region | High |
Remember: Start with security roles, add column-level security for sensitive data, and only implement business units when you have a clear organizational need for data isolation. Most apps only need security roles and maybe column-level security.
Security isn't scary—it's just about asking the right questions: Who needs this app? What data should they see? What actions should they perform? Answer those questions, configure the appropriate security roles and column security, and you'll build apps that are both functional and secure.