Run the AI data-security demo
Goal
In five minutes, show a prospect that Measured Cloud makes AI-assisted access to their data safe. On one table of support tickets, Measured Cloud:
- finds the sensitive data on its own;
- proves it isn't protected;
- spots the AI assistant's account that can read it;
- tells an AI agent the table isn't safe to use.
All of it is answered from metadata and checks that run in the warehouse. No customer data leaves the database.
The demo data is fake: test card numbers from the payment industry, and made-up names, emails and phone numbers.
Prereqs
-
The
customer_demoPostgres database, seeded bymake demo-up(oruv run python -m scripts.demo_data.seed_customer_demo). Alongside the five standard tables, it has the demo's own:-
support_tickets: 300 tickets. About one note in seven leaks the customer's email address or phone number, and billing tickets keep the raw card number the agent pasted in. -
Four accounts, created by the seed when its role can create roles:
Account Can read support_tickets?What it stands for copilot_svcYes, directly An AI assistant's service account jane_analystYes, through the bi_readersroleA person etl_loaderNo (it reads ordersonly)A pipeline bi_readersA role (it can't sign in) The analysts' group
-
-
The database connected to Measured Cloud, directly or through an up-to-date Privacy Agent. Either way, who can read the table is read from the warehouse's grants. To connect it directly, run the setup script with the database's address, and add
--security-demo:DQ_SETUP_DATASOURCE_DSN=postgresql://user:pass@host:5432/customer_demo uv run python -m scripts.setup_env --security-demoIt adds the
support_ticketsdata asset, profiles it andcustomersso the sensitive columns are flagged before the call, and turns on the AI usage policy. -
To be alerted live in step 4: an alert rule on the AI usage policy violated or resolved trigger, sending to your own email or Slack.
-
For step 5: Claude (or another MCP client) connected to Measured Cloud's MCP server.
Do a dry run before the call. Each step below says what should be on screen.
Steps
1. "We found your sensitive data, without anyone telling us where it is." (45 s)
Open Data Assets → Sensitive data. support_tickets.card_number is listed as PCI? (payment card data, 100 % confidence), next to customers.email as PII?.
Talk track: "Every time Measured Cloud profiles a table it checks each column for personal, health, payment and credential data. It stores only the share of values that matched, never a value."
2. "Your team confirms it in one click." (30 s)
Open support_tickets → Table Health. In the Sensitivity column, Accept card_number. The asset now carries the PCI tag, and the map shows PCI without the question mark.
3. "It isn't protected, and here's the proof." (60 s)
On card_number, open Add a rule and pick Security: masked, hashed or tokenized. Save it, then run the asset's rules. The rule fails: all 126 card numbers are raw. Back on the map, card_number's Protection reads Check failing.
Optionally, add No personal data in free text on notes. It fails on 45 of 300 tickets: emails and phone numbers pasted into ticket notes.
On a Snowflake, BigQuery, Databricks or SQL Server demo, pick Security: masking policy in the warehouse instead. It checks the warehouse's own masking policy, from its metadata.
4. "And an AI assistant can read it." (60 s)
On support_tickets, Who can read this table lists:
copilot_svc, marked AI? because its name suggests an AI tool;jane_analyst, reading throughbi_readers;- the database's own administrator.
etl_loader isn't listed: it can't read this table.
From copilot_svc's ⋯ menu, confirm it as AI. The card shows an AI usage policy violation: an AI account can read a table that isn't certified AI-ready. The map's Readers column shows a Policy badge, and the alert arrives in your inbox or Slack.
Talk track: "Copilots and text-to-SQL agents connect as service accounts with broad grants. Measured Cloud reads the grants, flags the AI accounts, and holds them to your policy: AI may read only data you've certified."
5. "Your AI agent asks first, and gets told no." (45 s)
The asset's AI-ready certification card reads Not AI-ready, with the reasons: sensitive columns without a passing security check, and checks that haven't run long enough. Then ask Claude, connected through MCP:
"Can I use the support_tickets table to answer a question about refunds?"
Claude calls mc_asset_ai_readiness and answers with the verdict and the reasons. For example: the table holds PCI data in card_number to mask or leave out, and it isn't certified AI-ready. Every check is in the audit log.
Verify
Before the call:
- the map lists
support_tickets.card_number; - the Who can read card lists
copilot_svc; - Settings → AI → AI usage policy is on.
After step 3, the asset's latest result shows the security check failing.
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| The map is empty | The profile hasn't finished. | Wait a minute and refresh, or profile support_tickets from its page. |
| "This Privacy Agent can't read who can access a table yet" | The agent predates this feature. | Update the agent, then click Scan now on support_tickets. |
copilot_svc isn't listed | The seed's role couldn't create roles (its log says "demo roles skipped"). | Re-run the seed as a role with CREATEROLE, then Scan now. |
| No policy violation | The policy is off, or the asset is certified. | Turn the policy on in Settings → AI, and clear any manual certification. |
| The rule in step 3 passes | The rule landed on another column. | Check that its column is card_number. |
Reset the demo by re-running the seed. It rebuilds the tables, keeps the accounts, and leaves your rules and decisions in Measured Cloud, so clear those on the asset page for a fresh run.