📖 Scenario: You are managing access control in a Snowflake data warehouse for a small team. You need to grant and revoke privileges on a database to control who can read and modify data.
🎯 Goal: Learn how to grant and revoke privileges on a Snowflake database to users and roles.
📋 What You'll Learn
Create a role named analyst_role
Create a user named analyst_user
Grant USAGE privilege on the database sales_db to analyst_role
Grant SELECT privilege on all tables in sales_db schema public to analyst_role
Grant the role analyst_role to the user analyst_user
Revoke the SELECT privilege on all tables in sales_db.public from analyst_role
💡 Why This Matters
🌍 Real World
Managing access control in Snowflake ensures data security and proper permissions for team members.
💼 Career
Cloud engineers and data administrators often manage roles and privileges to enforce security policies.
Progress0 / 4 steps
1
Create a role and a user
Write SQL commands to create a role called analyst_role and a user called analyst_user.
Snowflake
Hint
Use CREATE ROLE and CREATE USER statements with exact names.
2
Grant USAGE privilege on the database
Write a SQL command to grant the USAGE privilege on the database sales_db to the role analyst_role.
Snowflake
Hint
Use GRANT USAGE ON DATABASE sales_db TO ROLE analyst_role;
3
Grant SELECT privilege on all tables in schema
Write a SQL command to grant the SELECT privilege on all tables in the schema public of database sales_db to the role analyst_role.
Snowflake
Hint
Use GRANT SELECT ON ALL TABLES IN SCHEMA sales_db.public TO ROLE analyst_role;
4
Grant role to user and revoke SELECT privilege
Write SQL commands to grant the role analyst_role to the user analyst_user and then revoke the SELECT privilege on all tables in sales_db.public from analyst_role.
Snowflake
Hint
Use GRANT ROLE analyst_role TO USER analyst_user; and REVOKE SELECT ON ALL TABLES IN SCHEMA sales_db.public FROM ROLE analyst_role;
Practice
(1/5)
1. What is the main purpose of granting privileges in Snowflake?
easy
A. To allow roles to perform specific actions on database objects
B. To create new users in the system
C. To delete roles from the account
D. To backup data automatically
Solution
Step 1: Understand the role of privileges
Privileges control what actions roles can perform on database objects like tables or views.
Step 2: Identify the purpose of granting privileges
Granting privileges gives roles permission to do specific tasks, such as SELECT or INSERT on tables.
Final Answer:
To allow roles to perform specific actions on database objects -> Option A
Quick Check:
Grant privileges = Allow role actions [OK]
Hint: Privileges let roles do tasks on objects, not users directly [OK]
Common Mistakes:
Confusing privileges with user creation
Thinking privileges delete roles
Assuming privileges backup data
2. Which of the following is the correct syntax to grant SELECT privilege on a table named sales_data to a role named analyst_role?
easy
A. GRANT SELECT TO ROLE analyst_role ON sales_data;
B. GRANT ROLE analyst_role TO SELECT ON TABLE sales_data;
C. GRANT SELECT ON ROLE analyst_role TO TABLE sales_data;
D. GRANT SELECT ON TABLE sales_data TO ROLE analyst_role;
Solution
Step 1: Recall the correct GRANT syntax
The syntax is: GRANT <privilege> ON <object_type> <object_name> TO ROLE <role_name>;
Step 2: Match the syntax to the options
GRANT SELECT ON TABLE sales_data TO ROLE analyst_role; matches the correct order and keywords exactly.
Final Answer:
GRANT SELECT ON TABLE sales_data TO ROLE analyst_role; -> Option D
Quick Check:
GRANT privilege ON object TO ROLE [OK]
Hint: Remember: GRANT privilege ON object TO ROLE role_name [OK]
Common Mistakes:
Mixing order of keywords
Placing role before privilege
Using TO TABLE instead of TO ROLE
3. Given the following commands executed in order:
GRANT SELECT ON TABLE customers TO ROLE sales_role;
REVOKE SELECT ON TABLE customers FROM ROLE sales_role;
GRANT INSERT ON TABLE customers TO ROLE sales_role;
What privileges does sales_role have on the customers table after these commands?
medium
A. Only SELECT
B. Only INSERT
C. SELECT and INSERT
D. No privileges
Solution
Step 1: Analyze the first GRANT
The role sales_role is granted SELECT privilege on customers.
Step 2: Analyze the REVOKE
The SELECT privilege is revoked from sales_role, removing that permission.
Step 3: Analyze the second GRANT
The role is granted INSERT privilege on customers.
Final Answer:
Only INSERT -> Option B
Quick Check:
Revoked SELECT, granted INSERT = INSERT only [OK]
Hint: Revoke removes privilege; later grants add new ones [OK]
Common Mistakes:
Assuming revoked privileges remain
Thinking grants accumulate without revokes
Confusing privilege types
4. You run the command:
REVOKE ALL PRIVILEGES ON DATABASE sales_db FROM ROLE marketing_role;
But the privileges are not removed. What is the most likely reason?
medium
A. The role marketing_role does not have any privileges on sales_db
B. The syntax REVOKE ALL PRIVILEGES is invalid in Snowflake
C. You must revoke privileges from users, not roles
D. The database sales_db does not exist
Solution
Step 1: Check if the role has privileges
If the role has no privileges on the database, revoking does nothing.
Step 2: Verify syntax and object existence
REVOKE ALL PRIVILEGES is valid syntax, and revoking is done on roles, not users. Assume sales_db exists.
Final Answer:
The role marketing_role does not have any privileges on sales_db -> Option A
Quick Check:
Revoking non-existent privileges has no effect [OK]
Hint: Check if role actually has privileges before revoking [OK]
Common Mistakes:
Assuming syntax error with REVOKE ALL PRIVILEGES
Trying to revoke from users directly
Ignoring role privilege state
5. You want to allow a role data_scientist to both read and write data in tables of the analytics schema but prevent it from dropping any tables. Which set of commands correctly grants and restricts privileges?
hard
A. GRANT SELECT, INSERT, UPDATE ON ALL TABLES IN SCHEMA analytics TO ROLE data_scientist;
GRANT DROP ON SCHEMA analytics TO ROLE data_scientist;
B. GRANT ALL PRIVILEGES ON SCHEMA analytics TO ROLE data_scientist;
REVOKE DROP ON SCHEMA analytics FROM ROLE data_scientist;
C. GRANT SELECT, INSERT, UPDATE ON ALL TABLES IN SCHEMA analytics TO ROLE data_scientist;
REVOKE DROP ON SCHEMA analytics FROM ROLE data_scientist;
D. GRANT SELECT, INSERT, UPDATE ON ALL TABLES IN SCHEMA analytics TO ROLE data_scientist;
Solution
Step 1: Grant read and write privileges
Grant SELECT, INSERT, and UPDATE to allow reading and writing data.
Step 2: Revoke DROP privilege
Explicitly revoke DROP to prevent deleting tables.
Step 3: Evaluate other options
GRANT ALL PRIVILEGES ON SCHEMA analytics TO ROLE data_scientist;
REVOKE DROP ON SCHEMA analytics FROM ROLE data_scientist; grants ALL privileges then revokes DROP, which is valid but less precise. GRANT SELECT, INSERT, UPDATE ON ALL TABLES IN SCHEMA analytics TO ROLE data_scientist; does not revoke DROP, so drop is allowed. GRANT SELECT, INSERT, UPDATE ON ALL TABLES IN SCHEMA analytics TO ROLE data_scientist;
GRANT DROP ON SCHEMA analytics TO ROLE data_scientist; grants DROP, which is opposite of requirement.
Final Answer:
GRANT SELECT, INSERT, UPDATE ON ALL TABLES IN SCHEMA analytics TO ROLE data_scientist;
REVOKE DROP ON SCHEMA analytics FROM ROLE data_scientist; -> Option C
Quick Check:
Grant needed privileges, revoke unwanted ones [OK]
Hint: Grant needed privileges, then revoke unwanted ones explicitly [OK]
Common Mistakes:
Granting ALL privileges without revoking DROP
Not revoking DROP privilege
Granting DROP privilege by mistake
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.