So you're staring at four access control models—DAC, MAC, RBAC, and ABAC—and you need to pick one. Which one should you actually deploy?
Here's the blunt answer: almost nobody should pick just one. Start with RBAC as your baseline, layer ABAC on top for context-aware decisions, and only add MAC if you're handling classified data. DAC is a legacy default you inherit, not a strategy you choose. If you're building greenfield today, RBAC + ABAC is the answer.
I know that sounds like a cop-out. It isn't. Let me show you why the single-model framing is the trap, and how to actually decide.
Why 'Pick One Model' Is the Wrong Question
These models aren't competing products. They're abstractions at different layers. DAC and MAC describe who sets policy—the resource owner or a central authority. RBAC and ABAC describe how policy is expressed—through roles or through attributes. That's why the comparison that matters is about control structure, not feature checkboxes: DAC is decentralized and flexible, MAC is centralized and restrictive, RBAC scales well for defined job roles, and ABAC is context-aware and granular (Cisco Duo).
Once you see that, the question changes. You're not choosing between four doors. You're choosing how to express authorization in a system that will outlive whoever designed it.
The Real Decision: How Do You Express Permission?
If your org has stable job functions—finance analyst, support rep, warehouse lead—RBAC is the right default. Permissions attach to roles, and users inherit permissions by being assigned roles, not by getting individual grants (Tenable). That single design choice is what makes RBAC scale: when a support rep leaves, you remove one role assignment instead of auditing forty resource-level permissions.
The ANSI INCITS 359 standard, developed by NIST, treats Core RBAC—user-role and permission-role assignments—as the mandatory minimum for any RBAC system (NIST RBAC). If your "RBAC" is really just groups with permissions bolted on, you may not have RBAC at all.
Here's where people get lazy: they stop at RBAC and wonder why it can't answer "should this contractor access this record from an unmanaged device at 2 a.m.?" It can't. That's not a role question. That's a context question, and context is what ABAC is for.
ABAC evaluates attributes of the subject, object, action, and environment—think time or location—to make fine-grained authorization decisions (Cisco Duo). NIST SP 800-162 frames it as evaluating attributes against policies, rules, or relationships that describe allowable operations for a given set of attributes (NIST SP 800-162). In practice, that's how you say: "allow if the user is in the finance role, the record belongs to their region, and the device is compliant."
That's the layering. RBAC answers who. ABAC answers under what conditions.
When You Genuinely Need MAC (and When You Don't)
MAC uses a central authority to assign security labels or clearance levels to both subjects and objects, and the system enforces access regardless of owner preference (Cisco Duo). It's common in government, military, and regulated environments with tiered clearances, often using rules like "no read-up, no write-down" (Cisco Duo).
If you're a SaaS company, you almost certainly don't need MAC. If you're handling classified material with formal clearance tiers, you probably do—and you already know it, because someone handed you a policy document about it.
Quick tip: If you can't name the classification authority who'd assign your labels, you don't have a MAC use case—you have a compliance checkbox.
The Comparison That Actually Helps
Forget the marketing pages. Here's how the four models line up on the dimensions that decide real deployments.
| Model | Who Sets Policy | Granularity | Scales For | Watch Out For |
|---|---|---|---|---|
| DAC | Resource owner (via ACLs) | Per-resource | Small teams, Unix/Linux file permissions | Owner drift, permission sprawl |
| MAC | Central authority (labels) | Label-based | Classified/regulated environments | Administrative overhead, rigidity |
| RBAC | Role administrators | Role-level | Defined job functions at scale | Role explosion, doesn't see context |
| ABAC | Policy authors | Attribute-level, context-aware | Fine-grained, dynamic decisions | Policy complexity, testing burden |
Notice DAC never appears as a strategy column you'd choose. It's the default you get when nobody centralizes anything. Unix file permissions are DAC. They're fine. They're also not an access control architecture.
Where Zero Trust Forces the Issue
Zero trust architecture grants no implicit trust to assets or user accounts based solely on physical or network location or asset ownership (NIST SP 800-207). Access to individual enterprise resources is granted per-session and determined by dynamic policy considering the state of the user, device, and environment (NIST SP 800-207).
Read that again, because it kills the RBAC-only answer. Per-session, dynamic, environment-aware—that is ABAC's job description. RBAC gives you the durable role structure; ABAC supplies the runtime decision. The architecture relies on a Policy Decision Point—a Policy Engine and Policy Administrator—plus a Policy Enforcement Point that executes the decisions (NIST SP 800-207).
And this isn't theoretical. OMB Memorandum M-22-09 directed U.S. federal agencies to adopt zero trust principles and required goals including phishing-resistant multi-factor authentication by the end of fiscal year 2024 (OMB M-22-09). If your authorization model can't express "this session, this device, this risk level," you're not going to meet that bar.
How to Implement the Layered Model Without Making a Mess
You need a few practical guardrails:
- Define roles around job functions, not org-chart accidents or individual people.
- Write ABAC policies as if-then statements with explicit conditions, and test them like code.
- Enforce least privilege everywhere—grant only the permissions required to perform a task (AWS IAM).
- Apply separation of duties so no single person holds enough access to commit damaging fraud (NIST SP 800-53).
- Use just-in-time activation for privileged roles rather than standing access—PIM does exactly this with time-bound assignments and approval to activate (Microsoft PIM).
That last one matters more than people admit. Privileged accounts are the keys to the kingdom, and PAM controls like credential vaulting with password rotation, just-in-time access, session recording, and MFA for privileged sessions exist precisely because standing privilege is how breaches get big (NIST PAM).
And if you're running RBAC seriously, use the standard's separation-of-duty tools: static separation of duty prevents assigning a user to conflicting roles, and dynamic separation of duty prevents activating conflicting roles within a single session (NIST RBAC). Those two controls are free if you build them in early, and expensive to retrofit.
One concrete example. Suppose a support engineer needs to issue refunds. In a naive DAC world, someone shares a folder and grants her write access. In RBAC, she gets the "Refunds" role, which carries the refund permission. In the layered model, ABAC adds: only during her shift, only from a compliant device, only up to the threshold her role permits. If she's compromised on a personal laptop at midnight, the policy denies it—and nobody had to manually revoke anything.
The Takeaway
Stop shopping for a single access control model. Choose RBAC as your baseline so permissions scale with job functions, layer ABAC on top so authorization can respond to context, and reserve MAC for genuinely classified environments. DAC is what you inherit, not what you architect. Build roles carefully, write ABAC policies with the discipline you'd apply to code, enforce least privilege and separation of duties, and make privileged access just-in-time rather than permanent. Do that, and you'll have an access control model that survives audits, reorganizations, and the next zero-trust mandate—without a rewrite.
Sources
- Cisco Duo - https://duo.com/learn/access-control-models
- NIST SP 800-207 - https://csrc.nist.gov/pubs/sp/800/207/final
- NIST RBAC (INCITS 359) - https://csrc.nist.gov/projects/role-based-access-control
- NIST SP 800-162 (ABAC) - https://csrc.nist.gov/pubs/sp/800/162/final
- Microsoft PIM - https://learn.microsoft.com/en-us/entra/id-governance/privileged-identity-management/pim-configure
Comments (0)
Please sign in to post a comment.
Don't have an account? Create one
No comments yet. Be the first to comment!