自定义角色与次级角色

Snowflake 管理、治理与协作

Emily Melhuish

Technical Curriculum Developer, Snowflake

扁平角色方案的问题

多位分析师指向不同权限的列表。

Snowflake 管理、治理与协作

访问角色 vs 职能角色

分屏展示访问角色与职能角色在继承关系上的差异

  • 访问角色持有特定对象的特定权限
  • 职能角色位于其上方,并从访问角色继承
1 [Snowflake: Aligning Object Access with Business Functions](https://docs.snowflake.com/en/user-guide/security-access-control-considerations#aligning-object-access-with-business-functions)
Snowflake 管理、治理与协作

工作原理

实际工作方式示意图

  • 访问角色持有具体权限
  • 职能角色继承一个或多个访问角色
  • 用户被分配职能角色
Snowflake 管理、治理与协作

用 SQL 构建层级

步骤 1:创建访问角色并授予对象权限

CREATE ROLE credit_read;
GRANT USAGE ON DATABASE claro_db 
TO ROLE credit_read;
GRANT USAGE ON SCHEMA claro_db.core 
TO ROLE credit_read;
GRANT SELECT ON TABLE core.credit_scores
  TO ROLE credit_read;

步骤 2:创建职能角色并继承该访问角色

CREATE ROLE analyst;
GRANT ROLE credit_read TO ROLE analyst;

步骤 3:将职能角色分配给用户

GRANT ROLE analyst TO USER ana;
Snowflake 管理、治理与协作

账户角色 vs 数据库角色

账户角色 数据库角色
范围 跨任意数据库或架构 仅限单个数据库
分配给用户? 否——授予给账户角色
SQL CREATE ROLE CREATE DATABASE ROLE
用途 表示全账户的岗位职能 打包单个数据库内的对象访问
Snowflake 管理、治理与协作

次级角色

  • 每个会话都有一个主角色:使用 USE ROLE <Role Name> 设置
  • 默认次级角色为 ALL:你被分配的所有角色均激活
  • 使用 USE SECONDARY ROLES <role_name> 激活特定子集

  • 使用 USE SECONDARY ROLES NONE 仅限主角色

在会话中控制次级角色

USE SECONDARY ROLES ALL;
USE SECONDARY ROLES <role_name>;
USE SECONDARY ROLES NONE;
1 [Snowflake BCR-1692: Secondary Roles Default Change](https://docs.snowflake.com/en/release-notes/bcr-bundles/2024_08/bcr-1692)
Snowflake 管理、治理与协作

未来授权(Future Grants)

自动为将来添加到此架构的任何新表授予 SELECT

GRANT SELECT ON FUTURE TABLES
  IN SCHEMA core
  TO ROLE credit_read;
Snowflake 管理、治理与协作

让我们练习吧!

Snowflake 管理、治理与协作

Preparing Video For Download...