Design and operate data access governance: define role-based access tiers from the classification scheme, implement column-level masking and row-level security, build an access request and review workflow, and produce an access audit report that proves least-privilege is enforced.
How this skill is triggered — by the user, by Claude, or both
Slash command
/data-governance-privacy:access-governanceThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
**Purpose:** Build the access control engineering that enforces the classification scheme in practice — roles, masking, row-level security, request/review workflow, and the audit trail. Used by `data-governance-architect` (policy definition), `data-catalog-lineage-engineer` (access surface catalogued), and `privacy-compliance-engineer` (GDPR/CCPA access obligations).
Purpose: Build the access control engineering that enforces the classification scheme in practice — roles, masking, row-level security, request/review workflow, and the audit trail. Used by data-governance-architect (policy definition), data-catalog-lineage-engineer (access surface catalogued), and privacy-compliance-engineer (GDPR/CCPA access obligations).
SELECT * grants exist on tables containing PII or Confidential data.Every classification level maps to a specific access tier. The controls get stricter as classification rises.
Access tier model:
| Classification | Tier | Who can access | Controls |
|---|---|---|---|
| Public | Tier 0 | Anyone (authenticated) | No masking; standard read grants |
| Internal | Tier 1 | All employees, contractors | Standard RBAC roles; no masking required |
| Confidential | Tier 2 | Named teams / business function | Column-level masking for non-business-need users; access requires a named role |
| Restricted / PII | Tier 3 | Minimal named individuals | Column-level masking by default; unmasked access requires an approved role with business justification; access review quarterly |
| Restricted / Sensitive PII (health, biometric, etc.) | Tier 4 | Strict need-to-know only | No broad grants; row-level security in addition to column masking; access review monthly |
Column-level masking (CLM) ensures that a user who queries a table sees either the real value or a masked value depending on their role membership — without requiring a separate masked view.
Snowflake example:
-- Step 1: Create a masking policy for email
CREATE OR REPLACE MASKING POLICY email_mask AS (val STRING)
RETURNS STRING ->
CASE
WHEN CURRENT_ROLE() IN ('PII_UNMASKED_ROLE', 'DATA_STEWARD_ROLE')
THEN val -- see real value
WHEN CURRENT_ROLE() = 'ANALYST_ROLE'
THEN CONCAT(LEFT(val, 2), '***@***.***') -- partial mask
ELSE '***MASKED***' -- full mask for everyone else
END;
-- Step 2: Apply to the column
ALTER TABLE customers
MODIFY COLUMN email SET MASKING POLICY email_mask;
BigQuery equivalent: Use column-level security with policy tags and BigQuery data policies.
dbt approach: Define masking in the warehouse and reference it in schema.yml meta blocks for documentation; do not duplicate masking logic in SQL models (the warehouse enforces it, dbt documents it).
Row-level security (RLS) restricts which rows a user can see, not just which columns. Use for:
Snowflake row access policy:
-- Policy: each user can only see rows for their own customer_region
CREATE OR REPLACE ROW ACCESS POLICY region_filter AS (customer_region STRING)
RETURNS BOOLEAN ->
customer_region = CURRENT_ROLE()
OR CURRENT_ROLE() IN ('GLOBAL_ADMIN', 'DATA_STEWARD');
ALTER TABLE customer_health_records
ADD ROW ACCESS POLICY region_filter ON (customer_region);
BigQuery equivalent: Row-level security via authorized views or CREATE ROW ACCESS POLICY.
An access request workflow replaces ad-hoc Slack requests with a traceable, auditable process.
Minimum workflow:
1. Requester submits a form:
- Data asset name / table / schema
- Access type requested (read / write / unmasked PII)
- Business justification (one paragraph)
- Duration required (time-bounded access preferred)
- Approver notified (line manager + data steward for Tier 3/4)
2. Steward reviews within SLA:
- Tier 1–2: 2 business days
- Tier 3: 5 business days (PII review)
- Tier 4: 5 business days + legal/DPO confirmation
3. Approval:
- APPROVED → role granted in IAM / warehouse; logged in access register
- REJECTED → rationale documented; requester notified
- CONDITIONAL → time-limited grant with review date; calendar reminder set
4. Completion:
- Log entry: who approved, what was granted, on what date, for how long
- Access register updated
Tools: ServiceNow, Jira (create an access-request issue type), or a simple Google Form + Sheets workflow with a manual approval step. The tool matters less than the traceability.
Role membership must be reviewed on a schedule to remove stale access (leavers, movers, project end).
Review schedule:
| Tier | Review frequency | Who reviews | Action on stale |
|---|---|---|---|
| Tier 1 (Internal) | Annual | System owner | Remove from role |
| Tier 2 (Confidential) | Quarterly | Data steward + system owner | Remove and log |
| Tier 3 (Restricted/PII) | Quarterly | Data steward + DPO confirmation | Remove and log; flag to DPO |
| Tier 4 (Sensitive PII) | Monthly | Data steward + DPO + CISO | Remove immediately; investigate if unexplained |
Stale access definition:
The access audit report is evidence of least-privilege enforcement for internal audit, regulatory review, or a DPIA (Data Protection Impact Assessment).
Minimum audit report sections:
SELECT * grants on warehouse schemas — common in early data warehouse builds; the analyst habit of "grant all on schema" bypasses all classification-based controls.npx claudepluginhub mcorbett51090/ravenclaude --plugin data-governance-privacyGuides completion of development work by verifying tests, detecting environment, and presenting structured options for merge, PR, or cleanup.
Guides creation and editing of skills using test-driven development with pressure scenarios and subagents to verify agent compliance.
Dispatches multiple subagents concurrently for independent tasks without shared state. Use when facing 2+ unrelated failures or subsystems that can be investigated in parallel.