Data Governance & Lineage • Fine-grained Access Control & PoliciesEasy⏱️ ~3 min
What is Fine-Grained Access Control?
Definition
Fine-Grained Access Control (FGAC) means controlling data access at the row, column, or even cell level, rather than just at the table or database level. It lets you share a single physical dataset across many users while enforcing who can see which specific rows and columns.
WHERE customer_region IN user_permitted_regions to every query.
Second, column level security controls which columns appear in results. Analysts might see aggregate revenue but not individual customer names.
Third, dynamic data masking transforms values based on who is querying. A manager sees full credit card numbers, while customer service sees only the last four digits. The same physical column returns different values depending on caller identity.
✓ In Practice: Systems like Databricks Unity Catalog, Snowflake, BigQuery, and AWS Lake Formation all implement variations of FGAC. The patterns are general: evaluate policies close to the data engine, push filters down to storage, and centralize policy definitions so you do not duplicate business logic.
The fundamental shift is from "can you access this table" to "can you access this specific row and column given your attributes and the data's sensitivity classification."💡 Key Takeaways
✓FGAC controls access at row, column, or cell level rather than entire tables
✓Row level security adds filter predicates, column security hides columns, masking transforms visible values
✓Centralizing data without FGAC would require maintaining thousands of filtered copies
✓Modern data platforms evaluate policies in the query engine and push filters to storage
✓Decision is enforced based on caller identity attributes like role, region, or clearance level
📌 Examples
1Support agent queries customer table but only sees customers from their assigned region due to row filter
2Analyst runs revenue query and sees totals but customer names are masked to NULL due to column restrictions
3Same credit card column returns full number to fraud team but only last 4 digits to customer service based on role