CISSP-114 · Lesson 9 of 12 · 26 min

The identity and access provisioning life cycle

Access is not granted once and forgotten. People join, change jobs, take leave, return, become contractors and leave; systems are added and retired; roles are redesigned. Each change should change access, and in most organizations many changes do not. The result is privilege creep, where long-serving staff accumulate rights from every job they have held, and orphaned accounts, where access survives the person or project it was created for. Sub-domain 5.5 covers managing this identity and access provisioning life cycle. This lesson walks through joiner, mover and leaver processes, automated provisioning with SCIM, access reviews and recertification, and the audit and legal expectations that make the life cycle a compliance matter as well as a security one.

Joiners, movers and leavers

The identity life cycle is often summarized as joiner, mover, leaver, JML. A joiner event, triggered by a new hire record in the authoritative HR system, creates a directory identity and grants birthright access, the baseline every member of that role, department or location receives, such as email, the intranet and the time-sheet system. Further access beyond birthright is requested and approved through a workflow, ideally by the resource owner, not just the manager. A mover event, such as a promotion, transfer or change of manager, should add access for the new role and remove access the person no longer needs; in practice the removal is often forgotten, which is the main cause of privilege creep. A leaver event, triggered by termination, should disable the identity immediately, revoke sessions and tokens, recover devices and badges, transfer ownership of data and remove access in every connected system.

A horizontal timeline for one employee. Joiner on day one: HR record created, identity provisioned, birthright access granted, extra access requested and approved. Mover in year two: new role added and old role access removed after a short overlap. Periodic access reviews marked every six months along the timeline. Leaver at the end: disable account, revoke sessions and tokens, recover badge and laptop, transfer data, delete or archive after the retention period.
Joiner, mover and leaver events, with periodic reviews in between.

Leavers deserve special attention because the risk is concentrated in the hours around departure. For voluntary departures, access can be removed at the end of the last day; for involuntary terminations, especially of privileged staff, access should be removed before or at the moment the person is told, coordinated between HR, the manager and security. Disabling the directory account is not enough if the person also has local accounts, cloud console access, personal API keys, shared credentials they know or active sessions and refresh tokens that remain valid for hours or days. Shared passwords the leaver knew must be rotated.

Life cycle events and the access actions each requires
EventTriggerAccess actionsCommon failure
JoinerNew hire record in HRCreate identity; grant birthright access; route requests for moreCopying another user's access ("make her like Sam")
MoverJob, department or manager change in HRGrant new role access; remove old access after a defined overlapOld access never removed: privilege creep
Leave of absenceHR status changeSuspend access; keep dataAccounts active and unmonitored for months
LeaverTermination in HRDisable identity; revoke sessions and tokens; rotate shared secrets; recover assetsAccounts in unconnected systems left active
Contractor endContract end date in vendor systemAutomatic expiry; sponsor confirmation to extendAccess outlives the contract

Copying another user's access, the make-her-like-Sam request, is a quiet but serious problem: Sam may have accumulated years of excess rights, which are now duplicated. Role-based birthright access, documented role definitions and request workflows that ask for specific entitlements with a business reason avoid it.

Automated provisioning and SCIM

Manual provisioning, where help desk staff create accounts from emailed requests, is slow and error-prone, and manual deprovisioning is worse because nobody is waiting impatiently for it. Identity governance and administration, IGA, tools connect the HR system to the directory and to applications, so that life cycle events flow automatically. Connectors for on-premises systems often use LDAP, database or API calls. For cloud applications, the System for Cross-domain Identity Management, SCIM 2.0, defined in RFC 7643 and RFC 7644, is the standard: the identity provider calls each application's SCIM API to create, update, deactivate and delete users and groups using a common JSON schema. When choosing software-as-a-service products, support for SCIM, or at least for automated deprovisioning, should be a requirement in procurement.

SCIM 2.0 uses a common JSON schema; deactivating a user in a connected SaaS application is a single PATCH that sets active to false.
import json
# A SCIM 2.0 request body to deactivate a user (PATCH /scim/v2/Users/{id})
patch = {
    'schemas': ['urn:ietf:params:scim:api:messages:2.0:PatchOp'],
    'Operations': [{'op': 'replace', 'path': 'active', 'value': False}],
}
print(json.dumps(patch, indent=2))
# A minimal SCIM user resource as returned by the application
user = {
    'schemas': ['urn:ietf:params:scim:schemas:core:2.0:User'],
    'id': '2819c223-7f76-453a-919d-413861904646',
    'userName': 'priya.singh@example.ca',
    'name': {'givenName': 'Priya', 'familyName': 'Singh'},
    'active': False,
    'groups': [],
}
print('User', user['userName'], 'active =', user['active'], 'groups =', user['groups'])
Output
{
  "schemas": [
    "urn:ietf:params:scim:api:messages:2.0:PatchOp"
  ],
  "Operations": [
    {
      "op": "replace",
      "path": "active",
      "value": false
    }
  ]
}
User priya.singh@example.ca active = False groups = []

Automation does not remove the need for reconciliation. Some systems will never be connected, and connectors fail silently. Regular reconciliation compares the authoritative HR list with the accounts that exist in each system, flagging accounts with no matching person, accounts belonging to people who have left and accounts whose attributes disagree. Each flagged account needs an owner's decision and a deadline.

Reconciling an unconnected application against the HR source finds a leaver who is still active, an orphan and an account that should be suspended.
hr = {  # authoritative source: employee id -> status
    'E1001': 'active', 'E1002': 'active', 'E1003': 'terminated', 'E1004': 'leave', 'E1005': 'active',
}
app_accounts = [  # accounts found in an unconnected finance application
    ('jlee', 'E1001'), ('mroy', 'E1003'), ('temp-audit', None), ('kpatel', 'E1004'), ('svc-report', None), ('aotieno', 'E1005'),
]
service_owners = {'svc-report': 'finance-systems-team'}
for account, emp in app_accounts:
    if emp is None:
        if account in service_owners:
            print(f'{account:11s} service account, owner {service_owners[account]} - confirm still needed')
        else:
            print(f'{account:11s} ORPHAN: no person or owner - disable and investigate')
    elif hr.get(emp) == 'terminated':
        print(f'{account:11s} LEAVER STILL ACTIVE ({emp}) - disable now, review recent activity')
    elif hr.get(emp) == 'leave':
        print(f'{account:11s} on leave ({emp}) - suspend until return')
    else:
        print(f'{account:11s} matched to active employee {emp}')
missing = [e for e, s in hr.items() if s == 'active' and e not in {emp for _, emp in app_accounts}]
print('Active employees with no account (expected for most):', missing)
Output
jlee        matched to active employee E1001
mroy        LEAVER STILL ACTIVE (E1003) - disable now, review recent activity
temp-audit  ORPHAN: no person or owner - disable and investigate
kpatel      on leave (E1004) - suspend until return
svc-report  service account, owner finance-systems-team - confirm still needed
aotieno     matched to active employee E1005
Active employees with no account (expected for most): ['E1002']

Access reviews and recertification

An access review, also called recertification or attestation, asks a responsible person to confirm that each user's access is still appropriate, and removes what is not. Reviews can be organized by user, with managers reviewing their staff's access, or by resource, with data and application owners reviewing who can reach their systems; resource-owner reviews are usually better for sensitive systems because owners understand what each entitlement does. Privileged access, access to regulated data and access granted by exception should be reviewed more often, typically quarterly, while ordinary access may be reviewed twice a year or annually.

Reviews fail in predictable ways. Reviewers rubber-stamp hundreds of items without reading them, especially when entitlements have cryptic names such as GRP_FIN_AP_RW_03. Reviews arrive as spreadsheets that take weeks to reconcile. Revocations decided in the review are never carried out. Good programs give reviewers business-friendly descriptions, highlight risky or unusual access such as access unused for 90 days or outside the person's peer group, track revocation to completion and measure the results.

Access review metrics: very fast decisions with no revocations suggest rubber-stamping; revocations must also be tracked to completion.
reviews = {  # reviewer: (items reviewed, items revoked, median seconds per decision)
    'manager-a': (120, 9, 21),
    'manager-b': (340, 0, 2),
    'app-owner-payroll': (85, 14, 48),
    'manager-c': (60, 0, 3),
}
print('reviewer            items revoked  rate   s/item  flag')
for who, (n, revoked, secs) in reviews.items():
    rate = revoked / n
    flag = 'possible rubber-stamping' if revoked == 0 and secs < 5 else ''
    print(f'{who:20s}{n:5d} {revoked:7d} {rate:6.1%} {secs:6d}  {flag}')
total = sum(r[0] for r in reviews.values()); revoked = sum(r[1] for r in reviews.values())
print(f'Overall revocation rate: {revoked / total:.1%} of {total} items')
print('Revocations completed within 5 business days: 21 of 23 (91.3%) - chase the 2 open items')
Output
reviewer            items revoked  rate   s/item  flag
manager-a             120       9   7.5%     21  
manager-b             340       0   0.0%      2  possible rubber-stamping
app-owner-payroll      85      14  16.5%     48  
manager-c              60       0   0.0%      3  possible rubber-stamping
Overall revocation rate: 3.8% of 605 items
Revocations completed within 5 business days: 21 of 23 (91.3%) - chase the 2 open items

Worked problem

Diagnosing privilege creep

An internal audit finds that a senior analyst at a utility, with the company for 14 years, holds 212 entitlements, compared with a median of 61 for analysts in the same team, including write access to a billing system she last used in a job she left in 2019. What process failures does this reveal, and what should change?

Show solution
  1. Mover process: access from previous jobs was never removed when she changed roles.
  2. Access reviews: past reviews approved the access, probably because the reviewer saw only entitlement codes and trusted a long-serving employee.
  3. Fix the mover process so old role access is removed automatically after an overlap of, say, 30 days unless re-approved.
  4. Run a one-time clean-up using peer-group comparison and last-used dates, then improve reviews with descriptions, usage data and outlier flags.

Answer: Privilege creep is a process failure, not an individual one. Automated mover handling and risk-focused reviews prevent recurrence.

In the United States, the Sarbanes-Oxley Act requires public companies to assess internal control over financial reporting, and external auditors routinely test user access provisioning, timely removal of leavers and periodic access reviews for financial systems; findings such as terminated users with active access are common deficiencies. Other regimes have similar expectations: HIPAA's security rule requires access authorization, establishment and modification procedures; PCI DSS requires reviews of user accounts and removal of inactive accounts within 90 days; NYDFS Part 500 requires at least annual review of user access privileges; and federal agencies follow NIST SP 800-53 access control requirements. State privacy laws limit how long personal data about former employees may be retained. Checked October 2026.

Evidence matters as much as practice. Auditors ask for proof: lists of leavers with the time their access was removed, completed review records with reviewer decisions, approvals for new access and exception registers. A life cycle that works but leaves no trail will still fail an audit.

Life cycle metrics a manager should track (targets are illustrative)
MetricWhy it mattersExample target
Time from termination to access removalLeaver risk is highest at departureWithin 1 hour for involuntary, end of day for voluntary
Orphaned accounts found in reconciliationMeasures provisioning completenessZero unexplained after each cycle
Review completion on timeShows the process is followed100 % within the review window
Revocations completedDecisions must be carried outAll within 5 business days
Entitlements per user versus peer medianDetects privilege creepInvestigate outliers above twice the median
Accounts with no sign-in for 90 daysUnused access is unneeded accessDisable or justify

Thinking like a manager

Life cycle questions usually describe a symptom, such as a former employee logging in, a long-serving employee with excessive access, or an audit finding, and ask for the best response. The best answer fixes the process that caused it: connect provisioning to the authoritative HR source, automate deprovisioning, remove old access on moves, reconcile unconnected systems, and run risk-focused reviews whose revocations are carried out and evidenced. Disabling the single account in the example is necessary but never sufficient.

Common mistakes

  • MistakeGranting new staff a copy of a colleague's access.

    InsteadGrant role-based birthright access and approve additional entitlements individually.

  • MistakeAdding access on transfer without removing the old role's access.

    InsteadRemove previous access automatically after a defined overlap unless re-approved.

  • MistakeDisabling only the directory account when someone leaves.

    InsteadRevoke sessions and tokens, rotate shared secrets and remove access in unconnected systems.

  • MistakeSending reviewers spreadsheets of cryptic entitlement codes.

    InsteadProvide business descriptions, usage data and outlier flags, and track revocations to completion.

  • MistakeBuying SaaS applications without automated deprovisioning.

    InsteadRequire SCIM or equivalent in procurement.

Summary and key terms

  • The life cycle covers joiners, movers, leavers, leave and contractor end, driven by authoritative sources.
  • Privilege creep comes mainly from mover events that add access without removing it.
  • Leaver processes must revoke sessions, tokens and shared secrets, not just disable accounts.
  • SCIM 2.0 standardizes provisioning to cloud applications; reconciliation catches what automation misses.
  • Access reviews should be risk-focused, understandable and followed by completed revocations.
  • Auditors expect evidence of timely removal and reviews; Canadian and US regimes test these controls.
  • Track metrics such as time to remove leavers and orphaned accounts found.
Joiner, mover, leaver
The life cycle events that should create, change and remove access.
Birthright access
Baseline access granted automatically based on role, department or location.
Privilege creep
Gradual accumulation of access beyond current needs.
Orphaned account
An account with no current owner or matching person.
SCIM
System for Cross-domain Identity Management, a standard API for provisioning.
Reconciliation
Comparing authoritative identity data with accounts in each system.
Access review
Periodic confirmation by a responsible person that access is still appropriate.
Rubber-stamping
Approving review items without genuine evaluation.
Identity governance and administration
Tools and processes for provisioning, requests and reviews.
Peer-group analysis
Comparing a user's entitlements with those of similar users to find outliers.

Practice problems

Work each problem on paper first, then reveal the answer to check.

  1. Which life cycle event most often causes privilege creep?

    Show answer

    Mover events where old access is not removed.

  2. What is birthright access?

    Show answer

    Baseline access granted automatically by role, department or location.

  3. Why must sessions and refresh tokens be revoked when someone leaves?

    Show answer

    They can remain valid after the account is disabled.

  4. Which standard API provisions users to SaaS applications?

    Show answer

    SCIM 2.0.

  5. What does reconciliation compare?

    Show answer

    Accounts in each system against the authoritative identity source.

  6. Who is usually better at reviewing access to a sensitive application?

    Show answer

    The application or data owner.

  7. Give one sign of rubber-stamping in reviews.

    Show answer

    Very fast decisions with no revocations.

  8. Why is copying a colleague's access risky?

    Show answer

    It duplicates any excess access the colleague has accumulated.

  9. When should a privileged employee's access be removed on involuntary termination?

    Show answer

    Before or at the moment they are told.

  10. What do auditors need besides a working process?

    Show answer

    Evidence such as removal times, review records and approvals.

Lesson quiz · 5 questions

Score 60% or more to complete this lesson.

Take the quiz