> Propagating
← All 50 Days
Day 24 of 50
D2: Account & Governance Week 4
DAY 24

Object Tagging, Data Classification & Trust Center in Snowflake

Sub-objective 2.2 lists three governance features that work together but answer different questions. Object tagging labels objects with metadata. Data classification auto-detects which columns hold sensitive data and tags them for you. Trust Center evaluates the whole account against security best practices. Two of these are direct C03 sample-question topics. Classification is sample question one, Trust Center is sample question three. Tagging is the layer that ties yesterday’s tag-based masking from Day 23 to today’s classification.

📘

Today’s Concept

Micro-Concept 1: Object Tagging, Metadata for Governance

A tag is a schema-level object that stores a string label. You attach it to another object as a key and value pair. The key is the tag name. The value is whatever string you assign at the point of attachment.

Tags attach to almost anything: an account, a database, a schema, a table, a view, a column, a warehouse, even a user. You create one with CREATE TAG and attach it with ALTER ... SET TAG. One tag definition can be reused across thousands of objects with different values each time.

Two functions read tags back. SYSTEM$GET_TAG returns the value on one object. The TAG_REFERENCES table function lists every object carrying a tag. Tagging powers two governance jobs: finding sensitive data later, and driving the tag-based masking you met on Day 23.

Snowflake supports two operating models. A centralized model gives one tag_admin role the power to create and apply every tag. A decentralized model lets teams apply tags while the admin role still owns tag creation, keeping names consistent. Both appear in scenario questions about who should own tagging.

Micro-Concept 2: Tag Inheritance, Also Called Tag Lineage

Tag inheritance follows the securable object hierarchy. A descendant inherits any tag set on an ancestor. Tag a database, and every schema, table, and column inside it carries that tag. This single behaviour is why one tag can cover a huge surface.

Snowflake calls this propagation down the container hierarchy tag lineage. Tag a table, and all of its columns inherit the tag automatically. You do not re-apply it per column. The inherited value flows from the highest point where the tag was set.

An inherited value can be overridden lower down. Set the same tag explicitly on a column with a more specific value, and that value wins for the column. This is the same most-specific-wins idea as parameter precedence on Day 6, applied to metadata instead of settings.

One limit catches careful candidates. Inheritance does not reach nested objects built from a tagged object. A materialized view does not inherit tags from the base table it reads. That requires automatic tag propagation, a separate feature, not plain inheritance.

To audit tags with inheritance included, use TAG_REFERENCES_WITH_LINEAGE in the ACCOUNT_USAGE schema. The plain TAG_REFERENCES view shows only direct assignments. The lineage version shows direct plus inherited. The exam tests which one surfaces inherited tags.

Micro-Concept 3: Data Classification, Auto-Detecting Sensitive Columns

Data classification scans a table and identifies columns that hold personal data. It samples the column values, matches them against known patterns, and recommends a category. This is the feature behind C03 sample question one, where a compliance analyst needs to find sensitive data automatically.

Classification assigns two system tags to each detected column. The SEMANTIC_CATEGORY tag names the type of data, such as NAME or EMAIL. The PRIVACY_CATEGORY tag names the sensitivity, one of IDENTIFIER, QUASI_IDENTIFIER, or SENSITIVE.

SQL
-- Analyze a table and return recommended categories
SELECT EXTRACT_SEMANTIC_CATEGORIES('my_db.my_schema.customers');

-- Apply the recommended system tags to the columns
CALL ASSOCIATE_SEMANTIC_CATEGORY_TAGS(
  'my_db.my_schema.customers',
  EXTRACT_SEMANTIC_CATEGORIES('my_db.my_schema.customers'));

Two facts matter here. The EXTRACT_SEMANTIC_CATEGORIES function needs a running warehouse, because it samples and scans data. And classification is an Enterprise Edition feature, the same floor as masking and tagging.

The newer way to run classification is a classification profile, created with SNOWFLAKE.DATA_PRIVACY.CLASSIFICATION_PROFILE. A profile classifies data automatically on a schedule and can be configured from the Trust Center interface. The function-based path above still works and is easier to demonstrate in a single lab.

Classification connects straight to Day 23. Once a column carries a classification tag, a tag-based masking policy keyed on that tag protects it with no per-column work. Detect, tag, mask: the tag is the bridge between finding sensitive data and protecting it.

Micro-Concept 4: Trust Center, Evaluating Your Security Posture

Trust Center is a built-in tool that checks your account against security best practices. It lives in Snowsight under Governance and security. This is the feature behind C03 sample question three, where the requirement is to evaluate the account against security recommendations.

The engine is a set of scanners. A scanner is a background process that inspects account configuration or activity for risk. Scanners are grouped into scanner packages. The findings appear as violations, each with a plain explanation and a suggested fix.

Three packages appear in questions. Security Essentials is the only package enabled by default. CIS Benchmarks checks the account against the Center for Internet Security Snowflake benchmarks. Threat Intelligence surfaces risks from anomalous activity. The other two stay off until an admin enables them.

Access is role-gated. The SNOWFLAKE.TRUST_CENTER_ADMIN application role manages scanners and schedules. The SNOWFLAKE.TRUST_CENTER_VIEWER role reads findings only. Trust Center reads metadata to confirm a configuration exists. It does not prove that the configuration is effective, a distinction worth keeping straight.

Micro-Concept 5: Data Lineage Through ACCESS_HISTORY

The fourth governance question in this area is data lineage: knowing what data was read and written, and how it flowed. The answer in Snowflake is the ACCESS_HISTORY view in the ACCOUNT_USAGE schema. It records the read and write history of objects touched by queries.

ACCESS_HISTORY requires Enterprise Edition or higher. This is verified by a SnowPro practice question on the minimum edition for the view. Standard accounts cannot use it, which is itself a recurring trap when a stem lists features by edition.

The view ties governance together. Tags tell you which columns are sensitive. Classification finds them. Masking and row access protect them. ACCESS_HISTORY then tells you who actually queried them, and column-level lineage shows where the data moved. Day 27 returns to this view for cost and audit work.

Cheat Sheet

TopicWhat to rememberExam keyword
Tag basicsSchema-level object. A key plus a string value. Attaches to objects, columns, even users“Metadata label”
Tag inheritanceDescendant inherits ancestor’s tag. Table tag flows to all its columns“Tag lineage”
OverrideSet the tag explicitly lower down with a more specific value. Most-specific wins“Override inherited value”
Nested-object limitA materialized view does NOT inherit the base table’s tags. That needs auto propagation“No nested inheritance”
Audit with inheritanceTAG_REFERENCES_WITH_LINEAGE includes inherited tags. TAG_REFERENCES shows direct only“With lineage”
Data classificationAuto-detects sensitive columns by sampling values. Needs a running warehouse“Auto-detect PII”
Classification tagsApplies SEMANTIC_CATEGORY (type) and PRIVACY_CATEGORY (IDENTIFIER / QUASI_IDENTIFIER / SENSITIVE)“Two system tags”
Trust CenterEvaluates the account against best practices using scanners in scanner packages“Security posture”
Default packageSecurity Essentials is on by default. CIS Benchmarks and Threat Intelligence start off“Security Essentials”
Trust Center rolesTRUST_CENTER_ADMIN manages scanners. TRUST_CENTER_VIEWER reads findings“Admin manages scanners”
Data lineageACCESS_HISTORY in ACCOUNT_USAGE records reads and writes. Enterprise+ only“ACCESS_HISTORY”
🎯

Exam Tip

🎯 Exam Tip

This area hands you two sample-question answers if you match the verb in the stem to the right feature.

The classification verb. When a stem says “automatically detect” or “discover sensitive columns” or “identify PII without manual review”, the answer is data classification. Sample question one frames a compliance analyst this way. Watch for the word “automatically”, which points to classification, not to masking or manual tagging.

The Trust Center verb. When a stem says “evaluate the account against security recommendations” or “check configuration against best practices”, the answer is Trust Center. Sample question three is exactly this. Do not confuse it with ACCOUNT_USAGE, which stores raw history rather than scoring your posture.

The inheritance trap. A scenario tags a database and asks what the columns show. The columns inherit the database tag. Then a column is tagged directly with a different value, and that more specific value wins for the column. Pick the answer where the explicit column value overrides the inherited one.

🛠️

Hands-On Lab

Type: LAB (guided)  |  Time: ~25 minutes  |  Credits: <0.2  |  Prerequisite: Snowflake trial on Enterprise edition, lab_xs warehouse from Day 1. Run as ACCOUNTADMIN unless a step says otherwise.
1

Set up a lab table with sensitive columns.

SQL
USE ROLE ACCOUNTADMIN;
USE WAREHOUSE lab_xs;

CREATE DATABASE IF NOT EXISTS day24_lab;
CREATE SCHEMA IF NOT EXISTS day24_lab.gov;
USE SCHEMA day24_lab.gov;

CREATE OR REPLACE TABLE class_test (
  id INT, full_name STRING, email STRING, ssn STRING);

INSERT INTO class_test VALUES
  (1, 'Alice Stone', '[email protected]', '123-45-6789'),
  (2, 'Bob Reyes',   '[email protected]',   '987-65-4321'),
  (3, 'Carol Diaz',  '[email protected]', '555-11-2222');

SELECT * FROM class_test;
👀 Observe: Three rows, four columns. full_name, email, and ssn all hold personal data. This is the table classification will scan in Step 4. For now it carries no tags.
2

Create a user-defined tag and attach it to a column.

SQL
CREATE OR REPLACE TAG pii_tag
  ALLOWED_VALUES 'low', 'high';

ALTER TABLE class_test
  MODIFY COLUMN ssn SET TAG pii_tag = 'high';

-- Read the value back on the column
SELECT SYSTEM$GET_TAG('pii_tag', 'day24_lab.gov.class_test.ssn', 'COLUMN');
👀 Observe: SYSTEM$GET_TAG returns high for the ssn column. The ALLOWED_VALUES clause restricts which strings the tag accepts, which keeps tagging consistent across teams.
3

Prove tag inheritance and then override it. Tag the table, watch a column inherit, then set a more specific value.

SQL
-- Set the tag on the whole table
ALTER TABLE class_test SET TAG pii_tag = 'low';

-- email inherits 'low' from the table
SELECT SYSTEM$GET_TAG('pii_tag', 'day24_lab.gov.class_test.email', 'COLUMN');

-- Override on email with a more specific value
ALTER TABLE class_test
  MODIFY COLUMN email SET TAG pii_tag = 'high';

SELECT SYSTEM$GET_TAG('pii_tag', 'day24_lab.gov.class_test.email', 'COLUMN');
👀 Observe: The first read on email returns low, inherited from the table tag. After the explicit column tag, the second read returns high. The more specific column value wins. That is most-specific-wins applied to metadata.
4

Run data classification. Let Snowflake detect the sensitive columns for you.

SQL
-- Needs a running warehouse: it samples the data
SELECT EXTRACT_SEMANTIC_CATEGORIES('day24_lab.gov.class_test');
👀 Observe: The result is a VARIANT, one entry per column. full_name comes back with a recommended NAME semantic category, email with EMAIL, ssn with a national-identifier category, each at a confidence level. The id column is not flagged. Snowflake found the personal data without you naming it.
5

Apply the classification tags automatically. Turn the recommendations into system tags.

SQL
CALL ASSOCIATE_SEMANTIC_CATEGORY_TAGS(
  'day24_lab.gov.class_test',
  EXTRACT_SEMANTIC_CATEGORIES('day24_lab.gov.class_test'));

-- See the system tags that classification applied
SELECT * FROM TABLE(
  day24_lab.INFORMATION_SCHEMA.TAG_REFERENCES_ALL_COLUMNS(
    'day24_lab.gov.class_test', 'TABLE'));
👀 Observe: The procedure reports how many columns received each tag. The query then lists the SNOWFLAKE.CORE.SEMANTIC_CATEGORY and SNOWFLAKE.CORE.PRIVACY_CATEGORY tags now sitting on the columns. A tag-based masking policy keyed on these tags would now protect them automatically, the bridge back to Day 23.
6

Visit Trust Center. This step is in the Snowsight UI, not SQL.

👀 Do this: In Snowsight, open the navigation menu and select Governance and security > Trust Center. Open the Overview tab to see the posture summary. Open Manage scanners > Scanner packages and note that Security Essentials is enabled, while CIS Benchmarks and Threat Intelligence are off. Click into a scanner to read what it checks. This is the security-recommendation engine from sample question three.
7

Cleanup. Unset tags from columns, then drop the lab database and the tag.

SQL
USE ROLE ACCOUNTADMIN;
USE SCHEMA day24_lab.gov;

-- Drop the database: this removes the table and its tag assignments
DROP DATABASE IF EXISTS day24_lab;

-- pii_tag lived in the dropped schema, so it is gone with the database
-- Verify the Day 1 warehouse survives for tomorrow
SHOW WAREHOUSES LIKE 'LAB_XS';
👀 Observe: DROP DATABASE removes the table, the user-defined pii_tag, and every tag assignment inside the database in one step. The system classification tags live in SNOWFLAKE.CORE and are never dropped. The day10_orders table from Day 10 is untouched. lab_xs stays for tomorrow.
❄️

Snowflake Documentation

🔗

External References

Practice Questions

Options:

A. Data classification
B. Dynamic data masking
C. Object tagging applied manually
D. Row access policies

✅ Answer: A

Why A: Data classification samples column values and automatically detects personal data, then recommends semantic and privacy categories. The word “automatically detect” points straight to classification.

Why not B: Masking hides values in a column you already chose. It does not discover which columns are sensitive.

Why not C: Manual tagging is the work classification removes. The requirement explicitly rules out column-by-column review.

Why not D: Row access policies filter rows by role. They do nothing to identify sensitive columns.

Options:

A. The ACCOUNT_USAGE schema
B. Trust Center
C. A resource monitor
D. Object tagging

✅ Answer: B

Why B: Trust Center runs scanners that check the account against best practices, including CIS Benchmarks, and reports violations with suggested fixes. That is exactly “evaluate against security recommendations”.

Why not A: ACCOUNT_USAGE stores raw usage and access history. It does not score posture or recommend fixes.

Why not C: A resource monitor tracks credit consumption, not security configuration. Re-read Day 26 if this felt close.

Why not D: Tagging labels objects with metadata. It does not assess account security.

Options:

A. A tag set on a table is inherited by all columns of that table
B. An inherited tag value cannot be changed on a child object
C. Setting the tag explicitly on a column with a more specific value overrides the inherited value
D. A materialized view automatically inherits the tags of the base table it reads
E. Tag inheritance is only available in Business Critical Edition

✅ Answer: A and C

Why A: Inheritance flows down the securable object hierarchy. A table tag reaches every column in the table without re-applying it.

Why C: The most specific assignment wins. An explicit column value overrides the value inherited from the table.

Why not B: The opposite is true. The whole point of override is that a child can carry a more specific value.

Why not D: Inheritance does not reach nested objects. A materialized view needs automatic tag propagation, a separate feature.

Why not E: Tagging and inheritance require Enterprise Edition, not Business Critical.

Options:

A. QUERY_HISTORY, available in all editions
B. ACCESS_HISTORY, requiring Enterprise Edition
C. TAG_REFERENCES, available in all editions
D. LOGIN_HISTORY, requiring Business Critical Edition

✅ Answer: B

Why B: ACCESS_HISTORY records the read and write history of objects and supports column-level lineage. Its documented minimum is Enterprise Edition.

Why not A: QUERY_HISTORY shows the queries themselves but not the object-level read and write lineage ACCESS_HISTORY provides.

Why not C: TAG_REFERENCES lists tag assignments. It does not track who read the data or how it flowed.

Why not D: LOGIN_HISTORY tracks authentication events, not data access, and it is not gated to Business Critical.

Options:

A. Classification assigns a SEMANTIC_CATEGORY tag that names the type of data, such as NAME or EMAIL
B. Classification assigns a PRIVACY_CATEGORY tag whose values include IDENTIFIER and SENSITIVE
C. Classification masks the detected columns automatically with no further setup
D. Classification runs on Standard Edition and needs no warehouse
E. Classification renames the detected columns to flag them as sensitive

✅ Answer: A and B

Why A: The semantic category names the type of personal attribute, for example NAME or EMAIL, applied as the SEMANTIC_CATEGORY system tag.

Why B: The privacy category names the sensitivity. Its values are IDENTIFIER, QUASI_IDENTIFIER, and SENSITIVE.

Why not C: Classification only tags columns. Protection still needs a masking policy, though a tag-based policy can key off the classification tag. Re-read Day 23 if missed.

Why not D: Classification is Enterprise+ and the extract function needs a running warehouse to sample data.

Why not E: Classification never renames columns. It attaches tags and leaves names and data unchanged.

📝 Recap

Today you learned: Object tagging attaches a metadata label, a key and a string value, to objects and columns. Tags inherit down the securable hierarchy, so a table tag reaches all its columns. A more specific value set lower down overrides the inherited one. Inheritance stops at nested objects like materialized views, which need automatic tag propagation instead.

Data classification auto-detects sensitive columns by sampling values, then applies two system tags: SEMANTIC_CATEGORY for the type and PRIVACY_CATEGORY for the sensitivity. It needs a running warehouse and Enterprise Edition. This is sample question one. Trust Center evaluates the account against best practices using scanners grouped into packages, with Security Essentials on by default. This is sample question three.

Data lineage comes from the ACCESS_HISTORY view in ACCOUNT_USAGE, an Enterprise+ feature that records reads and writes. Together these features detect, label, protect, and audit sensitive data, building on the tag-based masking from Day 23.

Tomorrow (Day 25): Encryption, Replication, Failover, and Alerts and Notifications. Encryption is always-on in every edition, the trap that catches candidates who assume it is Enterprise-only. Tri-Secret Secure raises the floor to Business Critical. You will also meet CREATE ALERT and notification integrations, two sub-objective 2.2 items that are easy to overlook.

Abhay Krishnan

Abhay Krishnan

Senior Data & AI Consultant
Connect on LinkedIn

With over five years of data engineering experience at EY and Infosys, Abhay Krishnan specializes in building scalable data pipelines and cloud warehousing solutions. He is a certified SnowPro Core professional, alongside credentials in AWS and Azure. Abhay created this 50-day track to solve a problem he faced firsthand: the lack of a structured, free resource for Snowflake certification prep. Follow him on LinkedIn for more data engineering insights.