◇ OpenCyber Academy
Technologist · Chapter 14 · English

Chapter 14 — Privacy and data protection: methods I

Open, free learning for anyone who wants to protect people and technology. No account is required to read this text or its worked answers.

Chapter 14 — Privacy and data protection: methods I

Lesson map

Lesson 14 published. Map, example, EX040.

flowchart TD
  N0["Learning outcomes"]
  N1["14.1 The test"]
  N2["14.2 Results"]
  N3["14.3 Improvement"]
  N4["14.4 Retest"]
  N5["Lab — Completeness of an access request export"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5
  N5 --> EX["Worked example"]
  EX --> Q["Exercise EX040"]

Logical drawing

flowchart LR
  N0["Learning outcomes"]
  N1["14.1 The test"]
  N2["14.2 Results"]
  N3["14.3 Improvement"]
  N4["14.4 Retest"]
  N5["Lab — Completeness of an access request export"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> Q["EX040"]
[Learning outcomes]
    |
    v
[14.1 The test]
    |
    v
[14.2 Results]
    |
    v
[14.3 Improvement]
    |
    v
[14.4 Retest]
    |
    v
[Lab — Completeness of an access request export]
    |
    v
[Worked example] --> [Exercise EX040]

Learning outcomes

You will (1) test the completeness of an access request response; (2) find systems missed; (3) improve the process.

14.1 The test

Aisha tests Quayside's access request process with a synthetic member. The first export searches membership, app profile and payments. She compares it with all systems holding data for that member. She creates a synthetic member who uses the app, books classes, chats with support, appears in a CCTV index entry and receives marketing. She then submits an access request through the normal channel and waits for the response that a real member would receive, so she can see the process as members experience it rather than as staff describe it.

14.2 Results

The lab shows that the export covered 47 of 287 records, 16%, in three of seven systems. Workout history, CCTV index, chat support and marketing were missed. Article 15 requires access to all personal data held. The response team searched the systems they knew best and missed the others because no list told them where member data lived. Workout history, the largest set of records, was missing because it sits in a separate app database. The missing CCTV index and chat transcripts were held by vendors and needed requests to those vendors, which nobody had asked them to provide.

14.3 Improvement

Aisha creates a checklist of systems from the inventory and assigns an owner for each search. EDPB Guidelines 01/2022 help define what must be included. The checklist lists each system, the search method, the owner, the expected time and any redaction needs. CCTV footage needs other people blurred, and chat transcripts may mention staff. The response team now records which systems were searched for each request. This record also shows the supervisory authority, if asked, how Quayside meets its obligation under Article 15. It is kept for two years.

14.4 Retest

After changes, a second test covers all seven systems. Mr. Reilly notes that end-to-end tests with synthetic members reveal gaps that procedure documents hide. The second synthetic member's response includes all seven systems and arrives within the one-month deadline. The team notes that the vendor searches take the longest, so they now start those on day one. Aisha recommends repeating the test twice a year and after any new system is added, because new systems are the most likely place for gaps to reappear.

Lab — Completeness of an access request export

# Access request completeness: which systems hold data for a synthetic member, and which did the first export search?
holding = {"membership": 14, "app profile": 9, "workout history": 220, "CCTV index": 3, "chat support": 6, "marketing": 11, "payments": 24}
searched = {"membership", "app profile", "payments"}
found = sum(v for k, v in holding.items() if k in searched); total = sum(holding.values())
for k, v in holding.items(): print(f"{k:16s} records {v:4d} {'searched' if k in searched else 'MISSED'}")
print(f"first export covered {found} of {total} records ({found/total:.0%}) in {len(searched)} of {len(holding)} systems")

Run with python3 lab_sar.py. Verified output:

membership       records   14 searched
app profile      records    9 searched
workout history  records  220 MISSED
CCTV index       records    3 MISSED
chat support     records    6 MISSED
marketing        records   11 MISSED
payments         records   24 searched
first export covered 47 of 287 records (16%) in 3 of 7 systems

Worked example

Aisha finds the first export covered 47 of 287 records (16%) in three of seven systems, adds an inventory-based checklist and confirms full coverage on retest.

Synthetic case. The member is synthetic; GDPR Article 15 and EDPB Guidelines 01/2022 are real.

Errors and limits

CCTV footage requires redaction of other people before disclosure.

Exercises

Continue studying — lesson 14 (chapter 14 of 30)

← Chapter 13 · Course chapter index · Chapter 15 →

Continue to the next authored lesson.

Worked answers

EX040. 47 of 287 (16%).

EX041. Workout history and chat support (also CCTV index and marketing).

EX042. A checklist from the inventory with an owner per system.