🇮🇳 Made in India · 100% On-Device AI

The ERP User Access Review That Argues With Itself

Dormant accounts, privileged IDs, shared logins and SOD conflicts — found in your browser, quoted at row level, then challenged by an adversarial pass whose only job is to find the false positives. Sample SAP and Oracle EBS extracts included.

🔒 Zero rows leave your browser ⚡ No API key, no per-seat fee 🧾 Row-level evidence on every finding 🔍 Declares its own false positives
YOUR BROWSER · NO UPLOAD ACCESS EXTRACT DETERMINISTIC PASS rows · counts · field values HIGH · dormant ×12 MED · shared IDs ×9 duplicate id ×8 ← FALSE POSITIVE, DISCARDED CLOUD LLM
AI in GRC Sep 3, 2026·9 min read

I gave an AI 50 rows of SAP access data and told it to prove itself wrong

Finding exceptions in an ERP user listing is easy. Finding the real ones is the job. Here is a user access review that runs entirely in your browser, quotes the row behind every finding, and then spends a third pass attacking its own conclusions.

The part of the access review nobody enjoys

You know the drill. Security exports a user listing. It lands in your inbox as a 40,000-row spreadsheet with column names like BNAME, GLTGB, TRDAT. You rebuild the same pivot tables you built last quarter. You highlight the dormant accounts in yellow. You email the business owner. They reply that six of your exceptions are approved service accounts that have been on the whitelist since 2019.

The tedious part was never the detection. It was the triage — the gap between “the spreadsheet flagged it” and “I would put my name on it”. That gap is where an access review actually consumes your quarter, and it is the specific problem the new access analytics feature in the GrcAI Assistant was built for.

The constraint that shapes everything else: a user listing is among the most sensitive files an audit team handles. So this one never leaves the tab. There is no upload endpoint, no API key and no server-side inference — not as a policy, but as an architectural fact you can verify by pulling your network cable out mid-analysis.

What it looks for

Attach an ERP user or role extract and it runs a deterministic pass across seven exception families before the model writes a single word:

📄

Reading a SOC 1 Report Against Your Own Policy

Report, policy and prior-year findings in one conversation — nothing uploaded.

👥

Duplicate users

The same person holding two accounts under different IDs — the classic leaver who came back as a contractor.

💤

Dormant accounts

Active, provisioned, entitled — and unused for 90 days or more. The largest population in most reviews.

🔑

Privileged accounts

Well-known standard IDs and roles whose names denote administrative access.

🎭

Generic & shared

Service, interface, training and shared-mailbox logins where accountability breaks down.

🔤

Suspicious naming

Placeholders, test IDs and implausibly short identifiers that never made it off the project.

⚖️

SOD indicators

Vendor master with payment run, goods receipt with invoice verification, development with transport-to-production.

Plus the patterns that fall outside those families and still matter: accounts past their end date but still marked active, active accounts with no owner recorded, and accounts created but never used.

Try it now — the sample files

Nobody should test an unfamiliar tool on production access data. So here are two anonymised extracts with invented names and realistic column conventions.

Run both. Same tool, no mapping screen, no configuration — the second file proves the column detection is pattern-based rather than hardcoded to one vendor.

The three prompts that do the work

Open the assistant, click + in the message box, choose 📊 Upload access data, and attach the file. Then run these three prompts in order. They are one-click suggestions in the interface, but here they are in full so you can adapt them to your own methodology.

PASS 1

Findings, not description

Turn computed exceptions into audit points with a control objective and a next step.

PASS 2

Show me the records

Quote the exact rows and field values behind every exception.

PASS 3

Argue against yourself

Hunt the false positives and name the findings it is least confident about.

Prompt 1 — findings, not a description

You are an IT auditor reviewing this ERP access extract. Using ONLY the computed findings below, produce actionable audit findings — not a description of the data. For each: what the exception is, which control objective it bears on, why it matters, and what you would do next. Group by significance. If a computed finding does not support an audit point, say so rather than inflating it.

Note the last sentence. Most AI audit demos reward the model for producing a long list. This one gives it explicit permission to say “this is not a finding” — which is the difference between a work product and a word count.

Prompt 2 — show me the records

For every exception in the analysis below, show the exact record(s) that support it and explain why each is an exception. Quote the row references and field values exactly as given — do not paraphrase a row, invent a row number, or cite a record that is not listed. Where a finding lists more rows than are shown, say how many were not listed.

This is the prompt that makes the output defensible. A finding without a row reference is an opinion. A finding that reads row 24 · BNAME=SAP* · AGR_NAME=SAP_ALL is evidence you can paste into a workpaper.

The detection itself is deterministic code, not model output. Row numbers, counts and field values are computed first, then handed to the model as grounded facts it is instructed not to depart from. The model writes the narrative. It does not invent the row references.

Prompt 3 — now argue against yourself

Re-perform this analysis independently and adversarially. Your job now is to find the FALSE POSITIVES. For each finding, ask what innocent explanation would produce the same pattern, and use the stated false-positive modes. Then tell the reader plainly which findings you are LEAST confident about and why, and which you would still stand behind. Do not simply repeat your earlier answer — disagree with it where the evidence is weak.

This is the prompt that matters. And the sample file is rigged to test it.

The trap in the sample file

Run prompt 1 on the SAP file and you get 25 findings. Eight of them say “user ID appears on 2 rows.”

Those eight are wrong.

It is a role-assignment extract — one row per user per role. A user with two roles produces two rows. That is not a duplicate account; that is the file format working correctly. Any tool that reports it as an exception is generating work for you, not saving it.

So when you run prompt 3, watch what happens to those eight. If they come back restated as real exceptions, the tool has failed and you should close the tab. If they come back identified as an artefact of the extract’s grain — with the reasoning spelled out — then the third pass is doing the thing that separates useful automation from an exception factory.

Every detector in the engine declares, in code, what it is known to get wrong. Duplicate detection declares row-per-role grain. Dormancy declares seasonal roles and approved service accounts. Generic-account detection declares legitimate naming standards. The third pass reads those declarations. It is not the model being modest — it is the engine being honest about its own precision.

While you are in there, look for J.SMITH and JSMITH. Same name, two accounts, and one of them holds Z_ADMIN_SECURITY. That one is real.

What a finding needs to survive review

A finding you can hand to a control owner has four parts. Judge any tool — this one included — on whether it produces all four.

PartWhat it answersWhere it comes from here
The exceptionWhat is wrong, in one sentenceDeterministic detector
The evidenceWhich rows, which field valuesComputed row citations
The control objectiveWhich workpaper it lands inModel narrative, pass 1
The confidenceWhat would make this wrongDeclared false-positive modes, pass 3

Two out of four is a spreadsheet. Four out of four is an audit finding.

Where this fits in your SOX calendar

The realistic use is not replacing your access review. It is the first pass:

  • Scoping — run it on the raw extract before you build the review population, so you know what you are dealing with.
  • Interim testing — catch the dormant and terminated-but-active accounts early enough that remediation lands inside the period.
  • Reviewing someone else’s work — run the third prompt against a completed access review and see which conclusions survive.
  • Training — hand a new joiner the sample file and the three prompts. They will learn more about access review judgement in twenty minutes than from a methodology deck.

Frequently asked questions

No. The file is parsed in browser memory and the model runs on your own machine. There is no upload endpoint, no API key and no server-side inference — so there is nowhere for the file to be sent.

Column detection is pattern-based rather than vendor-locked. It has been exercised against SAP, Oracle EBS, Oracle Fusion, Dynamics 365 F&O, NetSuite, Infor LN, Workday, PeopleSoft, Salesforce and ServiceNow header conventions. If a field cannot be resolved it tells you which one rather than guessing.

Detection is deterministic code, not model output. Row numbers, counts and field values are computed first, then supplied to the model as grounded facts it is instructed not to depart from. The model writes the narrative; it does not generate the evidence.

CSV and Excel for the access extract. PDF, Word and plain text can be attached as supporting context through the 📄 Add context option in the same + menu.

No, and be suspicious of anything that claims to be. It is an analysis pass over an extract you already have — useful for scoping, interim testing and reviewing completed work, not a provisioning or certification platform.

The deterministic analysis runs anywhere. The narrative passes use the on-device model, which is faster with WebGPU but has a fallback path for machines without it.

Try it on the sample file first

Ten minutes, no signup, no data leaving your laptop. Download the extract, click +, and run the three prompts.

If the third pass does not catch the eight false positives, tell us. That is a more useful piece of feedback than a five-star review, and it is the number we care about most.

All names, user IDs, roles and departments in the sample files are invented. Any resemblance to a real user account is coincidental.