Skip to content
atlas

Role-based access control (RBAC)

Also known as: RBAC

Giving permissions to job roles rather than to individual people, and then giving people the roles that fit their job.

Draft - this entry has not been reviewed yet.

Formal

A form of access control in which permissions are attached to named roles, such as “accountant” or “nurse”, and accounts receive permissions only by being assigned one or more roles.

In plain English

Like staff uniforms in a hotel - the uniform, not the person, decides which areas you may enter, and a new waiter simply gets the waiter's uniform.

In practice

When a new accountant starts at an auditing firm, IT adds her to the “Finance” role and she instantly gets the dozen permissions every accountant needs; when she leaves, one change removes them all.

Why it matters

Handing out permissions person by person drifts into chaos; roles keep access consistent, easy to review and in line with least privilege.

Technical deep dive

RBAC was formalised in a 1992 paper by David Ferraiolo and Richard Kuhn of NIST and extended by Sandhu and colleagues in the RBAC96 family of models. NIST's unified model was adopted as ANSI INCITS 359-2004 in February 2004.The standard defines four components. Core RBAC consists of the sets USERS, ROLES, operations (OPS) and objects (OBS), permissions as operation-object pairs, a user-assignment relation UA between users and roles, a permission-assignment relation PA between permissions and roles, and sessions in which a user activates a subset of assigned roles. Hierarchical RBAC adds inheritance, where a senior role acquires the permissions of junior roles, in general or limited (tree-shaped) forms. Static separation of duty constrains assignment, so that no user may hold both "create supplier" and "approve payment", while dynamic separation of duty constrains which roles may be active together in one session.

Implementations vary in how faithfully they follow the model. Active Directory security groups are commonly used as roles, although strictly a group is a collection of users and a role a collection of permissions; the AGDLP pattern (accounts into global groups, global groups into domain-local groups, permissions on domain-local groups) approximates that split. Kubernetes RBAC binds Roles or ClusterRoles to subjects through RoleBindings or ClusterRoleBindings; rules are purely additive with no deny, and the escalate and bind verbs, or any binding to cluster-admin, are effectively privilege grants to watch. Azure RBAC combines role definitions with assignments at management-group, subscription, resource-group or resource scope and inherits downward. Databases, ERP systems such as SAP and SaaS applications all have their own role layers.

The recurring failure is role explosion: when context such as department, site, project and data sensitivity is encoded in role names, the number of roles approaches the number of users and the model loses its point. Role engineering tries to prevent that, top-down from job functions or bottom-up through role mining on existing entitlements. RBAC also cannot natively express rules like "only your own patients" or "only during a shift"; those need attributes or relationships, which is why ABAC (NIST SP 800-162) and ReBAC are often layered on top, with the role treated as one attribute among several.

Operationally, RBAC makes access reviews tractable: auditors certify each role's permission set once and then review who holds which roles, and separation-of-duty rules detect toxic combinations. It supports least privilege only if roles are kept narrow and personal exceptions are resisted; a few broad "power user" roles quietly undo the benefit.

What to learn first

Everything this builds on, foundations first.

  1. User account
  2. →Permission
  3. →Role-based access control (RBAC)

Relationships

Requires
Permission

Sources & further reading

Where this data comes from

This entry was drafted by an AI from the sources above and has not yet been checked by a person. Treat it as a starting point, and check anything important against the sources.

See the review queueSuggest a correction on GitHubThis term as JSON

Check yourself

Loading…

Atlas is in beta.