web
You’re offline. This is a read only version of the page.
close
Skip to main content

Announcements

News and Announcements icon
Community site session details

Community site session details

Session Id :
Power Platform Community / Forums / Power Apps / Large number of record...
Power Apps
Suggested Answer

Large number of records deleted from dataverse tables

(0) ShareShare
ReportReport
Posted on by 2
Hi
 
Recently almost all the records were deleted from custom table in dataverse (around ~ 10,000).
On checking audit log, it shows these were deleted in a matter of 1 hour. 
The strange thing is the user whose name appears in logs is an end user of canvas app.
He has no knowledge of doing this.
 
Any reason how this is possible.
 
The canvas app is shared using Entra security groups. The privilege of the Entra security group was User (not Co-owner).
A custom security role was created for managing access to dataverse tables/
 
Preventive steps taken post incident:
1. Keep delete dataverse records settings enabled under Features
2. Delete privilege removed from custom security role.
3. 99% data is restored by restoring the environment 
 
Only question we are still unable to answer is how this could happen and why audit logs show account of an end user.
 
If anyone has any idea, feel free to share.
  • Suggested answer
    11manish Profile Picture
    4,819 Super User 2026 Season 2 on at
    The incident resulted in the deletion of approximately 10,000 Dataverse records within a one-hour period. Dataverse auditing associates the delete operations with an end-user account; however, this alone does not establish that the user intentionally performed the deletions. The user was an App User, not a Co-owner, but their Dataverse security role contained the Delete privilege, which allowed operations against the table through the application. The deletion pattern indicates that an application action, Power Automate flow, plug-in/workflow, cascade operation, bulk-delete job, or another automated process should be investigated. Delete privilege has subsequently been removed from the end-user role and the data has been restored. The remaining RCA activity should focus on correlating Dataverse audit timestamps with application, flow, plug-in, system-job and identity logs to determine the original trigger.
  • Suggested answer
    Mohsin Ali Profile Picture
    1,111 on at
    Hello @powerwithgaurav16 -  There may be a background process or job running under certain circumstances using the context of the current user. That could explain why the audit history shows that a specific user deleted those records.

    Since around 10,000 rows were deleted within an hour, it is very unlikely to be a manual effort. It was more likely triggered by a background process or automation, so I would not blame the end user at this stage.

    To recover from the situation, you can consider the following options:

    • Create another environment and restore a backup of your current environment from a point in time before the records were deleted.
    • Use a data migration tool to retrieve the deleted records from the restored environment and import them back into your current environment.

    You have already taken some preventive measures. The main thing I would suggest now is to thoroughly investigate all background processes, including classic workflows, Power Automate flows, plugins/custom code, and Azure Functions, if any are involved. Additionally, also check if bulk delete job was added accidently by someone and that gets triggered when condition met.

    I would recommend double-checking any actions being performed from Canvas Apps or other integrations that may be running under a user’s context.

    Lastly, create a support ticket with Microsoft too to seek assistance for mass deletion too.

     


  • Suggested answer
    M Bilal Khan Profile Picture
    384 on at

    The audit log showing an end user's account is an important clue, but it doesn't necessarily mean that the user manually deleted 10,000 records.

    I'd investigate the effective Dataverse permissions and whether something was executing under that user's context.

    A few things I'd check:

    1. Verify the user's effective security roles

    Even though the Entra security group is assigned the User access level, check all security roles assigned directly to the user and through every Entra group/team they belong to.

    Pay particular attention to the Delete privilege on the affected table and its access level.

    2. Check the canvas app for Delete/Remove operations

    Search the app for functions such as:

    Remove()
    RemoveIf()
    Patch()
    SubmitForm()
    

    Also check whether any button, timer, OnStart/OnVisible formula, or component can trigger a delete indirectly.

    A loop or incorrect RemoveIf() condition could potentially delete a very large number of records surprisingly quickly.

    3. Check Power Automate flows

    This is probably one of the first places I'd investigate.

    Look for flows using:

    Delete a row
    List rows
    Apply to each
    Dataverse Web API
    Execute changes / custom actions
    

    Check the run history around the exact time of the incident and identify which connection/account performed the operation.

    4. Check whether the deletion was performed synchronously or asynchronously

    10,000 deletions in approximately one hour sounds more like an automated/bulk operation than someone manually deleting records one by one.

    Look at the audit entries around the first and last deletion and see whether they have the same operation, user, application/context information and timestamps.

    5. Don't rely only on the "User" displayed in the audit record

    The auditing user is useful, but you also want to determine the application/service context that generated the operation.

    If the deletion originated from a canvas app, flow, custom API, plugin, integration, etc., the end user's identity may be the caller/context under which the operation was executed.

    6. Check plug-ins and custom code

    If the table has plug-ins, workflows, business rules, custom APIs or other server-side automation, verify whether any of them can cascade or initiate deletes.

    Also check cascade delete relationships. A delete on a parent record can result in related records being deleted automatically.

    7. Review the security role change/history

    Since a custom security role was being used, verify exactly when the Delete privilege was removed and whether the role was assigned to any other users/teams.

    I'd also check the user's Entra group memberships at the time of the incident. Removing the Delete privilege now doesn't tell you what effective privileges the user had when the deletion occurred.

    Your recovery steps are good, especially restoring the environment and removing Delete from the custom role. I'd additionally consider keeping Delete restricted to a small administrative group and handling business deletions through a controlled process.

    The most useful next step would be to take one or two audit records from the deletion window and inspect all available fields, not just the user name. The timestamp, operation, table, record, initiating user/application context and surrounding audit events can help determine whether this was actually a canvas-app action, automation, cascade delete, or some other server-side operation.

    I wouldn't conclude that the end user intentionally deleted the records just because their account appears in the audit log.

Under review

Thank you for your reply! To ensure a great experience for everyone, your content is awaiting approval by our Community Managers. Please check back later.

Helpful resources

Quick Links

Season of Sharing Community Challenge Winners!

Congratulations to our community stars!

Kudos to our 2025 Community Spotlight Honorees

Expanding mentorship, skilling, and AI innovation

Leaderboard > Power Apps

#1
11manish Profile Picture

11manish 383 Super User 2026 Season 2

#2
Mohsin Ali Profile Picture

Mohsin Ali 356

#3
WarrenBelz Profile Picture

WarrenBelz 232 Most Valuable Professional

Last 30 days Overall leaderboard