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.
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.
- ⬇ sample-sap-user-access-extract.csv
— SAP-shaped: 50 rows, 42 users, headers
BNAME,USTYP,TRDAT,GLTGB,AGR_NAME. - ⬇ sample-oracle-ebs-user-access-extract.csv
— Oracle EBS-shaped: 22 rows, 18 users, headers
USER_NAME,RESPONSIBILITY_NAME,END_DATE.
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.
Findings, not description
Turn computed exceptions into audit points with a control objective and a next step.
Show me the records
Quote the exact rows and field values behind every exception.
Argue against yourself
Hunt the false positives and name the findings it is least confident about.
Prompt 1 — findings, not a description
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
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
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.
| Part | What it answers | Where it comes from here |
|---|---|---|
| The exception | What is wrong, in one sentence | Deterministic detector |
| The evidence | Which rows, which field values | Computed row citations |
| The control objective | Which workpaper it lands in | Model narrative, pass 1 |
| The confidence | What would make this wrong | Declared 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.