‹ All interview questions

Security

What is an ACL (Access Control List) in ServiceNow?

The question

What is an ACL (Access Control List) in ServiceNow? How does it protect data?

Why This Matters in an Interview

Security is a core topic in every ServiceNow interview. ACLs control who can read, write, create, and delete data — and they're enforced automatically across the entire platform.

What Is an ACL?

An ACL is a security rule that controls access to tables, records, and individual fields. When a user tries to view an incident, update a change request, or delete a CI — the platform checks the ACLs to determine if that action is allowed.

The Three Components of an ACL

  • 1. Roles: Which role(s) does the user need? e.g., itil, admin, incident_manager. A user must have the specified role to pass this check.
  • 2. Conditions: Filter conditions on the record. e.g., 'Only if the record is assigned to the user's group.' This provides row-level security.
  • 3. Script: Advanced JavaScript logic for complex authorization. Returns true (allow) or false (deny).
// ACL Example:
// Table: incident
// Operation: write
// Role required: itil
// Condition: active=true
// Meaning: Users with 'itil' role can edit incidents, but only active ones

// ACL Script Example:
// Allow editing only if the incident belongs to the user's assignment group
answer = gs.getUser().isMemberOf(current.assignment_group);

Evaluation Order

  • ACLs are matched from most specific to least specific — the first match at each level is the one that gets evaluated:
  • incident.caller_id — field-level ACL (most specific)
  • incident.* — table-level ACL
  • *.* — global ACL (least specific)
  • To reach a field, the user must pass both the matching field-level ACL and the matching table-level ACL. But when several ACLs match at the same point (e.g., two ACLs on incident.caller_id), passing any one of them grants access (OR) — so adding another ACL at the same level can actually loosen access.

Key Facts for Interviews

  • Deny by default: If no ACL grants access, access is denied. Unlike some systems where everything is open unless restricted.
  • Admin bypasses ACLs: Users with the admin role skip ACL checks entirely (unless the ACL script explicitly handles admin).
  • Applies everywhere: ACLs enforce on UI, REST API, list views, reports, exports — not just forms.
💡 Interview Tip

The classic trick question: 'If I create a read ACL on the incident table requiring the itil role, and another read ACL on incident.priority requiring the incident_manager role — what happens when a user with only the itil role opens an incident?' Answer: They can see the incident (table ACL passes) but the priority field will be hidden/empty (field ACL fails). Both ACLs evaluate independently.