How to run a segregation of duties check

SoD violations hide between systems, not inside them. How to write conflict rules that survive contact with a real org chart, and why the compensating control is the answer more often than removal.

6 min read · Last updated September 2026

This is you if

  • One person can raise a vendor and approve a payment to it
  • Your SoD rules live inside single apps and stop at their edges

Segregation of duties fails between systems, not inside them. Every finance platform can stop one person creating and approving a payment within its own walls. None can see that the same person administers the bank connection. Or that they can grant themselves the approver role upstream and hand it back an hour later.

So a company can pass every in-app SoD control it has and still have somebody who could run a payment end to end. The conflict isn't in any single system's report, because no single system holds both halves.

What a real conflict looks like

Three shapes, and only the first is the one most tools check.

Inside one app. Create a vendor and approve a payment to it, both in the same ERP. Real, and largely solved: the app can see both permissions and refuse the combination.

Across two apps. Raise the purchase order in your procurement tool and approve the payment in your accounting system. Two systems, two clean reports, one person who can do both. This is where most genuine exposure sits, and nothing that lives inside either app will find it.

Through the access layer itself. Somebody who can grant themselves a role, use it and remove it. This defeats every rule you wrote, because at the moment of the transaction the access looked legitimate. The only evidence is in the grant log, and the only way to catch it is to treat self-grant as a conflict in its own right.

Rank those by how much money could move and the middle one wins. Inconveniently, it's also the one that needs a view across systems most companies don't have.

What it takes

Four things, and the first is where programmes die.

1. A small rule set, written as transactions. Five to ten rules, each phrased as a pair of things one person shouldn't both be able to do. Not entitlements, transactions. "Can create a vendor and can approve a payment" is a rule. "Has NetSuite admin" is not.

2. Entitlement data from every system in the rule. A cross-app rule needs both halves at the same time, at the grain the rule names. This is the plumbing, and it's why SoD is usually the last thing a governance programme gets to.

3. A named owner for what the conflicts are. Finance or internal audit, not IT. A rule set written by IT alone drifts toward describing permissions, because that's what IT can see, and permissions aren't where fraud happens.

4. A route for the unavoidable conflict. In a small finance team some conflicts genuinely can't be split. That has to end in a documented compensating control rather than an exception with no expiry, because the second one is what an auditor finds.

Iden's Action Center showing 23 pending findings, with categories down the left (orphaned accounts 10, overprovisioned 7, third-party 4, zombie 1, new privileged 1, and two SOD checks at zero) and the orphaned accounts listed on the right, each showing how long ago the person was offboarded and how many apps they still hold.

Findings as an inbox. Categories and counts on the left, the queue on the right, and two categories already at zero. Angelina was offboarded three days ago and still holds six apps.

Two of the categories on the left there are SoD checks sitting at zero. That's the state worth aiming at: not zero because nobody looked, zero because the rule ran and found nothing.

Patterns that break it

  1. Starting with 200 rules. A vendor library produces thousands of findings in week one, nobody triages them, and the programme is dead by week three. Five real rules beat 200 imported ones.
  2. Rules written as entitlements. "Has admin in the ERP" flags half the finance team and tells you nothing about what they could actually do.
  3. Checking inside apps only. Passes the easy third of the problem and misses the expensive third.
  4. Ignoring self-grant. An administrator who can grant, act and revoke has beaten your rule set, and this is the conflict least likely to be in the rule set.
  5. Treating every conflict as a removal. Some can't be removed. A conflict with a documented compensating control is a passing finding; the same conflict undocumented is a failing one, and the difference is paperwork rather than access.
  6. Running it annually. Reorganisations create SoD violations faster than hiring does, and a yearly check means living with them for up to a year.

Doing this without a tool

Feasible for a small rule set, and the rule-writing half is free and useful regardless.

  1. Write 5 rules with finance, in transaction language. An hour in a room. This is the artefact that matters and it survives whatever you decide about tooling.
  2. For each rule, name the two systems and the exact entitlement in each that confers the capability. This is where a rule that sounded clear turns out to be ambiguous.
  3. Export entitlements from those systems at that grain. Not group membership. The specific role or permission the rule names.
  4. Join by person and look for anyone holding both halves. A spreadsheet handles 5 rules across 6 systems without complaint.
  5. Triage every hit into three buckets: remove, compensating control, or false positive because the rule was wrong. The third bucket is large on the first run and that's fine.
  6. Record the decision per hit, with a date. This record is what the auditor tests, more than the detection is.

Budget a day for the first run and half a day per quarter after. The unglamorous truth is that step 5's third bucket is most of the first run, and the rules only become useful once you've been through it once.

What still needs a person

The rule set. What constitutes a toxic combination in your business is a judgment about your business, and no library knows your org chart.

The compensating control. Deciding a conflict stays and gets monitored instead of split is a risk decision. It belongs to whoever carries the risk, not whoever found it.

And the reorganisation review. When responsibilities get re-cut, somebody who understands the new shape has to re-read the rules against it. This is the moment SoD breaks most often and it never announces itself.

Where Iden fits

Steps 3 and 4 above, without the export and the join.

Entitlements from every connected system sit in one place at the grain the rule names, so a cross-app rule is a query rather than a project. That's the whole difference: the reason most companies check SoD inside apps only is that checking across them required assembling data nobody had assembled.

Detected conflicts arrive as findings with a state. A compensating control is recorded against the conflict, not in a separate document somebody finds 18 months later. And because self-grant runs through the same access layer, the grant-use-revoke pattern is visible as a sequence rather than as three unrelated log lines.

Frequently asked questions

The principle that no single person should be able to complete a sensitive transaction end to end. Somebody raises the vendor, somebody else approves the payment. The control is the split, not the approval, which is why an approval workflow with one person on both ends isn't segregation of duties.

CC6.3 names it directly. The criterion covers authorising, modifying and removing access 'giving consideration to the concepts of least privilege and segregation of duties', and one of its points of focus is that role-based access control is used to support segregation of incompatible functions. An auditor will ask for conflicts detected and what you did about them.

Because most real conflicts span systems. NetSuite can stop one person creating and approving a payment inside NetSuite. It can't see that the same person also administers the bank connection, or that they can grant themselves the approver role in your identity provider and remove it afterwards.

Between 5 and 10. Every SoD programme that starts with a vendor's library of 200 rules produces thousands of findings in week one and gets abandoned in week three. Start with the conflicts a fraud would actually use and add rules when an incident or an auditor names one.

Document a compensating control and monitor it. In a 40-person finance function some conflicts genuinely can't be split, and pretending otherwise produces either a false clean report or a resignation. Auditors accept a documented, monitored compensating control. They don't accept an undetected conflict.

Finance or internal audit owns what the conflicts are. IT owns detecting them. That split matters: a rule set written by IT alone tends to describe entitlements rather than transactions, and it misses the conflicts that actually matter.

Continuously if you can, quarterly at minimum, and always after a reorganisation. Reorganisations create more SoD violations than hiring does, because access follows people and responsibilities get re-cut around them.

It's the conflict people forget. An administrator who can grant themselves a role, use it, and remove it again has defeated every SoD rule you wrote, and the log is the only thing standing in the way. Any serious rule set includes self-grant as a conflict.