v1.2026.4.2.NET Framework 4.8XrmToolBox Plugin

Enterprise-Grade
Security Audit
for Dynamics 365

Analyze every user, role, and privilege across your Dataverse environment. Detect security risks, compare access levels, and generate comprehensive audit reports — all from one powerful XrmToolBox plugin.

20,000+ Users
Risk Detection
6 Bulk Queries
Role Privilege Analyzer — XrmToolBox Plugin for Dynamics 365
Features

Everything You Need for Security Auditing

From real-time filtering to Excel exports, every feature is designed to make security analysis faster and more thorough.

Core Features

User-Role Grid

Virtual-mode DataGridView handles 20,000+ users effortlessly. Only visible rows are rendered for buttery-smooth scrolling.

Privilege Risk Heatmap

Color-coded access levels from Basic (green) to Global (red) give you instant visual insight into privilege distribution.

Security Risk Detection

Automatically flags high-risk users with System Administrator, System Customizer, or Support User roles.

Real-time Search

Debounced 300ms filtering across the entire user list. Find any user by name in milliseconds.

Column Sorting

Click any column header to sort ascending or descending. Sort by name, risk level, role count, or any field.

Privilege Drill-down

Navigate Role → Privilege → Access Level in a hierarchical tree view. Understand exactly what each role grants.

Advanced Features

Role Comparison

Compare two users side-by-side to identify shared and unique roles, privileges, and access levels.

Analytics Dashboard

Summary statistics with an interactive bar chart showing risk distribution, privilege levels, and role counts.

Excel Export

Export to .xlsx with ClosedXML and conditional formatting. Risk colors are preserved in the spreadsheet.

Open in CRM

Double-click any user row to instantly open their profile in Dynamics 365 — no searching required.

How It Works

Audit Security in 9 Simple Steps

From connecting to your instance to exporting reports — the entire workflow is streamlined.

STEP 01

Open the Tool

Launch Role Privilege Analyzer from XrmToolBox and connect to your Dynamics 365 instance.

STEP 02

Load Data

FetchQuery triggers 6 optimized bulk queries to load users, roles, and privileges.

STEP 03

Explore User-Role Grid

Browse the virtual-mode DataGridView with 20,000+ users without lag.

STEP 04

Analyze Risk Levels

Instantly see color-coded risk indicators for every user in the grid.

STEP 05

View Privilege Drill-Down

Click any cell to see Role → Privilege → Access Level details.

STEP 06

Compare Users

Select two users and compare their roles and privileges side-by-side.

STEP 07

View Analytics

Open the analytics tab for summary stats and interactive bar charts.

STEP 08

Export to Excel

Generate a formatted .xlsx file with conditional formatting preserved.

STEP 09

Open User in CRM

Double-click a user row to open their Dynamics 365 profile directly.

Risk Analysis

Understand Your Security Posture

Visual risk indicators make it easy to identify over-privileged users and dangerous access levels at a glance.

High Risk

System Administrator, System Customizer, or Support User role detected.

Over Privileged

More than 5 roles assigned OR any Global-level privilege found.

Normal

User is within safe thresholds. Standard access level.

No Roles

Zero role assignments detected. User has no access.

Performance

Built for Scale

Every architectural decision prioritizes performance. No compromises.

60fps

VirtualMode Rendering

Only visible rows are rendered in the DataGridView. Scroll through 20,000+ users with zero lag.

6 queries

6 Bulk Queries

All data is fetched in just 6 optimized FetchXML queries. Zero N+1 problem.

O(1)

In-Memory Caching

Dictionary-based caching ensures O(1) lookups for role names, privilege levels, and risk calculations.

Non-blocking

Async / Await Throughout

Every I/O operation uses async patterns to keep the UI thread responsive during data loading.

Live UI

Progress Bar Feedback

Real-time progress bar shows query execution status so users know exactly what's happening.

20K+

20,000+ Users

Tested with environments exceeding 20,000 users. The grid remains smooth and responsive.

Architecture

Clean, Modular Design

The codebase follows a clear separation of concerns with dedicated layers for plugins, models, services, and controls.

RolePrivilegeAnalyzer — Solution Explorer
RolePrivilegeAnalyzer/
├── Models/
│ ├── UserRoleModel.cs
│ ├── PrivilegeModel.cs
│ └── RoleComparisonResult.cs
├── Services/
│ ├── DataService.cs
│ ├── RiskAnalysisService.cs
│ └── ExportService.cs
├── UI/
│ └── RolePrivilegeAnalyzerControl.cs
├── Properties/
│ └── AssemblyInfo.cs
├── RolePrivilegeAnalyzerPlugin.cs
└── RolePrivilegeAnalyzer.csproj
Data Queries

6 Optimized FetchXML Queries

No N+1 problem. All data is loaded in just 6 bulk queries with carefully designed FetchXML.

Users QueryQ1

Fetches all users with their full names and domain names from the systemuser table.

<fetch mapping="logical" distinct="false">
  <entity name="systemuser">
    <attribute name="fullname" />
    <attribute name="domainname" />
    <attribute name="systemuserid" />
    <filter type="and">
      <condition attribute="isdisabled" operator="eq" value="false" />
    </filter>
  </entity>
</fetch>
User-Role MappingQ2

Retrieves role associations for each user via the systemuserroles intersection table.

<fetch mapping="logical">
  <entity name="systemuserroles">
    <attribute name="systemuserid" />
    <attribute name="roleid" />
    <link-entity name="role" from="roleid" to="roleid">
      <attribute name="name" />
    </link-entity>
  </entity>
</fetch>
Role PrivilegesQ3

Fetches all roleprivilege records linking roles to their granted privileges.

<fetch mapping="logical">
  <entity name="roleprivilege">
    <attribute name="roleid" />
    <attribute name="privilegeid" />
    <attribute name="accessright" />
    <attribute name="depth" />
  </entity>
</fetch>
Privilege DefinitionsQ4

Loads privilege metadata including name and object type code for each privilege.

<fetch mapping="logical">
  <entity name="privilege">
    <attribute name="privilegeid" />
    <attribute name="name" />
    <attribute name="objecttypecode" />
  </entity>
</fetch>
Business UnitsQ5

Retrieves all business units for hierarchical depth calculations.

<fetch mapping="logical">
  <entity name="businessunit">
    <attribute name="businessunitid" />
    <attribute name="name" />
    <attribute name="parentbusinessunitid" />
  </entity>
</fetch>
System RolesQ6

Fetches the 3 built-in system roles (System Administrator, Customizer, Support User).

<fetch mapping="logical">
  <entity name="role">
    <attribute name="roleid" />
    <attribute name="name" />
    <filter type="and">
      <condition attribute="ismanaged" operator="eq" value="true" />
    </filter>
  </entity>
</fetch>