Data Collaboration and Protection: Access, RBAC, and Governance
This domain covers how Snowflake controls who can access data, what they can do with it, and how that access is authenticated and audited. It represents a moderate share of the SnowPro Core COF-C03 blueprint under the current estimated domain weighting. Questions test precise knowledge of role hierarchy, privilege mechanics, authentication methods, and data governance features. Expect scenario-based questions that require you to distinguish between similar features (e.g., masking policies vs. row access policies) or identify the correct privilege/role combination for a given requirement.
RBAC: Role Hierarchy, System Roles, Custom Roles, and Ownership
System-Defined Roles
Snowflake ships with six system roles that form a fixed hierarchy. These cannot be dropped.
| Role | Key Capabilities | What It Does NOT Have By Default |
|---|---|---|
| ACCOUNTADMIN | Top of hierarchy; manages account-level objects, billing, resource monitors | Should NOT be used for daily work |
| SECURITYADMIN | Manages users and roles; can grant/revoke any privilege | Cannot create warehouses |
| SYSADMIN | Manages all database objects (warehouses, databases, schemas, tables) | Cannot manage users or roles |
| USERADMIN | Creates users and roles only | Cannot grant privileges on data objects |
| PUBLIC | Automatically granted to every user; lowest privilege | Has almost no default privileges |
| ORGADMIN | Manages organization-level features (cross-account replication, etc.) | Sits outside the standard hierarchy |
Key hierarchy rule: SECURITYADMIN inherits USERADMIN. ACCOUNTADMIN inherits both SECURITYADMIN and SYSADMIN. SYSADMIN does NOT inherit SECURITYADMIN.
System role hierarchy — arrows show inheritance direction (child grants up to parent).
Custom Roles
- Created with
CREATE ROLE. Best practice: assign ownership to SYSADMIN so SYSADMIN can manage objects owned by those roles. - If a custom role is NOT assigned under SYSADMIN, SYSADMIN cannot manage objects owned by that role.
- Roles are granted to users or to other roles (role hierarchy).
- Ownership of an object belongs to the role that created it. The owner role holds the OWNERSHIP privilege, which supersedes all others on that object.
Common Traps — RBAC
- The exam asks who can create roles: USERADMIN or SECURITYADMIN (or ACCOUNTADMIN). SYSADMIN cannot create roles.
- ACCOUNTADMIN is recommended for two or more named users — not a single shared account.
- Dropping a role does NOT drop objects owned by that role; ownership transfer must happen first.
- PUBLIC is a role, not a user group — every user automatically inherits it but it can be granted privileges.
- ORGADMIN is separate and does not appear in the standard ACCOUNTADMIN → SYSADMIN chain.
GRANT/REVOKE, Future Grants, and Secondary Roles
GRANT and REVOKE Basics
- Syntax:
GRANT <privilege> ON <object_type> <name> TO ROLE <role_name>; REVOKE <privilege> ON <object_type> <name> FROM ROLE <role_name>;- Privileges are additive: a user's effective privileges = union of all privileges held by their active role(s).
- WITH GRANT OPTION: allows the grantee to further grant that privilege to others.
- OWNERSHIP cannot be granted via GRANT — use
GRANT OWNERSHIP ON <object> TO ROLE <role>;
Future Grants
Future grants apply a privilege to all future objects of a specified type within a schema or database — they do not retroactively apply to existing objects.
GRANT SELECT ON FUTURE TABLES IN SCHEMA mydb.myschema TO ROLE analyst;
- Scope:
IN SCHEMAorIN DATABASE - Does NOT affect objects that already exist at the time the statement runs
- If both schema-level and database-level future grants exist, schema-level takes precedence
Secondary Roles
| Feature | Primary Role | Secondary Roles |
|---|---|---|
| Definition | The role active when a session starts | Additional roles activated within a session |
| Activation | Set at login or via USE ROLE | Activated with ALTER USER … SET DEFAULT_SECONDARY_ROLES = ALL or USE SECONDARY ROLES ALL |
| Privilege scope | Only primary role privileges active by default | ALL secondary roles: user gets union of primary + all granted roles |
| Object creation | Objects owned by primary role | Cannot change ownership |
| Exam value | Default behavior | Enables read from tables owned by other roles without switching |
USE SECONDARY ROLES ALL — activates all roles granted to the current user simultaneously (read/query use cases).
USE SECONDARY ROLES NONE — deactivates secondary roles.
Common Traps — GRANT/REVOKE
- Future grants do not backfill existing objects. A common distractor asks whether existing tables are affected — they are not.
- Schema-level future grants override database-level future grants for objects in that schema.
WITH GRANT OPTIONis not the same as OWNERSHIP.- Secondary roles cannot be used for DML writes that require object ownership decisions in certain contexts — they are primarily useful for read access across roles.
REVOKEon a parent role does not cascade to objects granted by child roles unless explicitly stated.
Worked Scenario: A new analyst needs SELECT on all tables created in SALES.PUBLIC going forward, but the DBA doesn't want to manually re-grant every time. → Use GRANT SELECT ON FUTURE TABLES IN SCHEMA SALES.PUBLIC TO ROLE ANALYST_ROLE. This is the correct, exam-expected answer. Granting on the schema itself does NOT cascade to tables.
Unlock with a paid plan
17 more sections (about 5,072 words) continue below. Every paid plan unlocks all COF-C03 study guides, the full question bank and mock exams, from $4.97/month.