CISSP-114 · Lesson 7 of 12 · 31 min
Authorization and access control models
Authentication tells a system who is asking; authorization decides what that subject may do. Every operating system, database, application and cloud platform makes thousands of authorization decisions a second, and the model behind those decisions determines how manageable, auditable and secure access will be. This lesson covers the access control matrix and its two implementations, then the classic models the exam expects you to distinguish: discretionary, mandatory, role-based, rule-based, attribute-based and risk-based access control, along with content- and context-dependent controls. The formal security models that underpin mandatory access control, such as Bell-LaPadula, Biba, Clark-Wilson and Brewer-Nash, are covered in depth in CISSP-112; here we focus on how organizations choose and apply access control models.
The access control matrix
Conceptually, every authorization system can be described by an access control matrix: a table with a row for each subject, a column for each object and, in each cell, the rights that subject holds over that object. Real systems never store the full matrix, because it would be enormous and mostly empty. Instead they store it by column or by row. An access control list, ACL, stores a column: attached to each object is the list of subjects and their rights, as with file system permissions or a firewall rule base. A capability list stores a row: attached to each subject is the list of objects it may use and how, as with Kerberos tickets, OAuth tokens or a cloud role's policy. ACLs make it easy to answer who can access this object; capability lists make it easy to answer what this subject can access, and to revoke or delegate a subject's rights as a whole.
matrix = {
'priya': {'payroll.xlsx': 'r', 'budget.xlsx': 'rw', 'hr-db': ''},
'marco': {'payroll.xlsx': 'rw', 'budget.xlsx': 'r', 'hr-db': 'r'},
'svc-etl': {'payroll.xlsx': '', 'budget.xlsx': '', 'hr-db': 'rw'},
}
print('ACLs (stored with each object):')
for obj in ['payroll.xlsx', 'budget.xlsx', 'hr-db']:
acl = [f'{s}:{rights[obj]}' for s, rights in matrix.items() if rights[obj]]
print(f' {obj:13s} {acl}')
print('Capability lists (stored with each subject):')
for subj, rights in matrix.items():
caps = [f'{o}:{r}' for o, r in rights.items() if r]
print(f' {subj:8s} {caps}')
cells = sum(len(r) for r in matrix.values())
filled = sum(1 for r in matrix.values() for v in r.values() if v)
print(f'Matrix cells: {cells}, non-empty: {filled}')
print(f'At 20,000 users and 2 million objects the full matrix would have {20_000 * 2_000_000:,} cells')ACLs (stored with each object): payroll.xlsx ['priya:r', 'marco:rw'] budget.xlsx ['priya:rw', 'marco:r'] hr-db ['marco:r', 'svc-etl:rw'] Capability lists (stored with each subject): priya ['payroll.xlsx:r', 'budget.xlsx:rw'] marco ['payroll.xlsx:rw', 'budget.xlsx:r', 'hr-db:r'] svc-etl ['hr-db:rw'] Matrix cells: 9, non-empty: 6 At 20,000 users and 2 million objects the full matrix would have 40,000,000,000 cells
Discretionary access control
In discretionary access control, DAC, the owner of an object decides who may access it. The creator of a file is usually its owner and can grant read or write rights to colleagues, and those colleagues may in turn be able to pass the access on. File sharing in Windows, Unix permissions and most collaboration tools are discretionary. DAC is flexible and familiar, and it suits environments where users are trusted to manage their own information. Its weaknesses are that access spreads in ways the organization cannot see or control, that users make mistakes such as sharing a folder with everyone, and that malicious software running as a user inherits that user's ability to change permissions. Identity-based access control and user-directed access control are closely related terms.
Mandatory access control
In mandatory access control, MAC, the system enforces access based on security labels, and users cannot change the rules even for objects they create. Each subject has a clearance and each object has a classification, typically a hierarchical level such as Confidential, Secret or Top Secret plus non-hierarchical compartments or categories, such as a project name. A subject may read an object only if its clearance dominates the object's label: its level is at least as high and it holds every compartment on the object. The set of labels forms a lattice, which is why MAC is sometimes called lattice-based access control. MAC enforces need to know through compartments as well as clearance through levels.
LEVELS = {'Unclassified': 0, 'Confidential': 1, 'Secret': 2, 'Top Secret': 3}
def dominates(subject, obj):
(slevel, scomp), (olevel, ocomp) = subject, obj
return LEVELS[slevel] >= LEVELS[olevel] and set(ocomp) <= set(scomp)
analyst = ('Secret', {'ARCTIC', 'COASTAL'})
docs = {
'patrol schedule': ('Secret', {'ARCTIC'}),
'port assessment': ('Confidential', {'COASTAL'}),
'satellite imagery': ('Top Secret', {'ARCTIC'}),
'budget annex': ('Secret', {'ARCTIC', 'FINANCE'}),
}
for name, label in docs.items():
verdict = 'read permitted' if dominates(analyst, label) else 'denied'
print(f'{name:18s} {label[0]:12s} {sorted(label[1])!s:22s} -> {verdict}')patrol schedule Secret ['ARCTIC'] -> read permitted port assessment Confidential ['COASTAL'] -> read permitted satellite imagery Top Secret ['ARCTIC'] -> denied budget annex Secret ['ARCTIC', 'FINANCE'] -> denied
MAC is used where confidentiality is paramount and central control is required: military and intelligence systems, and operating systems with mandatory controls such as SELinux, which labels every process and file and enforces policy even against root. Its strengths are consistency and resistance to user error and malware; its weaknesses are rigidity, administrative cost and difficulty supporting collaboration. Bell-LaPadula formalizes MAC for confidentiality, with no read up and no write down; Biba formalizes it for integrity, with no read down and no write up. Remember that labels describe the information, not the container: a document's classification travels with it.
Role-based access control
Role-based access control, RBAC, assigns permissions to roles that reflect job functions, and assigns users to roles. Accounts payable clerk, nurse, help desk analyst and database administrator are typical roles. When a person joins, moves or leaves, administrators change role membership rather than individual permissions, which is far easier to manage and audit. The NIST model, standardized as ANSI INCITS 359, defines core RBAC, where users get permissions only through roles; hierarchical RBAC, where senior roles inherit the permissions of junior ones; and constrained RBAC, which adds separation of duties. Static separation of duties prevents a user from being assigned to two conflicting roles at all, such as payment requester and payment approver; dynamic separation of duties allows both role assignments but prevents the user from activating both in the same session or transaction.
RBAC's main difficulty is role design. Too few roles, and users get more access than they need; too many, and the model becomes as complex as individual permissions, a problem called role explosion. Organizations often start with role mining, analyzing existing permissions to find natural clusters, and then refine roles with business owners. A sensible rule is that roles should describe stable job functions, while temporary or exceptional needs are handled with time-limited grants or attributes.
Worked problem
Role explosion
A hospital defines roles as job title combined with ward and shift: 12 job titles, 18 wards and 3 shifts. How many roles result, and how could attributes reduce the count?
Show solution
- Combining every dimension gives \(12 \times 18 \times 3 = 648\) roles to define, assign and review.
- Many roles differ only in which ward's patients the user may see or when.
- Keep 12 roles for job function, which determine what kinds of action are allowed, such as prescribing or charting.
- Express ward and shift as attributes evaluated at decision time: a nurse may access a patient's chart if the nurse's current assignment matches the patient's ward, during an active shift.
Answer: Twelve roles plus two attributes replace 648 roles. This hybrid of RBAC for function and ABAC for context is common in practice and is covered further in lesson 8.
Rule-based access control
Rule-based access control applies global rules to all subjects, regardless of who they are. A firewall that permits HTTPS from any address and denies everything else, a system that allows logins only between 07:00 and 19:00, or a mail gateway that blocks attachments of certain types are rule-based. The abbreviation RBAC is ambiguous, so the exam usually spells out role-based or rule-based; read carefully. Rule-based controls are simple and effective for uniform policies, but they cannot easily express exceptions for individuals without becoming long and fragile.
Attribute-based access control
Attribute-based access control, ABAC, described in NIST SP 800-162, makes decisions by evaluating policies over attributes of the subject, the object, the action and the environment. Subject attributes include department, clearance, role and training status; object attributes include classification, owner and data type; action attributes identify what is attempted; environment attributes include time, location, device health and current threat level. A policy might say that an employee may read a customer record if the employee's region equals the customer's region, the employee completed privacy training in the past year and the request comes from a managed device. ABAC is very expressive and handles context naturally, which is why it underpins zero trust and modern cloud authorization, but policies can become hard to understand and test, and the decision depends on accurate attributes.
| Model | Who decides | Basis for decision | Strengths | Weaknesses |
|---|---|---|---|---|
| Discretionary (DAC) | Object owner | Owner's grants, identity | Flexible, familiar | Uncontrolled spread; malware inherits user power |
| Mandatory (MAC) | The system, by central policy | Labels: clearance and classification | Consistent; resists user error and malware | Rigid, costly to administer |
| Role-based | Administrators via role design | Job function | Scales; easy reviews and moves | Role explosion; coarse for context |
| Rule-based | Administrators via global rules | Conditions applying to everyone | Simple, uniform | Poor at individual exceptions |
| Attribute-based (ABAC) | Policy engine | Attributes of subject, object, action, environment | Fine-grained, context-aware | Complex policies; needs reliable attributes |
| Risk-based (adaptive) | Policy engine with analytics | Real-time risk score | Balances security and usability | Opaque; depends on good signals |
Risk-based, content-dependent and context-dependent control
Risk-based or adaptive access control calculates a risk score for each request from signals such as device posture, location, network reputation, impossible travel, time of day and user behavior, and then allows the request, requires step-up authentication or denies it. Conditional access policies in cloud identity platforms are a common implementation. Its benefit is that low-risk requests flow smoothly while unusual ones get more scrutiny; its risk is that scoring models can be opaque or wrong, so decisions need logging and periodic review.
Content-dependent access control decides based on the data itself: a database view that shows a manager only the salaries of their own department, or a data loss prevention rule that blocks documents containing credit card numbers. Context-dependent access control decides based on the circumstances of the request or the sequence of actions, such as allowing a purchase approval only after a purchase order exists, or allowing access only from a particular terminal. Both are often implemented with ABAC policies today.
Worked problem
Choosing a model
A defense contractor handles Secret project data for two separate government programs, ordinary corporate files and a customer-facing web application. Which access control models fit each, and why?
Show solution
- Secret program data: MAC, with clearances and program compartments enforced by the system, because users must not be able to share data across programs or with uncleared staff, and contracts require it.
- Corporate files: RBAC for departments and functions, with limited discretionary sharing inside teams and periodic review.
- Web application for customers: ABAC or rule-based policies, so customers see only their own orders, with risk-based step-up for changes to payment details.
- Across all three: unique identities, least privilege and logging.
Answer: Organizations rarely use one model. They choose the model that matches each asset's sensitivity, regulatory requirements and need for flexibility.
Implementing authorization well
Whatever the model, a few principles make authorization effective. Default deny means that anything not explicitly allowed is refused. Complete mediation means that every access is checked, not only the first; caching a decision for too long, or checking only on the login page, leaves gaps. Centralize policy where possible, but enforce it close to the resource, so that a compromised front end cannot bypass checks by calling the back end directly. Broken access control, where applications fail to enforce authorization on every request, has topped the OWASP Top 10 list of web application risks since 2021, typically through insecure direct object references such as changing an account number in a URL. Log authorization decisions, especially denials and privileged actions, and review them.
Worked problem
An insecure direct object reference
A utility's billing portal shows invoices at a URL ending /invoice?id=884213. A customer changes the number to 884214 and sees a neighbor's bill. What failed, and how should it be fixed?
Show solution
- Authentication worked: the customer was signed in.
- Authorization failed: the server returned an object without checking that the authenticated customer owns it.
- Fix by checking ownership on every request on the server side, for example retrieving the invoice only where invoice.customer_id equals the session's customer ID.
- Unpredictable identifiers make guessing harder but are not a substitute for the check; add logging and alerts for repeated denied object requests.
Answer: This is broken access control. Every request for an object must be authorized for that subject and that object, not merely for any signed-in user.
Thinking like a manager
Expect questions that describe a situation and ask which model fits, or which model is in use. Clues help: owner decides is DAC; labels and clearances are MAC; job functions are role-based; global conditions are rule-based; attributes and policies are ABAC; real-time scoring is risk-based. Expect also questions about separation of duties within RBAC and about broken access control in applications. The manager's answer combines a model that suits the data with least privilege, default deny, complete mediation and review.
Common mistakes
MistakeConfusing rule-based with role-based access control.
InsteadRule-based applies global conditions to everyone; role-based grants permissions through job roles.
MistakeCreating a new role for every combination of job, location and shift.
InsteadKeep roles for stable functions and express context as attributes.
MistakeChecking authorization only on the login page or in the user interface.
InsteadEnforce authorization on every request, on the server, close to the resource.
MistakeAssuming MAC lets data owners change classifications freely.
InsteadUnder MAC, labels and rules are set by central policy and enforced by the system.
MistakeRelying on unguessable identifiers instead of ownership checks.
InsteadCheck that the subject is allowed to access the specific object every time.
Summary and key terms
- The access control matrix is implemented as ACLs, per object, or capability lists, per subject.
- DAC lets owners decide; it is flexible but spreads access uncontrollably.
- MAC enforces labels centrally; access requires dominance of level and compartments.
- Role-based control grants permissions through job roles, with static and dynamic separation of duties.
- Rule-based control applies global rules; ABAC evaluates attributes of subject, object, action and environment.
- Risk-based control scores each request and can allow, step up or deny.
- Default deny and complete mediation prevent broken access control, the top OWASP web risk since 2021.
- Access control matrix
- A table of subjects, objects and the rights each subject holds over each object.
- Access control list
- The list of subjects and rights attached to an object.
- Capability list
- The list of objects and rights held by a subject.
- Discretionary access control
- Access decided by the object's owner.
- Mandatory access control
- Access enforced by the system from security labels.
- Role-based access control
- Permissions assigned to roles that represent job functions.
- Attribute-based access control
- Policy-driven decisions over attributes of subject, object, action and environment.
- Static separation of duties
- Preventing assignment of conflicting roles to one user.
- Dynamic separation of duties
- Preventing activation of conflicting roles in the same session.
- Complete mediation
- Checking every access request, not only the first.
Practice problems
Work each problem on paper first, then reveal the answer to check.
Which implementation of the access matrix is attached to each object?
Show answer
An access control list.
Which model lets a file creator grant access to colleagues?
Show answer
Discretionary access control.
What two conditions make a clearance dominate a label?
Show answer
A level at least as high and every compartment on the label.
What is role explosion?
Show answer
A proliferation of roles that makes RBAC as complex as individual permissions.
Which kind of separation of duties allows both role assignments but not in the same session?
Show answer
Dynamic separation of duties.
Which NIST publication describes ABAC?
Show answer
NIST SP 800-162.
A firewall rule set is an example of which model?
Show answer
Rule-based access control.
What is complete mediation?
Show answer
Checking authorization on every access.
What is an insecure direct object reference?
Show answer
Accessing an object by changing its identifier because the server does not check ownership.
Which model enforces policy even against root on SELinux systems?
Show answer
Mandatory access control.
Lesson quiz · 5 questions
Score 60% or more to complete this lesson.
Create a free account to save your progress, take quizzes and earn a certificate.