Granting and revoking privileges in Snowflake - Time & Space Complexity
When managing access in Snowflake, granting and revoking privileges controls who can do what.
We want to understand how the time to apply these changes grows as we handle more users or roles.
Analyze the time complexity of the following operation sequence.
GRANT SELECT ON TABLE sales TO ROLE analyst;
GRANT INSERT ON TABLE sales TO ROLE analyst;
REVOKE SELECT ON TABLE sales FROM ROLE analyst;
GRANT UPDATE ON TABLE sales TO ROLE manager;
REVOKE INSERT ON TABLE sales FROM ROLE analyst;
This sequence grants and revokes specific privileges on a table to different roles.
- Primary operation: Executing a grant or revoke command on a privilege.
- How many times: Once per grant or revoke statement in the sequence.
Each grant or revoke command runs independently, so the total time grows as we add more commands.
| Input Size (n) | Approx. API Calls/Operations |
|---|---|
| 10 | 10 grant/revoke commands |
| 100 | 100 grant/revoke commands |
| 1000 | 1000 grant/revoke commands |
Pattern observation: The time grows directly with the number of grant or revoke commands.
Time Complexity: O(n)
This means the time to apply privileges grows in a straight line as you add more grant or revoke commands.
[X] Wrong: "Granting multiple privileges at once takes the same time as granting one privilege."
[OK] Correct: Each privilege requires a separate operation, so more privileges mean more time.
Understanding how privilege changes scale helps you design efficient access control in real projects.
"What if we batch multiple privileges in a single grant command? How would the time complexity change?"
Practice
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 AQuick Check:
Grant privileges = Allow role actions [OK]
- Confusing privileges with user creation
- Thinking privileges delete roles
- Assuming privileges backup data
sales_data to a role named 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 DQuick Check:
GRANT privilege ON object TO ROLE [OK]
- Mixing order of keywords
- Placing role before privilege
- Using TO TABLE instead of TO ROLE
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?Solution
Step 1: Analyze the first GRANT
The rolesales_roleis granted SELECT privilege oncustomers.Step 2: Analyze the REVOKE
The SELECT privilege is revoked fromsales_role, removing that permission.Step 3: Analyze the second GRANT
The role is granted INSERT privilege oncustomers.Final Answer:
Only INSERT -> Option BQuick Check:
Revoked SELECT, granted INSERT = INSERT only [OK]
- Assuming revoked privileges remain
- Thinking grants accumulate without revokes
- Confusing privilege types
REVOKE ALL PRIVILEGES ON DATABASE sales_db FROM ROLE marketing_role;
But the privileges are not removed. What is the most likely reason?
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 AQuick Check:
Revoking non-existent privileges has no effect [OK]
- Assuming syntax error with REVOKE ALL PRIVILEGES
- Trying to revoke from users directly
- Ignoring role privilege state
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?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 CQuick Check:
Grant needed privileges, revoke unwanted ones [OK]
- Granting ALL privileges without revoking DROP
- Not revoking DROP privilege
- Granting DROP privilege by mistake
Ready to prove it?
Pass the test and this pattern moves unknown
