What if you could control who sees what with just a few clicks instead of endless manual changes?
Creating custom roles in Snowflake - Why You Should Know This
Imagine you manage access for a growing team using only default roles. Every time someone new joins or changes tasks, you manually adjust permissions one by one.
This feels like juggling many keys without a clear system.
Manually assigning permissions is slow and confusing. You risk giving too much or too little access, causing security gaps or blocking work.
It's easy to forget changes or make mistakes that disrupt the team.
Creating custom roles lets you bundle exact permissions for specific jobs. Assign these roles to users easily, ensuring everyone has just what they need.
This organized approach saves time and keeps your data safe.
GRANT SELECT ON DATABASE mydb TO USER alice;
CREATE ROLE analyst_role; GRANT SELECT ON DATABASE mydb TO ROLE analyst_role; GRANT ROLE analyst_role TO USER alice;
Custom roles unlock simple, secure, and scalable access control tailored to your team's needs.
A data team creates roles like 'data_analyst' and 'data_engineer' with specific permissions. New hires get the right access instantly by assigning these roles.
Manual permission management is slow and risky.
Custom roles group permissions for easy reuse.
This improves security and saves time as teams grow.
Practice
Solution
Step 1: Understand role purpose
Custom roles in Snowflake are designed to manage what users can do by controlling permissions.Step 2: Identify correct function
Creating a role is not about storing data, creating users, or speeding queries, but about access control.Final Answer:
To control and manage user access permissions -> Option DQuick Check:
Role purpose = Access control [OK]
- Confusing roles with users
- Thinking roles store data
- Assuming roles speed up queries
data_analyst in Snowflake?Solution
Step 1: Recall Snowflake role creation syntax
The correct command to create a role isCREATE ROLE role_name;.Step 2: Match syntax with options
Only CREATE ROLE data_analyst; uses the correctCREATE ROLEsyntax.Final Answer:
CREATE ROLE data_analyst; -> Option AQuick Check:
CREATE ROLE = correct syntax [OK]
- Using NEW ROLE instead of CREATE ROLE
- Using MAKE or ADD which are invalid
- Missing semicolon at the end
CREATE ROLE analyst; GRANT USAGE ON DATABASE sales_db TO ROLE analyst; GRANT ROLE analyst TO USER alice;
What permission does user
alice have on sales_db?Solution
Step 1: Analyze role creation and grants
The roleanalystis created and given USAGE permission onsales_db.Step 2: Check role assignment to user
Useraliceis granted theanalystrole, so she inherits its permissions.Final Answer:
Only USAGE permission on sales_db -> Option BQuick Check:
Role grants USAGE, user inherits USAGE [OK]
- Assuming no permissions without direct grant
- Confusing USAGE with SELECT permission
- Ignoring role inheritance
CREATE ROLE analyst
but get an error. What is the likely cause?
Solution
Step 1: Check command syntax
Snowflake commands require a semicolon at the end to execute properly.Step 2: Evaluate other options
Role names like analyst are allowed, users are independent of roles, and CREATE ROLE is supported.Final Answer:
Missing semicolon at the end of the command -> Option CQuick Check:
Semicolon ends command [OK]
- Forgetting semicolon causes syntax error
- Thinking role names are restricted
- Believing users must exist first
report_viewer that can only read data from the reports schema in the analytics database. Which sequence of commands correctly achieves this?Solution
Step 1: Create the role
UseCREATE ROLE report_viewer;to make the role.Step 2: Grant USAGE on database and schema
Granting USAGE on the database and schema allows access to objects inside.Step 3: Grant SELECT on all tables in the schema
Grant SELECT on all tables to allow read access to data.Step 4: Evaluate options
CREATE ROLE report_viewer; GRANT USAGE ON DATABASE analytics TO ROLE report_viewer; GRANT USAGE ON SCHEMA analytics.reports TO ROLE report_viewer; GRANT SELECT ON ALL TABLES IN SCHEMA analytics.reports TO ROLE report_viewer; correctly grants USAGE and SELECT at proper levels. CREATE ROLE report_viewer; GRANT SELECT ON DATABASE analytics TO ROLE report_viewer; misses schema and USAGE grants. CREATE ROLE report_viewer; GRANT ALL ON SCHEMA analytics.reports TO ROLE report_viewer; grants ALL which is too broad. CREATE ROLE report_viewer; GRANT USAGE ON DATABASE analytics TO ROLE report_viewer; GRANT SELECT ON SCHEMA analytics.reports TO ROLE report_viewer; grants SELECT on schema which is invalid; SELECT must be on tables.Final Answer:
CREATE ROLE report_viewer; GRANT USAGE ON DATABASE analytics TO ROLE report_viewer; GRANT USAGE ON SCHEMA analytics.reports TO ROLE report_viewer; GRANT SELECT ON ALL TABLES IN SCHEMA analytics.reports TO ROLE report_viewer; -> Option AQuick Check:
Grant USAGE + SELECT on tables = read access [OK]
- Granting SELECT on schema instead of tables
- Missing USAGE grants on database or schema
- Granting ALL permissions instead of SELECT only
Ready to prove it?
Pass the test and this pattern moves unknown
