A data platform labels tables as public internal confidential or restricted in its catalogue. Six months on an auditor finds restricted columns in a dashboard that 400 people can open. Which control would have actually prevented it?
Show the full answer Hide the answer
The deciding property
A classification is metadata. Metadata changes nothing about what a query returns unless something in the read path consults it. The only control in the list that sits in the read path is the policy bound to the tag and applied by the engine, which masks or denies the column for callers without the entitlement. Everything else is detection or exhortation after the fact.
The tell is the timeline: six months elapsed. Controls that operate at human speed cannot prevent a mistake made at query speed; they can only find it later.
Why this one works
The engine already resolves every column in every query. Attaching policy to the tag means:
- New tables inherit enforcement the moment they are tagged, rather than when someone remembers to grant.
- A copy of the data carries its tag if the platform propagates tags through lineage, which is what stops the classic evasion of copying a restricted column into a new table.
- The dashboard's 400 viewers see masked values without the dashboard being changed, because enforcement is at read time and per caller.
The cost is real: a policy engine in the query path, tag propagation through lineage, and a period where teams discover their pipelines were silently relying on access they should not have had.
Why the other options fail
- Training changes intent, not capability. The person who built the dashboard may have had no idea the column was restricted, and training does not remove their permission to select it. It is necessary and it is not a control.
- Quarterly access review is detection with a 90-day window and a heavy manual cost. It is what found this problem. It is also how a reviewer ends up approving access they do not understand, because reviews at this scale become rubber stamps.
- Scanning and alerting the owner is the most tempting wrong answer, because it is automated and feels preventive. It is not: the data is already exposed when the alert fires, the owner may not act, and scanners generate enough false positives that alerts get filtered. Scanning is valuable for finding unclassified sensitive data, which is a different job from enforcing a classification that already exists.
What to build first, if you cannot build everything
- Tag the few genuinely restricted columns, not everything. A four-level scheme applied to 40000 columns produces a taxonomy nobody maintains.
- Bind one policy to the top tag - deny or mask unless the caller holds a named entitlement - and enforce it in the engine.
- Propagate tags through lineage so derived tables inherit them. Without this, the first
CREATE TABLE AS SELECTlaunders the classification. - Log policy decisions, so the auditor's question is answered by a query rather than an investigation.
When this is the wrong answer
If the platform has one small team with uniform access to everything, tag-bound policies add machinery that protects against nobody. Classification pays when the set of people who can query exceeds the set who should see every column, which is a threshold most platforms cross at somewhere around 30 to 50 consumers, and it is unavoidable once an external auditor or a regulated data category is involved.