Bird
Raised Fist0
Snowflakecloud~5 mins

Row access policies in Snowflake - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a row access policy in Snowflake?
A row access policy controls which rows a user can see or query in a table based on conditions. It helps protect sensitive data by filtering rows dynamically.
Click to reveal answer
intermediate
How do you apply a row access policy to a table in Snowflake?
You attach the row access policy to a table column using the ALTER TABLE command with ADD ROW ACCESS POLICY. This enforces the policy when querying the table.
Click to reveal answer
beginner
What is the purpose of the USING clause in a row access policy?
The USING clause defines the condition that determines if a row is visible to the user. It returns TRUE for rows the user can access and FALSE for rows to hide.
Click to reveal answer
intermediate
Can row access policies be combined with masking policies in Snowflake?
Yes, row access policies filter rows, while masking policies hide or transform column data. Using both together enhances data security by controlling both row visibility and column content.
Click to reveal answer
beginner
What happens if a user queries a table with a row access policy and no rows meet the policy condition?
The user sees an empty result set because the policy filters out all rows. This prevents unauthorized access to any data in the table.
Click to reveal answer
What does a row access policy in Snowflake control?
AThe number of users accessing the table
BWhich columns a user can see in a table
CThe size of the table
DWhich rows a user can see in a table
How do you attach a row access policy to a table?
AUsing GRANT SELECT
BUsing CREATE MASKING POLICY
CUsing ALTER TABLE ADD ROW ACCESS POLICY
DUsing DROP POLICY
What does the USING clause in a row access policy specify?
AThe condition to filter rows
BThe columns to mask
CThe user roles allowed
DThe table name
If no rows meet the row access policy condition, what is the query result?
AEmpty result set
BError message
CAll rows returned
DPartial columns returned
Can row access policies and masking policies be used together?
ANo, masking policies replace row access policies
BYes, they control rows and columns separately
CYes, but only on different tables
DNo, only one policy type can be applied
Explain how a row access policy works in Snowflake and why it is useful.
Think about how you hide certain rows from some users.
You got /4 concepts.
    Describe the steps to create and apply a row access policy in Snowflake.
    Consider policy creation and linking to a table.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of a row access policy in Snowflake?
      easy
      A. To encrypt data at rest
      B. To control which rows a user can see in a table
      C. To manage user login credentials
      D. To optimize query performance automatically

      Solution

      1. Step 1: Understand the function of row access policies

        Row access policies are designed to filter rows based on conditions, controlling visibility.
      2. Step 2: Compare with other options

        Encryption, login management, and query optimization are unrelated to row access policies.
      3. Final Answer:

        To control which rows a user can see in a table -> Option B
      4. Quick Check:

        Row access policy = row visibility control [OK]
      Hint: Row access policies filter rows users can see [OK]
      Common Mistakes:
      • Confusing row access policies with encryption
      • Thinking it manages user credentials
      • Assuming it improves query speed automatically
      2. Which of the following is the correct way to create a row access policy in Snowflake?
      easy
      A. CREATE ROW ACCESS POLICY policy_name AS (user_role STRING) RETURNS BOOLEAN { user_role = 'ADMIN' };
      B. CREATE ROW ACCESS POLICY policy_name AS (user_role STRING) RETURNS BOOLEAN -> user_role == 'ADMIN';
      C. CREATE ROW ACCESS POLICY policy_name AS (user_role STRING) RETURNS BOOLEAN -> user_role = 'ADMIN';
      D. CREATE ROW ACCESS POLICY policy_name AS (user_role STRING) RETURNS BOOLEAN BEGIN RETURN user_role = 'ADMIN'; END;

      Solution

      1. Step 1: Recall Snowflake row access policy syntax

        The correct syntax uses 'AS (parameters) RETURNS BOOLEAN -> condition;' with a single equals sign for comparison.
      2. Step 2: Analyze each option

        CREATE ROW ACCESS POLICY policy_name AS (user_role STRING) RETURNS BOOLEAN -> user_role = 'ADMIN'; matches the correct syntax. CREATE ROW ACCESS POLICY policy_name AS (user_role STRING) RETURNS BOOLEAN -> user_role == 'ADMIN'; uses '==' which is invalid in Snowflake SQL. CREATE ROW ACCESS POLICY policy_name AS (user_role STRING) RETURNS BOOLEAN { user_role = 'ADMIN' }; uses braces which are not valid. CREATE ROW ACCESS POLICY policy_name AS (user_role STRING) RETURNS BOOLEAN BEGIN RETURN user_role = 'ADMIN'; END; uses BEGIN...END block which is not used here.
      3. Final Answer:

        CREATE ROW ACCESS POLICY policy_name AS (user_role STRING) RETURNS BOOLEAN -> user_role = 'ADMIN'; -> Option C
      4. Quick Check:

        Correct syntax uses single '=' and '->' arrow [OK]
      Hint: Use single '=' and '->' for policy condition [OK]
      Common Mistakes:
      • Using '==' instead of '=' for comparison
      • Adding braces {} around condition
      • Using BEGIN...END block in policy definition
      3. Given the row access policy:
      CREATE ROW ACCESS POLICY filter_policy AS (region STRING) RETURNS BOOLEAN -> region = CURRENT_REGION();

      and a table with rows having regions 'US', 'EU', 'APAC', what rows will a user in region 'EU' see?
      medium
      A. Only rows where region = 'EU'
      B. All rows regardless of region
      C. Only rows where region = 'US'
      D. No rows at all

      Solution

      1. Step 1: Understand the policy condition

        The policy returns TRUE only if the row's region matches the user's current region.
      2. Step 2: Apply the policy for user in 'EU'

        Only rows with region = 'EU' will satisfy the condition and be visible.
      3. Final Answer:

        Only rows where region = 'EU' -> Option A
      4. Quick Check:

        Policy filters rows by matching region = CURRENT_REGION() [OK]
      Hint: Policy shows rows matching user's current region [OK]
      Common Mistakes:
      • Assuming all rows are visible
      • Confusing CURRENT_REGION() with a fixed value
      • Thinking policy hides all rows for unmatched regions
      4. You created a row access policy:
      CREATE ROW ACCESS POLICY sales_policy AS (sales_amount NUMBER) RETURNS BOOLEAN -> sales_amount > 1000;

      But after applying it, users see all rows including those with sales_amount = 500. What is the likely issue?
      medium
      A. The policy was not applied to the table column
      B. The comparison operator should be '<' instead of '>'
      C. The policy syntax is incorrect and causes errors
      D. The sales_amount column has NULL values causing policy to fail

      Solution

      1. Step 1: Check policy syntax and logic

        The syntax and logic (sales_amount > 1000) are correct to filter rows.
      2. Step 2: Verify policy application

        If users still see all rows, the policy was likely not applied to the table or column properly.
      3. Final Answer:

        The policy was not applied to the table column -> Option A
      4. Quick Check:

        Policy must be applied to enforce row filtering [OK]
      Hint: Apply policy to table column to enforce filtering [OK]
      Common Mistakes:
      • Assuming wrong comparison operator
      • Ignoring policy application step
      • Blaming NULL values without checking application
      5. You want to restrict access so that users can only see rows where department matches their assigned department stored in a session variable USER_DEPT. Which row access policy correctly enforces this?
      hard
      A. CREATE ROW ACCESS POLICY dept_policy AS (department STRING) RETURNS BOOLEAN -> department = CURRENT_ROLE();
      B. CREATE ROW ACCESS POLICY dept_policy AS (department STRING) RETURNS BOOLEAN -> department = CURRENT_SESSION();
      C. CREATE ROW ACCESS POLICY dept_policy AS (department STRING) RETURNS BOOLEAN -> department = CURRENT_USER();
      D. CREATE ROW ACCESS POLICY dept_policy AS (department STRING) RETURNS BOOLEAN -> department = $USER_DEPT;

      Solution

      1. Step 1: Understand the requirement

        The policy must compare the row's department to the user's assigned department stored in a session variable USER_DEPT.
      2. Step 2: Analyze options

        Options A, B, and D use CURRENT_ROLE(), CURRENT_SESSION(), and CURRENT_USER(), which do not directly access USER_DEPT variable. CREATE ROW ACCESS POLICY dept_policy AS (department STRING) RETURNS BOOLEAN -> department = $USER_DEPT; correctly accesses the session variable with $USER_DEPT.
      3. Step 3: Confirm correct syntax

        CREATE ROW ACCESS POLICY dept_policy AS (department STRING) RETURNS BOOLEAN -> department = $USER_DEPT; shows the correct approach to access and compare the session variable USER_DEPT with the department column.
      4. Final Answer:

        CREATE ROW ACCESS POLICY dept_policy AS (department STRING) RETURNS BOOLEAN -> department = $USER_DEPT; -> Option D
      5. Quick Check:

        Use session variable USER_DEPT to filter department rows [OK]
      Hint: Use session variable USER_DEPT to filter rows by department [OK]
      Common Mistakes:
      • Using CURRENT_ROLE() or CURRENT_USER() instead of session variable
      • Not casting session variable properly
      • Confusing CURRENT_SESSION() with user attributes
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard