Segregation of Duties (SoD) in Okta

Segregation of Duties (SoD) in Okta

A friendly, ground-up guide to making sure no single person holds powers that are dangerous together. You will learn what SoD means, how to find and rank risky combinations, where Okta can help prevent, detect, and manage them, and how to run the whole control calmly and with good evidence.

Picture a small shop with a cash drawer. If one person orders the stock, receives the delivery, records it in the books, pays the supplier, and counts the cash at night, that person could make a mistake and never notice, or take money and never be caught. Nobody else ever looks at their work. Now imagine the same shop where one person orders, another receives, a third pays, and the owner checks the books each week. A single slip or a single dishonest act is much more likely to be noticed. The shop has not become more complicated for customers. It has simply divided the dangerous powers between different people.

That division is called segregation of duties, often shortened to SoD. In some places it is called separation of duties, and the idea is the same. It is one of the oldest and most trusted controls in business, and it matters just as much in software as in a shop. In a company with hundreds of applications and thousands of people, it is easy for one person to end up holding a pair of powers that should never meet. They get there not by plan but by accident: a request here, a job change there, a favour for a colleague.

Okta sits at the centre of who can reach what, which makes it a natural place to look for these risky combinations, stop them from forming, and prove to auditors that you are watching. This guide explains the whole subject from scratch. You do not need any prior knowledge. Every new term is explained when it first appears, and every big idea comes with an everyday comparison. No code is used anywhere.

!
Before you start

Okta changes its products often. Governance features, including the ability to define and check conflicts between permissions, are usually offered as a separate product or add-on, and names, screens, supported applications, and limits can differ by license, release, and region. Treat this guide as a map of the ideas, and confirm exact capabilities in your own Okta Admin Console and the official Okta documentation before you design or change anything in production. This guide is also not legal or audit advice. Your own risk, compliance, and audit teams decide which rules you must follow.

1Why Segregation of Duties Matters

Most harm in organizations does not come from clever outsiders. It comes from ordinary mistakes and occasional bad choices by people with too much unchecked power.

Every business process has steps where something valuable can go wrong: money moves, records change, access is granted, code goes live. If one person controls every step of such a process, nothing stands between a mistake or a bad intention and its result. Segregation of duties puts a second pair of eyes into the process by design. It does not assume that people are dishonest. It assumes that people are human, that mistakes happen, and that temptation is real.

Three kinds of harm it prevents

  • Fraud: a person creates a fake supplier and pays it, or approves their own expenses.
  • Error: a person makes an honest slip, such as a wrong amount, and nobody reviews it before it takes effect.
  • Concealment: a person changes something and also controls the record of the change, so the trail disappears.

Why software makes it harder to see

In a shop, you can see who stands at the till. In software, powers are hidden inside roles and permissions spread across many systems. A person may hold “create vendor” in one system and “release payment” in another. Neither system sees the problem, because each one only knows about its own permissions. Only a view across systems reveals the risky pair. That cross-system view is exactly what an identity platform can provide.

Why auditors care

Financial reporting rules, security standards, and many industry regulations expect companies to show that dangerous powers are separated, or that when they cannot be, extra checks are in place. Failing to show this is a common audit finding. It is often easy to fix once discovered, but painful to discover at the last minute.

Why it also helps security

An attacker who steals one account gets only the powers of that account. If that account holds a dangerous pair, the attacker can complete a whole harmful process alone. If powers are separated, the attacker needs two accounts, which is harder and noisier. Segregation of duties is therefore a security control as well as a financial one.

Everyday analogy

Think of the two-key rule for a bank vault: one key held by the manager, another by a senior clerk. The vault will not open unless both turn their keys together. Neither person is distrusted. The rule simply makes sure that no single mistake, bribe, or stolen key can empty the vault.

2+
people needed for a risky process
0
single points of unchecked power
1
clear record of who did which step
i
Beginner tip

When you hear “segregation of duties”, think “never both, never alone”. Some pairs of powers must never be held by one person, and some powerful acts must never be done without a second person.

2Core Concepts You Need First

A small set of words appears again and again in this topic. Learn them once and the rest reads easily.

Duty and permission

A duty is a responsibility in a business process, such as “approve payments”. A permission is the technical right in a system that lets someone carry out the duty. SoD is stated in terms of duties, but enforced through permissions.

Conflict

A conflict is a pair or group of duties that should not be held by one person. The standard example is creating and approving the same kind of payment. A conflict is a statement about danger, not about any particular person.

Toxic combination

A toxic combination is the same idea seen from the person’s side: a particular set of permissions that, held together, create a serious risk. Some teams use this phrase for conflicts of the highest severity.

Violation

A violation happens when a specific person actually holds the conflicting set. A conflict rule is the definition. A violation is a real person who breaks it.

Preventive and detective controls

A preventive control stops a violation from forming, such as blocking a request that would create it. A detective control finds violations that already exist, such as a regular report. Strong programs use both, because access can also change inside applications without going through the front door.

Maker-checker

Maker-checker, also called the four-eyes principle, means one person prepares or makes a change and a different person checks and approves it. The maker cannot be the checker.

Dual control

Dual control means an action needs two people acting together, like the two-key vault. It is a stronger form of maker-checker for the highest-risk acts.

Compensating control

Sometimes a conflict cannot be removed, for example in a small team with too few people. A compensating control is an extra safeguard that reduces the risk, such as a manager reviewing every transaction the person makes, or enhanced monitoring with alerts.

Exception and mitigation

An exception is a recorded, approved decision to allow a violation for a limited time and reason. Mitigation is the set of extra safeguards applied while the exception lasts. Exceptions without mitigation, or without an end date, are just violations with paperwork.

Inherent and residual risk

Inherent risk is the danger before any safeguards. Residual risk is what remains after safeguards. Good SoD work lowers residual risk to a level the business accepts on purpose.

TermPlain meaningEveryday comparison
DutyA responsibility in a processBeing the person who pays the bills
ConflictTwo duties that should not meetCook and food inspector in one person
ViolationA real person who holds bothThe cook who is also the inspector
Preventive controlStops it from formingA gate that will not open for both roles
Detective controlFinds it afterwardsA yearly stock count
Maker-checkerOne makes, another checksAuthor and editor
Compensating controlExtra safeguard when separation is impossibleA manager countersigns every cheque
ExceptionApproved, time-limited violationA signed permission slip
Everyday analogy

Think of a sports match. The player scores, the referee decides whether it counts, and the scorekeeper writes it down. If the player were also the referee and the scorekeeper, nobody would trust the result. The separation is what makes the score believable.

3Where SoD Lives in Okta

SoD in an Okta environment shows up in three different places. Mixing them up is the most common source of confusion, so it helps to separate them early.

Place one: business permissions inside applications

This is the classic case. Applications such as finance, procurement, human resources, and customer systems have permissions that map to business duties. Conflicts here are between those permissions, for example creating and approving payments. Okta’s governance features aim to describe these permissions, learn who holds them, and help check for conflicts. This is where most audit attention goes.

Place two: administrative power over Okta itself

Okta has its own administrators, who can create users, change policies, assign applications, and reset sign-in factors. Some of these powers should not be combined. For example, a person who can edit sign-in policies and also reset anyone’s authentication factors could weaken the rules and then walk through them. Okta offers a range of administrator roles, and in many releases the ability to build custom roles and limit them to chosen sets of resources. Using these to split administrative powers is SoD applied to the identity platform itself.

Place three: the governance process

The process that grants access can itself be abused. A person must not approve their own access request, review their own access, or be the only person able to change the rules that decide who gets what. Applying SoD to requesting, approving, reviewing, and rule changes protects the control system from being bypassed.

Business

Application permissions

Create and approve payments, change and audit records, develop and release code.

Platform

Okta administration

Edit policies, reset factors, assign apps, manage administrators.

Process

Governance workflow

Request, approve, review, and change the rules.

flowchart TD
    SOD["Segregation of duties"] --> BIZ["Business permissions
inside applications"] SOD --> ADM["Administrative power
over Okta itself"] SOD --> PRC["Governance process
request, approve, review, change rules"] BIZ --> E1["Example: create vs approve payment"] ADM --> E2["Example: edit policy vs reset factors"] PRC --> E3["Example: requester is not the approver"]
Figure 1 · The three places where SoD applies in an Okta environment
Everyday analogy

Think of a school. The cashier and the stock keeper must be different people (business duties). The caretaker who holds the master keys should not also be the one who checks the key register (platform power). And a teacher must never mark their own exam papers (process). Same principle, three different rooms.

i
Key idea

When someone says “we have an SoD issue”, first ask which of the three places they mean. The tools and owners are different for each.

4Kinds of Conflicts You Will Meet

Not all conflicts look alike. Knowing the shapes helps you spot them and choose the right control.

Conflicts inside one application

The simplest kind. One application offers two permissions that conflict, such as “create purchase order” and “approve purchase order”. The application may even warn about it. Still, because administrators often grant roles carelessly, these conflicts occur regularly.

Conflicts across applications

The harder and more dangerous kind. A person holds “create vendor” in a procurement system and “release payment” in a finance system. No single application sees the pair. Only a cross-system view can. This is where an identity platform adds the most value.

Conflicts through groups and roles

A person may hold a conflict without anyone choosing it directly. Being in two groups, each of which includes one of the conflicting permissions, creates the pair indirectly. Detection must look at what a person effectively holds, not only at what was explicitly requested.

Conflicts over time

A person may hold one power now and be granted the second months later, when nobody remembers the first. Or they may use one power in the morning and be handed the other temporarily in the afternoon. Good controls consider the whole history and the duration of temporary grants.

Conflicts in process roles

Requesting, approving, and reviewing roles can overlap. A manager who requests access for a team member and also approves it, or an owner who reviews their own permission, breaks the idea of independent checking.

Conflicts in administration

An administrator who can both change the rules and grant themselves exemptions from them holds a conflict in the control system itself.

Conflicts that involve non-human accounts

Service accounts and automation also hold powers. A single automated account that can both create and approve transactions is a conflict, even though no human sits at a keyboard. Owners of such accounts deserve the same attention.

ShapeExampleWhy hard to see
Inside one appCreate and approve purchase orderUsually visible in the app, but often ignored
Across appsCreate vendor and release paymentNo single app sees both
Through groupsTwo groups each carry one powerNobody chose the pair directly
Over timeSecond power added a year laterThe first power is forgotten
In the processRequester approves own requestLooks like normal workflow
In administrationEdit rules and grant own exemptionPowers sit with trusted admins
Service accountsOne bot creates and approvesNo human owner in view
flowchart LR
    P["One person"] --> A1["Procurement app
create vendor"] P --> A2["Finance app
release payment"] A1 -.->|"No single app sees both"| X["Hidden conflict"] A2 -.-> X X --> ID["Identity platform
cross-system view finds it"]
Figure 2 · A cross-application conflict that only a central view reveals
Everyday analogy

Think of two guards at two different gates of a castle, each with a good lock. If the same person holds the key to both gates, it does not matter that each lock is good. Only someone looking at the whole key ring notices.

5Building a Conflict Matrix

Before software can check anything, people must decide what counts as a conflict. The tool for that is the conflict matrix.

What a matrix is

A conflict matrix is a grid. Down the side and across the top you list duties or permissions. In each cell you note whether the pair is allowed, forbidden, or allowed only with extra safeguards. It is a plain table that makes the company’s decisions visible in one place.

How to build one

  • Start from processes, not permissions. Walk through important business processes such as buying, paying, hiring, and releasing software. Mark the steps where value moves or records change.
  • Name the duties. Give each step a clear duty name, such as “create supplier”, “approve invoice”, or “release payment”.
  • Pair the dangerous ones. Ask for each pair: if one person held both, what is the worst that could happen, and how would we notice?
  • Rank them. Mark each pair high, medium, or low severity.
  • Map duties to permissions. For each application, list which permissions give each duty. This step is detailed and needs application owners.
  • Agree with the business. Have process owners, risk, and audit confirm the matrix.

Keep it small at first

A matrix with hundreds of cells is impossible to maintain and fills reports with noise. Start with the handful of highest-severity pairs. A short list that is enforced beats a long one that is ignored. Expand gradually as you learn.

Decide the response for each pair

Each pair should have an agreed response: block entirely, allow with an exception and safeguards, or allow with monitoring. Writing this down now saves arguments later.

Duty ADuty BSeverityAgreed response
Create supplierRelease paymentHighBlock; exception only with senior approval and monitoring
Create invoiceApprove invoiceHighBlock
Request accessApprove accessHighBlock always
Change customer dataAudit customer dataMediumAllow with independent review
Develop codeRelease to productionMediumAllow only with automated checks and second reviewer
Edit sign-in policyReset any user’s factorsHighSplit between administrators
View reportsEdit reportsLowAllow
flowchart TD
    PR["Map business processes"] --> DU["Name the duties"]
    DU --> PA["Pair duties that are dangerous together"]
    PA --> RK["Rank by severity"]
    RK --> MP["Map duties to application permissions"]
    MP --> AG["Agree with process owners, risk, and audit"]
    AG --> LIB["Publish as the conflict library"]
    
Figure 3 · From business processes to a published conflict library
Everyday analogy

Think of a school timetable grid, where you mark which teachers cannot be in two rooms at once. You do not list every impossible combination in the universe. You mark the ones that matter and check them each term.

i
Practical advice

Write each conflict in a sentence a manager understands, such as “No one may both set up a new supplier and release payments to that supplier”. If you cannot say it plainly, the rule is probably unclear.

6SoD, Least Privilege, Roles, and Attributes Compared

SoD is often confused with its neighbours. Each answers a different question, and they work best together.

Least privilege

Least privilege says each person should hold only the powers needed for their job. It limits how much any one person can do. SoD limits which powers can meet in one person. A person could hold few powers (good least privilege) and still hold a dangerous pair (poor SoD), or hold many powers that are all safe together.

Role-based access

Role-based access groups permissions into roles that match jobs. It makes access easier to manage, but a badly designed role can itself contain a conflict. SoD checks should therefore be applied when roles are designed, not only to individuals.

Attribute-based access

Attribute-based access decides using facts such as department, location, or time. It can express rules like “only managers in this region”. It does not by itself notice that a person holds two conflicting powers across systems.

Approval workflows

Approval steps add a human decision to granting access. They help, but an approver may not notice a conflict unless the system points it out. Approvals should be supported by automatic conflict checks.

Reviews and certifications

Periodic reviews catch drift, but a reviewer looking at one permission at a time may not see a conflict that involves another. Reviews should show conflict flags.

IdeaQuestion it answersWhat it misses on its own
Least privilegeDoes this person hold more than they need?Dangerous pairs among needed powers
Segregation of dutiesDo any powers held together create danger?Excess access that is safe but unneeded
Role-based accessIs access organized by job?Conflicts hidden inside roles
Attribute-based accessDo the facts allow this?Cross-system combinations
Approval workflowDid a person agree?Conflicts the approver cannot see
Access reviewIs it still needed?Pairs spread across items
flowchart LR
    LP["Least privilege
hold only what you need"] --> SAFE["Safer access"] SOD["Segregation of duties
no dangerous pairs"] --> SAFE RBAC["Roles and bundles
organized access"] --> SAFE REV["Reviews
catch drift"] --> SAFE APP["Approvals
human judgment"] --> SAFE
Figure 4 · Several controls working together, each covering what the others miss
Everyday analogy

Think of safety in a laboratory. Wearing goggles (least privilege) protects your eyes. Not letting the same person mix the chemicals and sign off the safety check (SoD) protects the process. A well-run lab uses both, plus a supervisor who walks around (reviews).

i
Remember

None of these ideas replaces the others. SoD is the one that looks specifically at combinations.

7Preventing Conflicts at Request Time

The cheapest conflict is the one that never forms. Checking at the moment of a request stops most problems at the door.

The idea

When a person asks for a permission or bundle, the system looks at what they already hold, adds what they are asking for, and compares the result with the conflict library. If a forbidden pair would appear, the request is stopped or flagged before an approver is even bothered. The person is told plainly why, and what they might do instead.

What the check must consider

  • Direct holdings: permissions the person holds explicitly.
  • Indirect holdings: permissions that come through groups, roles, and bundles.
  • Pending requests: requests already in progress, so two requests cannot together slip past the check.
  • Temporary grants: access that is time-limited but still active.
  • Bundles: a bundle may contain several permissions, and the whole set must be checked.

Clear messages

A block that says only “request denied” frustrates people. A good message says which two duties conflict, why it matters in business language, and who to talk to if there is a real need. Clear messages reduce support calls and teach people the rules.

Soft and hard stops

A hard stop blocks the request completely. Use it for the highest-severity pairs. A soft stop warns the requester and the approvers, and perhaps requires an extra approval, but does not forbid the request. Use it for medium-severity pairs where there are legitimate reasons. Choose the type for each pair on purpose, and write it in the matrix.

Closing the side doors

Prevention at request time works only for access that passes through the request process. Other routes include access granted directly by application administrators, access created through group rules, and access added by automation. Each side door needs its own control, or the front-door check is easy to bypass.

sequenceDiagram
    participant P as Person
    participant O as Okta request process
    participant L as Conflict library
    participant A as Approver
    P->>O: Ask for "Release payment"
    O->>O: Gather current and pending access
    O->>L: Would this create a conflict?
    L-->>O: Yes, high severity with "Create supplier"
    O-->>P: Blocked, with a plain explanation
    P->>O: Ask for "View payment reports" instead
    O->>L: Check again
    L-->>O: No conflict
    O->>A: Send for normal approval
    
Figure 5 · A request is checked against the conflict library before any approver sees it
Everyday analogy

Think of a library desk that checks your card before lending a book. If you already have the maximum allowed, the desk tells you at once instead of letting you walk to the shelves and find out at the exit. Early, clear checks save everyone’s time.

!
Do not forget the side doors

A person who cannot request a conflicting permission might still be given it by an application administrator. Detection (next chapter) is the safety net for exactly this.

8Detecting Conflicts That Already Exist

Prevention is never complete. Detection finds what slipped through, and what existed before the rules did.

Why violations exist

Old access predates your rules. Application administrators grant access directly. Roles change content over time. People move jobs and keep earlier powers. A system that checks only new requests will never find any of these.

The detection loop

Detection has four steps. First, collect what each person actually holds in each application. This depends on how well the application is connected, and may involve importing the current state. Second, compare the collected access with the conflict library. Third, produce a list of violations, ranked by severity. Fourth, send each violation to someone who can resolve it.

Frequency

Run detection often enough that a new violation does not live long. For high-severity pairs, daily or event-driven checks are reasonable. For medium pairs, weekly or monthly may be enough. Also run detection before every access review, so reviewers see the flags.

Reading the results

A raw list of violations can be overwhelming. Group them by pair, by application, by department, and by age. Patterns appear: one badly designed role may cause hundreds of violations. Fixing that one role is far more effective than chasing each person.

Resolving a violation

For each violation, choose one of three paths. Remove one of the powers. Reassign the duty to a different person. Or record an exception with safeguards. Never leave a violation unassigned and unexplained.

Tracking progress

Count open violations by severity and watch the trend. A steady decline shows the control is working. A sudden rise points to a new cause, such as a role change or a faulty import.

flowchart TD
    COL["Collect actual access from applications"] --> CMP["Compare with the conflict library"]
    CMP --> LST["List violations ranked by severity"]
    LST --> GRP["Group by pair, application, role, age"]
    GRP --> ASG["Assign each violation to an owner"]
    ASG --> RES{"Resolution"}
    RES -->|"Remove a power"| R1["Access removed"]
    RES -->|"Move the duty"| R2["Duty reassigned"]
    RES -->|"Accept with safeguards"| R3["Exception recorded"]
    R1 --> TRK["Track open count and trend"]
    R2 --> TRK
    R3 --> TRK
    
Figure 6 · The detection loop from collection to tracked resolution
Everyday analogy

Think of a yearly health check. A good diet and exercise (prevention) help, but you still go to the doctor, because some problems show no symptoms. Detection is the check-up for your access.

i
Fix the cause, not the symptom

When hundreds of people share one violation, look for the single role, group, or rule that created it. One fix can clear them all.

9Exceptions and Compensating Controls

Real organizations sometimes cannot separate every duty. The honest answer is a managed exception, not a hidden violation.

When exceptions are reasonable

A small branch office may have only two staff. A temporary absence may leave one person covering both roles. A system migration may need a short period of wide access. These are real situations. Pretending they do not exist pushes people to share passwords or use unofficial workarounds.

What a good exception contains

  • The pair: which conflict is being accepted.
  • The person: who holds it.
  • The reason: why separation is not possible now.
  • The approver: a senior person who accepts the risk, not the person’s own manager alone.
  • The safeguards: what extra checks apply while the exception lasts.
  • The end date: when it expires or must be renewed.

Examples of compensating controls

  • A second person reviews every transaction the individual performs, within a set time.
  • Transaction limits cap the amount the person can move alone.
  • Alerts notify a manager when the person uses both powers in the same period.
  • Regular sampling by internal audit checks the person’s work.
  • Extra logging records every action in detail and keeps it safe from editing.

Reviewing exceptions

Exceptions must be visible and reviewed. Report on how many exist, how old they are, and whether their safeguards are actually working. An exception that nobody reviews has quietly become permanent.

Ending exceptions

When the end date arrives, the exception either ends or is renewed with a fresh decision. Renewal should require a new reason. If the same exception is renewed for years, the underlying problem is organizational, and should be fixed by hiring, restructuring, or redesigning the process.

SituationReasonable responseSafeguard
Two-person branchTime-limited exceptionRegional manager reviews all transactions weekly
Holiday coverShort grant to a substituteEnds on return date; alerts on use
Migration projectWide access for a fixed windowLogged and reviewed after cutover
Specialist roleDocumented exceptionLimits on amounts and independent sampling
Permanent needRedesign the processSplit the duty between people or add automation
stateDiagram-v2
    [*] --> Detected
    Detected --> Removed : "Power removed"
    Detected --> Proposed : "Exception requested"
    Proposed --> Approved : "Senior approver accepts risk"
    Proposed --> Rejected : "Not accepted"
    Rejected --> Removed
    Approved --> Monitored : "Safeguards active"
    Monitored --> Renewed : "Fresh decision"
    Monitored --> Expired : "End date reached"
    Renewed --> Monitored
    Expired --> Removed
    Removed --> [*]
    
Figure 7 · The life of an SoD exception from detection to removal
Everyday analogy

Think of a hospital that is short of staff, so a nurse covers two roles for a week. The hospital does not hide it. It writes it down, has a senior nurse double-check the work, and ends the arrangement when staff return. The arrangement is open, limited, and watched.

!
Paper exceptions

An exception with no safeguards and no end date is only a violation with a signature. Auditors treat it that way.

10Access Reviews That See Conflicts

A review that looks at one permission at a time cannot see pairs. SoD-aware reviews show the whole picture.

The weakness of plain reviews

A reviewer sees a line saying “Release payments” for a person and asks, does this person need it? The honest answer may be yes. What the reviewer does not see is that the same person also holds “Create supplier” in another system. Without this knowledge, the reviewer approves a dangerous combination one innocent line at a time.

Flagging conflicts in the review

The review screen should flag any line that is part of a conflict, state the other half of the pair, and show its severity. Reviewers can then keep one and remove the other, or request an exception. Making the flag visible at the point of decision is the most effective improvement you can make to a review.

Who reviews

Managers know what their people do. Owners of each permission know what it allows. A conflict often needs both: the manager chooses which duty the person truly needs, and the owner confirms the permission. Nobody should review their own access or the access of the person who approves their work.

Keeping reviews honest

Measure how reviewers handle flagged items. If flagged lines are approved without comment in seconds, the control is not working. Provide short guidance on what a good decision looks like, and follow up on repeated rubber-stamping.

Closing the loop

When a reviewer removes a power because of a conflict, the removal must reach the application, and the result should be checked. Records of the flag, the decision, and the confirmation form the evidence auditors look for.

Show

Flag the pair

Mark every line that is part of a conflict and name the other half.

Rank

Show severity

High pairs first, low pairs last.

Choose

Keep one, remove one

Or request a recorded exception.

Check

Independent reviewers

No one reviews their own access.

Measure

Watch behavior

Track speed and removal rates for flagged items.

Verify

Confirm removal

Import current access and compare.

flowchart TD
    CAM["Review campaign starts"] --> DET["Run conflict detection first"]
    DET --> SCR["Reviewer sees items with conflict flags"]
    SCR --> DEC{"Decision on flagged item"}
    DEC -->|"Remove one power"| REM["Okta removes access in the application"]
    DEC -->|"Keep with exception"| EXC["Exception request with safeguards"]
    DEC -->|"No decision by deadline"| ESC["Escalate to backup reviewer"]
    REM --> VER["Verify by importing current access"]
    EXC --> VER
    ESC --> SCR
    
Figure 8 · A review campaign that surfaces conflicts at the point of decision
Everyday analogy

Think of checking a shopping list line by line. Each item alone seems fine, but you do not notice you are buying three kinds of the same thing. A good list shows the duplicates in red. A good review shows the conflicts in red.

11Separating Powers Among Okta Administrators

The people who run Okta hold some of the most powerful access in the company. SoD applies to them too.

Why administrator power is special

An Okta administrator can create users, assign applications, change policies, reset sign-in factors, and read logs. Misused, these powers could let someone create a ghost account, weaken the rules, sign in as someone else, and cover their tracks. Because this power reaches every connected application, it deserves the strongest controls.

Use the roles Okta provides

Okta offers a range of administrator roles with different scopes, from a full super administrator down to narrower roles for help desk, application management, or reporting. In many releases you can also build custom roles from chosen permissions and limit them to selected sets of resources, such as particular groups or applications. Check your release for what is available. The aim is simple: give each administrator only the powers their job needs.

Keep super administrators few

Super administrator is the all-powerful role. Keep the number very small, use it rarely, and protect those accounts with the strongest sign-in. Day-to-day work should be done with narrower roles.

Pairs to keep apart

  • Edit sign-in policies and reset factors for any user: together they can weaken a rule and then bypass the stronger version.
  • Assign administrator roles and review administrator access: together they can make themselves powerful and approve it.
  • Change governance rules and receive access through those rules: together they can grant themselves access.
  • Manage integrations to applications and administer the log or reports: together they can change data and hide the evidence.

Scope matters as much as role

A help desk role limited to one department’s users is far safer than the same role over everyone. Where supported, restrict by resource, not only by role.

Emergency access

Keep a small number of emergency accounts for when normal administration fails. Store their credentials safely, protect them strongly, alert on any use, and review every use afterwards.

Administrative powerWho should hold itSafeguard
Super administratorVery few named peopleStrongest sign-in, rare use, alerts
Policy editingSecurity engineering teamChange review by a second person
Factor resetHelp desk, limited scopeVerification steps and logging
Application assignmentApplication owners or platform teamScoped to their applications
Governance rule changesGovernance teamDual approval and audit alerts
Log and report accessSecurity operations and auditRead-only; separate from those who change things
flowchart TD
    SA["Super administrator
very few, rarely used"] --> NR["Narrow roles for daily work"] NR --> PE["Policy editors"] NR --> HD["Help desk, limited scope"] NR --> AO["Application owners, own apps only"] NR --> GV["Governance team"] NR --> RO["Read-only audit and reporting"] PE -.->|"Must not also hold"| HD GV -.->|"Must not approve own access"| AO
Figure 9 · Splitting administrative power into narrow roles with deliberate gaps between them
Everyday analogy

Think of a building manager. The person who holds master keys should not also be the person who checks who borrowed the master keys. And the cleaner needs only the cleaning cupboard, not the whole building. Narrow keys, separated checks.

!
Guard the guards

Review administrator access more often than any other. A conflict among administrators can undermine every other control.

12Maker-Checker in the Governance Process Itself

A control system that one person can alter alone is only as strong as that person. Apply SoD to the governance process too.

Requester is not approver

No one should approve their own request. The system should enforce this automatically, including cases where someone is both the manager and the owner. When it happens, the approval should pass to someone else.

Approver is not reviewer of their own approval

If a manager approved an access grant, the later review of that access should go to someone else, such as the owner or the manager’s manager. Otherwise the same judgment is simply repeated.

Rule changes need a second person

Changes to conflict libraries, bundles, rules, and workflows alter who can get what. They should follow maker-checker: one person prepares the change, another approves it, and both are recorded. For the most sensitive rules, require approval from a risk or security representative.

Exemptions are decisions, not settings

Marking a person as exempt from a rule is an act of power. It should require approval from someone other than the person asking, and be recorded with a reason and an expiry.

Log protection

Those who can change access should not be able to alter the record of those changes. Keep logs in a protected place with read-only access for most people.

Covering absences safely

Delegation lets someone act for an absent approver. Delegates must not be the requester, and delegation should have an end date. Escalation should go to a person at the right level, never back to the requester.

1

Maker prepares

An administrator drafts a change to a rule, bundle, or exemption.

2

System checks

It confirms the maker is not also a checker and flags conflicts.

3

Checker reviews

A different person examines the effect and approves or rejects.

4

Change takes effect

The change is applied and the effect is verified.

5

Record kept

Who proposed, who approved, when, and why are saved in protected logs.

sequenceDiagram
    participant M as Maker administrator
    participant S as Governance system
    participant C as Checker
    participant L as Protected log
    M->>S: Propose change to a conflict rule
    S->>S: Is the maker also the checker?
    S->>C: Ask for review with impact summary
    C-->>S: Approve
    S->>S: Apply change
    S->>L: Record maker, checker, time, reason
    
Figure 10 · Maker-checker applied to a change in the governance system
Everyday analogy

Think of a newspaper. A reporter writes a story and an editor checks it before it prints. The editor does not write the same story, and the reporter cannot print without the editor. The newspaper is trustworthy because two minds touch every story.

i
Test it

Try to approve your own request in a test environment. If the system lets you, fix it before an auditor tries.

13Architecture and Components of an SoD Control

An SoD control is a small system of cooperating parts. Seeing each part makes the whole easy to reason about.

The people source

The human resources system and the Okta directory tell the control who exists, what job they hold, and who manages them. This fact base is needed to find owners, to route approvals, and to notice movers.

The permission catalog

The catalog lists the permissions of each connected application, with plain-language names, owners, and sensitivity. Without it, nobody can say what a line in a report means.

The duty map

The duty map connects permissions to business duties. Several permissions in different applications may all mean “release payment”. The map lets the control think in duties, which is how the business thinks.

The conflict library

The library holds the agreed pairs and groups of duties that conflict, with severity, the type of response (block, warn, or monitor), and the owner of each rule. It is the heart of the control.

The access picture

This is the current record of who holds what, gathered from Okta assignments and from applications. It must include indirect access through groups and bundles, and temporary grants.

The checking engine

The engine compares the access picture with the conflict library. It runs at request time to prevent conflicts, and on a schedule to detect them. It produces either a decision (allow, warn, block) or a list of violations.

The workflow engine

The workflow engine handles approvals, exceptions, reviews, reminders, and escalations. It makes sure each violation reaches a person who can resolve it.

The evidence store and reports

Everything that happens is recorded in a protected store, and reports turn the record into views for executives, owners, and auditors.

flowchart TD
    HR["People source
HR and directory"] --> PIC["Access picture
who holds what, direct and indirect"] APPS["Applications
current permissions"] --> PIC CAT["Permission catalog"] --> DUT["Duty map"] DUT --> LIB["Conflict library"] PIC --> ENG["Checking engine"] LIB --> ENG ENG -->|"Request time: allow, warn, block"| WF["Workflow engine"] ENG -->|"Scheduled: list of violations"| WF WF --> EVI["Evidence store and reports"]
Figure 11 · The main parts of an SoD control and how they connect
Facts

People and access picture

Who exists and what they really hold.

Meaning

Catalog and duty map

What each permission means in business terms.

Rules

Conflict library

Which combinations are dangerous and what to do.

Engine

Checks

Prevent at request time, detect on a schedule.

Process

Workflow

Approvals, exceptions, reminders.

Proof

Evidence

Protected records and reports.

Everyday analogy

Think of airport security. The passenger list is the people source, the rules about forbidden items are the conflict library, the scanner is the checking engine, the officers who decide what to do with a flagged bag are the workflow, and the incident log is the evidence. Remove any one part and the system fails.

14Mapping Permissions to Duties

The hardest and most valuable work in an SoD program is translating application permissions into business duties.

Why this step is hard

Applications name permissions in their own ways, often with codes. One application may have a role called “AP Clerk Level 2” that quietly includes five different abilities. Understanding what it truly allows requires talking to application owners and sometimes reading vendor documentation.

The process

  • List the permissions. For each in-scope application, list every role, permission, and group that matters.
  • Describe in plain words. Write what each lets a person do. If the owner cannot say, investigate.
  • Assign duties. Tag each permission with one or more duty names from your shared vocabulary.
  • Confirm with owners. The owner of each permission signs off on the tags.
  • Maintain. Re-check when applications release updates, because permissions change meaning.

Beware of hidden power

Some permissions are broader than their names suggest. An “administrator” role in a finance tool might include everything. A “support” role may allow editing records. Always read the details, and assume names understate power.

Shared vocabulary

Agree a short, consistent list of duty names across the company, such as create vendor, approve invoice, release payment, change employee pay, and deploy code. A shared vocabulary lets conflicts be defined once and applied across all applications.

Start narrow

Map only the applications and permissions that take part in your highest-severity conflicts first. Expanding later is easy. Mapping everything at once is exhausting and rarely finishes.

Application permissionPlain descriptionDuty tag
Procurement: Supplier AdminCan add and edit suppliers and their bank detailsCreate vendor
Finance: AP Clerk Level 2Can enter and edit invoicesCreate invoice
Finance: AP ApproverCan approve invoices up to the team limitApprove invoice
Banking portal: ReleaserCan release approved paymentsRelease payment
HR: Payroll EditorCan change employee payChange employee pay
Source control: MaintainerCan merge and release codeDeploy code
flowchart LR
    P1["Procurement: Supplier Admin"] --> D1["Duty: Create vendor"]
    P2["Finance: AP Clerk Level 2"] --> D2["Duty: Create invoice"]
    P3["Finance: AP Approver"] --> D3["Duty: Approve invoice"]
    P4["Banking: Releaser"] --> D4["Duty: Release payment"]
    D1 -.->|"Conflict"| D4
    D2 -.->|"Conflict"| D3
    
Figure 12 · Permissions in different applications mapped onto shared duties
Everyday analogy

Think of translating several local dialects into one common language. Once everything is in the common language, you can compare and spot problems. Before translation, each dialect hides the same danger behind different words.

i
Ask the owner

If a permission’s meaning is unclear, ask its owner to describe a typical user of it. The answer often reveals powers the name never suggested.

15Risk Scoring and Prioritization

Not every conflict deserves the same urgency. Ranking tells you where to spend limited time first.

Factors that raise risk

  • Impact: how large the harm could be, in money, data, or reputation.
  • Likelihood: how easy it would be to misuse the pair without being noticed.
  • Visibility: whether other controls such as limits or reviews would catch the misuse.
  • Number of people: how many hold the pair.
  • Seniority and reach: whether the person can override other controls.
  • Age: how long the conflict has existed.

A simple scale

Use a small scale, such as low, medium, high, and critical, with clear descriptions of each. Too many levels invite endless debate. A shared simple scale lets teams agree quickly and treat similar cases alike.

Using scores

Scores decide the response: critical pairs are blocked, high pairs need senior approval and monitoring, medium pairs need a manager’s acknowledgement and review, and low pairs are only noted. Scores also decide the order of cleanup, so the most dangerous violations are fixed first.

Revisiting scores

Risk changes. New systems are added, limits are changed, and processes evolve. Review the scale and the ranking of important pairs at least once a year with risk and audit.

LevelMeaningTypical responseTypical timeline
CriticalSingle person could cause major loss unnoticedBlock; remove immediatelyDays
HighSerious harm possible, some other controls existSenior-approved exception with monitoringWeeks
MediumModerate harm or well-controlledManager acknowledgement and reviewMonths
LowMinor impactRecord and observeNext cycle
flowchart TD
    V["Violation found"] --> I{"Impact if misused?"}
    I -->|"Major"| L{"Other controls catch it?"}
    I -->|"Moderate or small"| M["Medium or low"]
    L -->|"No"| C["Critical: block and remove"]
    L -->|"Partly"| H["High: senior exception and monitoring"]
    M --> N["Manager acknowledgement or record only"]
    
Figure 13 · A simple path to rank a violation
Everyday analogy

Think of a hospital emergency room. Patients are sorted so that those in greatest danger are seen first, not those who arrived first. Ranking conflicts by risk does the same for your cleanup.

i
Agree it in advance

Decide the scale and the responses before the first scan. Arguing about severity while looking at a long list is slow and political.

16Designing Conflict-Free Roles and Bundles

The best time to deal with a conflict is when a role is designed. A role that is conflict-free by design never creates the problem.

Check at design time

Before publishing a role or bundle, run the conflict library against its contents. If the role itself contains a forbidden pair, everyone who receives it becomes a violation. Fixing one role is far cheaper than fixing hundreds of people.

Split roles along duty lines

Design roles around one side of a process. Instead of one “Accounts Payable” role that can enter and approve, create “Accounts Payable Preparer” and “Accounts Payable Approver”. People then hold one or the other, and the system can stop anyone requesting both.

Keep powerful duties separate

Do not bury a dangerous duty in a large role. Keep releasing payments, changing pay, and administering rules as their own small items, so they are visible and can be reviewed and time-limited.

Test combinations of roles

Roles that are safe alone may conflict together. Test likely combinations, such as the role a person is likely to hold with the extras they often request.

Review roles as they change

Roles grow as applications add features. Re-run the conflict check on every change, and on a regular schedule. Roles that were safe last year may not be safe now.

flowchart TD
    OLD["Old role: Accounts Payable
enter and approve invoices"] --> SPL{"Split along duty lines"} SPL --> PREP["Role: AP Preparer
create invoice"] SPL --> APR["Role: AP Approver
approve invoice"] PREP -.->|"Request both is blocked"| APR
Figure 14 · Splitting one combined role into two separated roles
Everyday analogy

Think of designing a kitchen where the person who cooks and the person who tastes for safety are on different teams. If you design it that way from the beginning, you never need to chase down cooks who also taste their own food.

i
Design rule

If a role needs a long explanation of why it is safe, it is probably too big. Make it smaller.

17Joiners, Movers, Leavers, and Temporary Access

Conflicts often arise during change. People who move between jobs are the usual carriers.

Joiners

New staff receive access from baseline and role bundles. Because these were checked at design time, they should be conflict-free. Extra requests should pass the request-time check.

Movers

A person who moves from accounts payable to procurement may keep their invoice approval and gain the right to create suppliers. Neither was wrong on its own; together they are a classic conflict. Movers need a deliberate step: remove the old role’s access, then check the remaining access against the new role. Pay special attention to access that was requested rather than assigned by rule, as it will not disappear by itself.

Leavers

Leavers lose all access, which ends their conflicts. But also consider the duties they performed. If a leaver was the only approver of something, the duty needs a new home, and a hasty reassignment can itself create a new conflict.

Temporary cover

Holiday and sickness cover is a major source of temporary conflicts. A cover grant should check conflicts like any other, have an end date, and be removed automatically. Where a conflict cannot be avoided, use a recorded exception with safeguards.

Contractors and partners

Contractors may hold powerful access for short projects. Apply the same checks, name a sponsor who vouches for them, and end access on the contract end date.

Reorganizations

When teams merge or split, many people move at once. Plan a conflict scan before and after, and expect a spike in violations that needs clearing.

1

Change detected

HR data shows a new job, manager, or department.

2

Old rule access withdrawn

Access that came by rule for the old role is removed.

3

Requested access re-confirmed

The new manager confirms each requested permission or removes it.

4

New access granted

The new role bundle is assigned, checked at design time.

5

Conflict scan

The whole set is compared with the conflict library.

6

Resolve or record

Remove a power, or approve an exception with safeguards.

sequenceDiagram
    participant HR as HR system
    participant O as Okta
    participant M as New manager
    participant E as Conflict engine
    HR->>O: Person moves from payables to procurement
    O->>O: Withdraw rule-based access of old role
    O->>M: Re-confirm requested access
    M-->>O: Keep invoice approval? No, remove
    O->>O: Assign procurement role bundle
    O->>E: Scan combined access
    E-->>O: No conflicts found
    
Figure 15 · A mover is cleaned and checked before conflicts can form
Everyday analogy

Think of a student moving between school houses. They hand back the old house’s keys before they receive the new ones. If they keep both sets, they can wander into places they should not be.

!
The quiet carrier

Movers are the most common source of conflicts. Check every move, not only every request.

18An Implementation Roadmap

SoD projects stall when they try to fix everything at once. A phased path builds trust and results.

Phase 1: Agree on the problem

Gather risk, audit, finance, and application owners. Choose the processes that matter most, such as paying suppliers and running payroll. Agree on goals, scope, and how success will be measured.

Phase 2: Build the matrix

Create a small conflict matrix for the chosen processes. Rank the pairs. Decide the response for each: block, warn, or monitor.

Phase 3: Map and connect

Map the relevant permissions to duties for the first applications. Connect them to Okta so that current access can be imported.

Phase 4: Measure the baseline

Run a first detection scan, with no enforcement. Count violations by severity and application. Share the results. The baseline shows the size of the problem and the value of fixing it.

Phase 5: Clean and prevent

Fix badly designed roles, remove unneeded powers, and record exceptions. Then turn on request-time checks for the highest-severity pairs.

Phase 6: Embed in reviews and change

Add conflict flags to reviews, add checks to mover and cover processes, and apply maker-checker to governance changes and administrator roles.

Phase 7: Expand and improve

Add more applications and more pairs. Track metrics. Retire rules that no longer apply. Review the matrix yearly.

1

Agree

Pick processes, goals, and owners.

2

Matrix

Small, ranked, with agreed responses.

3

Map and connect

Permissions to duties; applications to Okta.

4

Baseline

Scan without enforcing and share the numbers.

5

Clean and prevent

Fix roles, remove powers, start blocking.

6

Embed

Reviews, movers, cover, administrators, governance changes.

7

Expand

More applications, better metrics, yearly review.

flowchart LR
    S1["Agree"] --> S2["Matrix"]
    S2 --> S3["Map and connect"]
    S3 --> S4["Baseline scan"]
    S4 --> S5["Clean and prevent"]
    S5 --> S6["Embed in processes"]
    S6 --> S7["Expand"]
    S7 -.->|"Yearly review"| S2
    
Figure 16 · An SoD journey in phases, with a yearly loop back to the matrix
Everyday analogy

Think of tidying a very messy house. You do not start by labelling every drawer. You decide which room matters most, measure the mess, clear the worst parts, put in shelves so it does not return, and then move to the next room.

i
Show early value

The baseline scan is a powerful moment. Seeing real numbers builds support for the work that follows.

19Worked Examples in Plain Words

Examples make ideas stick. Each one below follows a situation step by step.

Example 1: The supplier and the payment

Meera works in procurement and holds the permission to create and edit suppliers. One day she asks for the permission to release payments in the banking portal, because her colleague who normally does it is on leave. Okta gathers what she holds, notices the supplier permission, and compares the pair with the conflict library. The pair “create vendor” and “release payment” is marked critical with a hard block. The request is stopped before any approver sees it. Meera sees a plain message that explains the reason: one person could set up a fake supplier and then pay it.

Her manager reads the same message, then asks a different colleague in finance to cover the releasing duty for the week. No conflict is created, and the work still gets done.

Example 2: The old role that hid a pair

A detection scan finds that two hundred people hold both “enter invoices” and “approve invoices” in the finance application. Nobody asked for both. The cause is a single old role called “Accounts Payable” that includes both abilities. The team splits it into a preparer role and an approver role, reassigns people to the one they truly need, and records three small exceptions for a tiny branch office with safeguards. Two hundred violations are cleared by fixing one role.

Example 3: The administrator who edits policy and resets factors

During an administrator review, a security engineer is found to hold both the right to edit sign-in policies and the right to reset factors for any user. This pair is rated high. The team splits the roles: policy editing stays with the security engineering team, and factor reset moves to a help desk role that is limited to certain groups. The engineer keeps policy editing. Changes to policies now require a second person to approve.

Example 4: The mover

Rahul moves from accounts payable to procurement. Rule-based access for his old role is withdrawn automatically. He still holds “approve invoices”, which he once requested for a special project. Okta asks his new manager to re-confirm it. The manager sees a flag showing that invoice approval conflicts with supplier creation, which Rahul has just received in his new role. The manager removes the approval. A conflict that would have lasted for years is prevented in a minute.

Example 5: A fair exception

A two-person branch in a remote town needs one person to both prepare and approve small local payments. The risk team agrees to an exception for six months. Safeguards are set: a limit on the amount, a weekly review of all payments by the regional manager, and an alert if any payment is near the limit. At the end of six months, the exception is reviewed. A new part-time clerk has joined, so the duties can be separated and the exception ends.

SituationWhat the control didLesson
Supplier plus payment requestBlocked at request time with a clear messagePrevention at the door is cheapest
Two hundred combined-role holdersRole split fixed them allFix the cause, not each person
Administrator with two powersRoles split, second approver addedApply SoD to administrators
Mover with leftover approvalRe-confirmation flagged the conflictCheck every move
Two-person branchTime-limited exception with safeguardsMake exceptions open and bounded
sequenceDiagram
    participant R as Rahul
    participant O as Okta
    participant M as New manager
    participant E as Conflict engine
    O->>O: Rahul moves, old role access withdrawn
    O->>M: Re-confirm invoice approval requested earlier
    M->>E: Is it safe with supplier creation?
    E-->>M: Conflict, critical
    M-->>O: Remove invoice approval
    O->>R: Notify of the change with reason
    
Figure 17 · A mover’s leftover permission is caught and removed
Everyday analogy

Think of a school trip. Teachers share duties so that the one counting heads is not the one leading the group at the front. When a teacher falls ill, the school finds a different substitute for the counting role instead of letting the leader do both.

20Security Considerations

A control that decides who may hold which power is itself a target. Attackers and insiders will look for ways around it.

Protect the conflict library

If someone can quietly delete a conflict rule, they can quietly make a violation legal. Limit who can edit the library, require a second approver for every change, and alert on any change to high-severity rules.

Protect the duty map

A permission tagged with the wrong duty, or with no duty, hides conflicts. Treat edits to the duty map as sensitive. Review changes, and compare the map with application releases.

Protect the data feeding the control

The control relies on accurate access data. If an import is incomplete, the control believes people hold less than they do. Monitor the health of imports, and alert when a connection fails or returns suspiciously little data.

Watch for splitting tricks

A person who wants both powers may try to obtain them in small steps through different routes, or through two accounts. Look at combined access per person, not per request, and consider linking multiple accounts that belong to one human.

Watch for collusion

SoD stops one person from acting alone. It does not stop two people who agree to cheat together. Collusion is reduced by rotating duties, by sampling transactions, and by watching for patterns such as the same pair always approving each other’s work.

Secure non-human accounts

Service accounts and automation hold powers too. Give each an owner, check them against the conflict library, and avoid giving one account both sides of a process.

Protect evidence

Records of requests, exceptions, and decisions must resist alteration. Store them where the people they describe cannot edit them, and keep them for as long as your rules require.

ThreatExampleDefence
Rule tamperingQuietly deleting a conflict ruleLimited editors, second approver, alerts
Wrong duty mapA risky permission tagged as harmlessOwner sign-off and release checks
Incomplete dataFailed import shows nobody has conflictsImport health monitoring
SplittingGaining powers in small steps or via two accountsEvaluate combined access per person
CollusionTwo staff approve each otherRotation, sampling, pattern detection
Bot conflictsOne service account does both stepsOwners and conflict checks for service accounts
Evidence tamperingRecords edited before auditProtected, retained records
flowchart TD
    A["Change to a rule, map, or exception"] --> B["Strong authentication of the actor"]
    B --> C["Authorization: may this person edit?"]
    C --> D["Second person approves"]
    D --> E["Change applied"]
    E --> F["Protected audit record"]
    F --> G["Alert on high-severity changes"]
    
Figure 18 · Protecting the control’s own rules from quiet tampering
Everyday analogy

Think of the rulebook of a game. If one player can quietly rewrite it, the game is meaningless. The rulebook is kept under a lock, and changes need agreement from several players.

!
Collusion remains

No technical control fully stops two determined people. Combine SoD with sampling, rotation, and a culture where people feel safe to raise concerns.

21Monitoring, Logging, and Metrics

You cannot manage what you cannot see. A few good measurements tell you whether the control works.

What to log

Record each request check and its result, each detected violation, each decision about it, each exception and its safeguards, each change to the library or the duty map, and each use of emergency or highly privileged access. Include who, when, and why.

Metrics that matter

  • Open violations by severity, application, and age.
  • New violations per week and their causes.
  • Blocked requests, which show prevention working.
  • Active exceptions, their age, and how many have expired without renewal.
  • Time to resolve a violation after detection.
  • Review quality: the share of flagged items removed, and the speed of decisions.
  • Coverage: the share of in-scope applications and permissions that are mapped and connected.
  • Import health: how fresh and complete the access data is.
  • Administrator conflicts: number of administrators holding conflicting powers.

Alerts

Alert on new critical violations, on any change to a high-severity rule, on exceptions near expiry, on failed or empty imports, and on use of emergency access. Send alerts to people who can act, not to a mailbox nobody reads.

Reports for different readers

Executives want a few lines that trend: fewer violations, faster resolution. Process owners want lists for their own areas. Auditors want evidence for samples. Provide a view for each.

Trend
open violations going down
Speed
time to resolve each violation
Cover
share of applications mapped
flowchart LR
    EV["Events and checks"] --> LOG["Protected log"]
    LOG --> MET["Metrics"]
    MET --> DASH["Dashboards by audience"]
    MET --> ALR["Alerts to action owners"]
    DASH --> EX["Executives: trends"]
    DASH --> PO["Process owners: their lists"]
    DASH --> AU["Auditors: evidence"]
    
Figure 19 · From events to views and alerts
Everyday analogy

Think of a car dashboard. A few gauges and warning lights are enough to drive safely. You need not watch every spark in the engine. Choose indicators that tell you when to act.

i
Track trends

One number is hard to read. The same number over six months tells you if effort is paying off.

22Compliance and Audit Readiness

Many organizations start SoD programs because auditors have asked hard questions. Good design turns those questions into routine reports.

What auditors typically ask

They ask which pairs of duties you consider conflicting and why, how you prevent them, how you detect existing ones, how many exist today, how exceptions are approved and monitored, and how you know the data is complete. They may select a sample of people and ask for proof of everything they hold and every approval.

Evidence by design

Produce evidence as a by-product of normal work. The conflict library with approvals, the duty map with owner sign-offs, scan results with dates, exception records with safeguards, and review decisions with timestamps together form a complete story. When the audit arrives, you export; you do not reconstruct.

Different frameworks, similar asks

Financial reporting rules, security standards, and privacy laws differ in detail, but they all expect separation of conflicting duties or compensating controls, controlled access to sensitive functions, periodic review, and evidence. Map your control once to each framework, then reuse the evidence. Your own audit and compliance teams will tell you which frameworks apply.

Testing the control yourself

Do not wait for auditors. Periodically test your own control. Try to request a conflicting pair in a test environment and confirm it is blocked. Create a known violation and confirm the scan finds it. Approve your own request and confirm the system refuses. These small tests catch gaps early.

Privacy

Access data is personal data. Limit who can see reports, keep what you need, and follow retention rules.

Define

Conflict library

Approved pairs, severity, and responses.

Prevent

Request-time blocks

Proof that dangerous requests are stopped.

Detect

Scan results

Dated lists of violations and their resolution.

Manage

Exceptions

Reasons, approvers, safeguards, and end dates.

Review

Campaign records

Flagged items and reviewer decisions.

Protect

Change history

Who changed rules, who approved, when.

Everyday analogy

Think of keeping receipts through the year instead of searching on tax day. If you file each one as it arrives, preparing the return takes an hour. If you do not, it takes a week of panic.

i
Ask auditors early

Show your design to auditors before launch. Learning that your evidence format will not satisfy them is far cheaper before go-live.

23Operating Model and Ownership

Technology is the easy half. Deciding who is responsible for what makes the control last.

Who does what

  • Risk and compliance: own the conflict library, severity scale, and policy on exceptions.
  • Process owners: understand the business processes and confirm which duties conflict.
  • Application owners: describe permissions, sign off the duty map, and fix badly designed roles.
  • Identity platform team: builds connections, runs checks and scans, maintains workflows.
  • Managers: resolve violations for their people and approve exceptions at the right level.
  • Internal audit: independently tests the control.
  • Employees: request what they need and tell the truth about their duties.

Keep the library alive

Processes change, and so do conflicts. Schedule a yearly review of the matrix with process owners and audit. Retire rules that no longer apply and add new ones for new processes.

Service levels

Set targets that people can meet: critical violations resolved within days, high within weeks, exceptions reviewed before they expire. Report against the targets.

Training and communication

Explain to employees why some requests are blocked, and give them a path when the block is wrong. Explain to managers and owners how to resolve a violation and what a good exception looks like. An organization that understands the reason follows the rule willingly.

Avoid a culture of workarounds

If the control is slow or confusing, people will find ways around it, such as sharing passwords or asking colleagues to act for them. Keep the process quick, give clear messages, and offer reasonable alternatives.

flowchart TD
    RISK["Risk and compliance
library and policy"] --> PLAT["Identity platform team
checks, scans, workflows"] PROC["Process owners
confirm duties"] --> RISK APPO["Application owners
permissions and roles"] --> PLAT PLAT --> MGR["Managers
resolve and approve"] MGR --> EMP["Employees"] AUD["Internal audit
independent testing"] -.-> RISK AUD -.-> PLAT
Figure 20 · Who is responsible for what in an SoD program
Everyday analogy

Think of road safety. Lawmakers set the rules, engineers build the signals, police check compliance, and drivers follow them. If any group stops doing its part, the roads become dangerous even though the rules still exist on paper.

24Advantages, Disadvantages, and Trade-offs

SoD gives real protection, and it has real costs. A fair picture helps you decide how far to go.

Advantages

  • Reduces the chance of fraud and undetected error.
  • Limits the damage from a stolen account.
  • Meets common audit and regulatory expectations.
  • Gives a clear, shared language for risk.
  • Finds hidden cross-system combinations.
  • Encourages cleaner role design.

Disadvantages

  • Needs effort to map permissions and agree duties.
  • Depends on accurate, complete access data.
  • Can slow work if rules are too strict.
  • Small teams may lack enough people to separate duties.
  • Large rule sets create noise and fatigue.
  • Does not stop collusion between people.

Key trade-offs

Trade-offLeaning one wayLeaning the other way
Block versus warnBlocking is safer but can stop real workWarning is smoother but depends on judgment
Few rules versus manyEasy to run, may miss risksThorough, but noisy and costly
Prevent versus detectPrevention stops harm earlyDetection catches what slips through
Strict separation versus exceptionsCleaner, but impractical for small teamsPractical, needs strong safeguards
Automation versus human judgmentConsistent, can miss contextThoughtful, slower, less consistent
flowchart TD
    N["A conflicting pair is found"] --> S{"Severity"}
    S -->|"Critical"| A1["Block and remove"]
    S -->|"High"| A2["Senior exception with safeguards"]
    S -->|"Medium"| A3["Manager acknowledgement and review"]
    S -->|"Low"| A4["Record and observe"]
    
Figure 21 · Matching the response to the severity
Everyday analogy

Think of safety rules in a workshop. Some tools need two people, some need goggles, some need only care. The effort fits the danger, and people understand why. Too many rules and people ignore them all. Too few and someone gets hurt.

25Design Patterns for SoD

A pattern is a proven answer to a problem that keeps coming back. These patterns keep SoD simple and effective.

Pattern: Start with processes, not permissions

Begin from business processes and the duties inside them. Permissions come later. This keeps the control focused on real risk instead of on a pile of technical names.

Pattern: Small library, strongly enforced

Start with the few most dangerous pairs and enforce them firmly. Add more as you learn.

Pattern: Prevent, detect, review

Use three layers: block at request time, scan on a schedule, and flag conflicts in reviews. Each covers gaps in the others.

Pattern: Split roles along duty lines

Design roles around one side of a process, such as preparer and approver, so that conflicts cannot form from a single role.

Pattern: Fix the cause

When many people share a violation, find the single role, group, or rule that created it and fix that.

Pattern: Bounded exceptions

Every exception has a reason, a senior approver, safeguards, and an end date. Renewal requires a fresh decision.

Pattern: Maker-checker everywhere that matters

Apply the four-eyes rule to rule changes, exemptions, administrator roles, and high-risk approvals.

Pattern: Check at every change

Run conflict checks on requests, movers, temporary cover, and reorganizations. Change is where conflicts are born.

Pattern: Guard the guards

Review administrator and governance access more often than any other access.

Focus

Processes first

Think duties, then permissions.

Scope

Small, enforced library

Few pairs, taken seriously.

Layers

Prevent, detect, review

Three nets, not one.

Design

Split roles

Preparer and approver apart.

Honesty

Bounded exceptions

Open, limited, watched.

Trust

Maker-checker

No single person alone.

flowchart TD
    DES["Design: roles split along duty lines"] --> REQ["Request: conflict check at the door"]
    REQ --> MOV["Change: check movers and cover"]
    MOV --> SCN["Detect: scheduled scans"]
    SCN --> REV["Review: conflict flags shown"]
    REV --> EXC{"Cannot separate?"}
    EXC -->|"Yes"| BND["Bounded exception with safeguards"]
    EXC -->|"No"| FIX["Remove or reassign the power"]
    BND --> MON["Monitor and report"]
    FIX --> MON
    
Figure 22 · Several patterns working together across the lifetime of access
Everyday analogy

Think of a well-run restaurant. The person who takes orders is not the person who cooks, who is not the person who handles the cash. A manager reviews the till each evening. When a small cafe cannot afford all those people, the owner checks the takings personally. The pattern is the same at every size.

26Anti-patterns to Avoid

An anti-pattern is a habit that seems sensible but causes trouble later. Each card below shows one, why it hurts, and a better way.

AP-01 · THE GIANT MATRIX Avoid
What it looks like

A conflict library with hundreds of pairs, all treated as equally important.

Why it hurts

Reports drown in noise, owners ignore them, and the truly dangerous pairs hide in the crowd.

Better approach

Start with a short, ranked list, enforce it, and grow slowly.

AP-02 · THE ONE-DOOR CHECK Avoid
What it looks like

Checking conflicts only when someone makes a request in Okta.

Why it hurts

Access granted inside applications, by group rules, or before the control existed is never examined.

Better approach

Add scheduled detection and conflict flags in reviews.

AP-03 · THE PERMANENT EXCEPTION Avoid
What it looks like

An exception signed once, with no safeguards and no end date.

Why it hurts

It is just a violation with a signature, and auditors treat it that way.

Better approach

Require a reason, a senior approver, safeguards, and an expiry with renewal.

AP-04 · THE COMBINED SUPER-ROLE Avoid
What it looks like

One large role that includes both sides of a process.

Why it hurts

Everyone who holds it is a violation from the first day.

Better approach

Split roles along duty lines and test new roles against the library.

AP-05 · THE SELF-APPROVER Avoid
What it looks like

A person approves their own request or reviews their own access, often because they are both manager and owner.

Why it hurts

The check is empty, and the control can be bypassed by anyone with the right job titles.

Better approach

Enforce independence automatically and route to someone else in such cases.

AP-06 · THE FORGOTTEN ADMINISTRATOR Avoid
What it looks like

Careful SoD for business users, while administrators of the identity platform hold every power.

Why it hurts

Anyone with enough administrative power can change the rules, grant themselves access, and hide the trail.

Better approach

Use narrow roles, few super administrators, and maker-checker on governance changes.

AP-07 · THE BLIND SCAN Avoid
What it looks like

Trusting scan results without checking whether the underlying access data is complete.

Why it hurts

A failed import makes everyone look clean, and the problem appears only in an audit.

Better approach

Monitor import health, alert on empty or stale data, and test with a known violation.

AP-08 · THE WALL OF NO Avoid
What it looks like

Blocking requests with vague messages and no path forward.

Why it hurts

People find workarounds such as sharing passwords, which is worse than the original risk.

Better approach

Explain the reason in plain language and offer alternatives or an exception route.

Separation is not a sign of distrust. It is how honest people protect each other.

27Best Practices and Common Mistakes

This chapter gathers the habits that separate calm programs from chaotic ones.

Best practices

1

Begin with the money and the keys

Payments, payroll, administrator access, and production releases first.

2

Write conflicts in plain language

If a manager cannot understand the rule, rewrite it.

3

Agree severity and response in advance

Block, warn, or monitor, decided before the first scan.

4

Measure a baseline

Scan before enforcing so everyone sees the size of the problem.

5

Fix roles first

Splitting one bad role clears many violations at once.

6

Apply maker-checker

To rules, exemptions, administrators, and sensitive approvals.

7

Check every change

Requests, movers, temporary cover, reorganizations.

8

Test the control yourself

Try to break it before auditors do.

9

Review the library yearly

Processes change, so should the rules.

Common mistakes

MistakeWhat happensFix
Trying to cover every application at onceThe project stallsPhase by risk and application
Skipping the duty mapConflicts cannot be found across systemsMap permissions to shared duties
Ignoring moversOld powers pile upCheck at every job change
No end date on exceptionsPermanent violationsExpiry and renewal decisions
Rubber-stamp reviewsFlags are ignoredShow severity, measure removals
Letting admins hold every powerRules can be silently bypassedNarrow roles, second approver
Trusting incomplete dataFalse sense of safetyMonitor import health
Blocking without explanationWorkarounds appearPlain messages and alternatives
Never retiring rulesNoise and fatigueYearly clean-up
Assuming license featuresDesign cannot be builtConfirm features before planning
Everyday analogy

Think of a pilot’s checklist. Experienced pilots still use one, not because they forget how to fly, but because small slips matter. These practices are the checklist for your control.

i
One-minute review

For any new permission or role, ask: which duty does this carry, what does it conflict with, who owns it, and how will a conflict be noticed?

28Real-World Scenarios

These short stories use made-up companies to show how the ideas appear in daily work. They are teaching examples, not descriptions of any real organization.

Scenario 1: The audit finding that took an afternoon to fix

Oakmere Foods received an audit finding that thirty people could both create suppliers and release payments. The platform team ran a scan, found that nearly all of them held one old procurement role that included supplier release rights nobody needed. They split the role, removed the extra right from twenty-eight people, and recorded two time-limited exceptions with weekly review. The auditors accepted the evidence the next week, because the scan, the role change, and the exceptions were all recorded.

Scenario 2: The administrator who could erase the trail

Ironvale Systems found that two engineers could both manage integrations to applications and clear audit records. Neither had ever misused the power, but the risk team rated the pair as high. The company moved log administration to the security operations team with read-only access for engineers. Changes to integrations now need a second approver. The company also added alerts for any change to log settings.

Scenario 3: The reorganization spike

Lakeshore Retail merged its regional finance teams into one. A scan the week afterwards showed hundreds of new violations as people from different regions combined their old and new access. Because the team had expected this, they had prepared a clean-up plan: automatic withdrawal of old rule-based access, manager re-confirmation of requested access, and a targeted review of the highest-severity pairs. The numbers returned to normal within a month.

Scenario 4: The self-approving manager

At Bridgeford Insurance, a team lead was both the manager and the owner of a sensitive claims permission. When she requested it for herself, the system routed approvals to her in both roles. A routine test found the gap. The company changed the workflow so that any request where the requester holds an approver role is routed to a different person at the next level up.

What the scenarios share

Each story was solved with the same habits: plain conflict rules, a duty map, a baseline scan, role fixes, bounded exceptions, maker-checker on governance, and checks at every change. None needed anything exotic. They needed discipline and a willingness to look.

i
Lesson

Most SoD problems are problems of design and clarity, not of malice. Good roles, clear rules, and honest exceptions remove most of them quietly.

29Frequently Asked Questions

Short answers to common questions. Where details depend on your license or release, confirm them in your own console and the official documentation.

Q1What is segregation of duties?
A control that makes sure certain powers are not held by one person, and that important acts need a second person. It reduces fraud, error, and the damage of a stolen account.
Q2Is segregation of duties the same as separation of duties?
Yes. The two names mean the same idea and are used interchangeably.
Q3How is SoD different from least privilege?
Least privilege limits how much access a person holds. SoD limits which powers may be held together. A person can pass one test and fail the other.
Q4Does Okta do SoD checks automatically?
Okta’s governance features can help define conflicts and check for them where your license and release include them. The business decisions about which pairs conflict are still made by your people. Check your license and documentation for what is available.
Q5Where do the conflict rules come from?
From your business processes, agreed with risk, compliance, process owners, and audit. Start with the most dangerous pairs, such as creating and approving payments.
Q6Why do I need a duty map?
Because applications name permissions in their own ways. A duty map translates them into shared business duties, so a conflict can be defined once and found across all applications.
Q7Should conflicts be blocked or only flagged?
Block the most severe pairs. Warn or require extra approval for medium pairs. Record low pairs. Decide for each pair in advance and write it in the matrix.
Q8What if a small team cannot separate duties?
Use a recorded exception with compensating controls such as transaction limits, independent review, and alerts, and give it an end date. If the need is permanent, redesign the process.
Q9What is a compensating control?
An extra safeguard that reduces risk when separation is not possible, such as a manager reviewing every transaction the person makes.
Q10How often should I scan for conflicts?
Often enough that a new violation does not live long. Critical pairs may warrant daily or event-driven checks. Also scan before every access review.
Q11What do I do when hundreds of people have the same violation?
Look for the single role, group, or rule behind it. Fixing that one source often clears everyone at once.
Q12Does SoD apply to Okta administrators?
Yes. Keep super administrators few, use narrow and scoped roles where your release supports them, avoid combining powers such as editing policies and resetting factors, and require a second approver for governance changes.
Q13Can a person approve their own request?
No. Enforce this automatically, including cases where one person is both manager and owner, by routing the approval to someone else.
Q14How should temporary cover be handled?
Check conflicts like any other request, set an end date, remove access automatically, and use a recorded exception with safeguards where a conflict cannot be avoided.
Q15What about service accounts and automation?
Give each an owner, check it against the conflict library, and avoid letting one account perform both sides of a process.
Q16Does SoD stop collusion?
Not fully. Two people can cooperate to cheat. Rotation of duties, sampling of transactions, pattern detection, and an open culture reduce the risk.
Q17How do I show auditors that the control works?
Export the conflict library with approvals, scan results with dates, blocked requests, exception records with safeguards, review decisions, and change history. Also run your own tests and keep the results.
Q18What if the access data is incomplete?
Then the control gives a false sense of safety. Monitor the health of imports, alert on empty or stale data, and test with a known violation.
Q19How many conflict rules should I start with?
Only a handful, covering the most dangerous pairs in payments, payroll, administration, and releases. Enforce those well before adding more.
Q20How do I stop people from working around blocks?
Make the process quick, explain blocks in plain language, offer alternatives or an exception route, and watch for signs of shared passwords or unofficial arrangements.
Q21Who should own the conflict library?
Typically risk and compliance, with input from process owners and audit. The identity team runs the technology but should not decide the business rules alone.
Q22How should I treat contractors?
Apply the same checks, name a sponsor, and end access on the contract end date. Short projects can still create serious conflicts.
Q23Will this guide match my console exactly?
Possibly not. Okta changes names, features, and defaults over time, and what you can use depends on your license. Use this guide as a map of the ideas and confirm details in the official documentation. For regulatory questions, consult your own compliance and audit teams.

30Summary and Key Takeaways

Here is the whole story in a few lines you can carry with you.

Segregation of duties is the simple idea that dangerous powers should not meet in one person, and that important acts should need a second pair of eyes. In an Okta environment it applies in three places: the business permissions inside applications, the administrative power over Okta itself, and the governance process that grants access. Because Okta sees access across many systems, it can reveal combinations that no single application can see.

The craft lies in a few steady habits: start from business processes, keep a small and ranked conflict library, map permissions to shared duties, prevent at request time, detect with regular scans, show conflicts in reviews, split roles along duty lines, bound every exception with safeguards and an end date, apply maker-checker to governance and administrators, and check every change. With these, the control stays understandable, auditors get evidence they can trust, and honest people are protected from mistakes and from each other’s temptations.

Key Takeaways

  • Never both, never alone. Some pairs of powers must not meet in one person, and some acts must not happen without a second person.
  • Three places, three owners. Business permissions, Okta administration, and the governance process each need their own SoD thinking.
  • Start small and rank. Build a short conflict library from business processes, map permissions to shared duties, and agree responses in advance.
  • Use three nets. Prevent at request time, detect on a schedule, and flag conflicts in every review.
  • Fix roles and watch change. Split roles along duty lines, and check movers, cover, and reorganizations, where conflicts are born.
  • Make exceptions honest. Every exception has a reason, a senior approver, safeguards, and an end date.
  • Guard the guards and confirm details. Apply maker-checker to governance and administrators, protect the evidence, and verify features and rules in the official documentation and with your audit team.