注册表

概述

要在协作中使用模板或数据产品等资源,必须先在注册表中注册。注册表是一个账户级容器,旨在存储这些资源。注册后,账户中的任何用户只要同时拥有注册表的访问权限和该特定协作的必要链接权限,即可将注册表中的资源链接到该协作。值得注意的是,注册表独立于特定的协作;注册资源可以关联到该账户中任意数量的协作,也可以完全不进行关联。

每个 Snowflake 账户都支持一个默认注册表。您可以为账户创建额外的自定义注册表。自定义注册表是对资源进行分组和管理访问权限的好方法。例如,您可以分别为销售数据和支出数据创建自定义注册表,然后通过 DCR 权限和自定义 RBAC 角色 向相应用户授予这些注册表的访问权限。

注册表规则

以下是关于注册表的主要规则:

  • 注册表是账户级别对象。用户只能查看和访问自己账户中的注册表。但是,当注册表中的资源链接到协作时,根据规范,任何有权访问该资源的人员均可见该资源。无需拥有所属注册表的访问权限。

  • 每个自定义注册表支持单一资源类型(模板、数据产品等)。资源类型在创建注册表时指定。默认注册表支持任何资源类型。

  • 在一个账户中,您可以创建的自定义注册表数量没有限制。

  • 当您注册资源时,可以使用可选的注册表名称参数来指定一个自定义注册表。如果未指定自定义注册表,资源将注册到账户的默认注册表中。

  • 所有用户都可以访问账户中的默认注册表。然而,自定义注册表最初对创建者是专用的,必须通过调用 GRANT_PRIVILEGE_ON_OBJECT_TO_ROLE 显式授予其他用户访问权限。

  • 一个账户可以有多个存储相同资源类型的注册表。

  • 注册表对资源数量没有最大限制。

  • 在该账户中,对于该类型的资源而言,一个资源在其所有注册表中必须具有唯一的名称。例如,您可以在同一个账户中拥有一个名为 sales 的模板和一个名为 sales 的数据产品,但不能在同一个账户的相同或不同注册表中拥有两个名为 sales 的模板。资源名称被定义为规范中最高层级的 name 值。

  • 如果两个不同的账户将具有相同名称和类型的资源链接到协作,这是允许的。协作规范将显示同名资源,但系统会识别预期的资源 – 使用的是将该资源链接到协作的账户中的同名资源。

示例

该示例创建一个自定义注册表,在其中注册一个模板,并向新角色授予该注册表的读取访问权限。拥有该角色的用户可将该注册表中的模板链接到协作中。

-- Create a custom registry that can hold templates.
CALL SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.REGISTRY.CREATE_REGISTRY(
  'SALES',
  'TEMPLATE'
);

CALL SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.REGISTRY.REGISTER_TEMPLATE(
'SALES',
$$
api_version: 2.0.0
spec_type: template
name: alice_only_template
version: v1
type: sql_analysis
description: Joins two tables on hashed email and counts matches grouped by status.
template:
  SELECT t1.status, COUNT(*)
    FROM IDENTIFIER( {{ source_table[0] }} ) AS t1
    JOIN IDENTIFIER( {{ source_table[1] }} ) AS t2
    ON t1.hashed_email_b64_encoded = t2.hashed_email_b64_encoded
    GROUP BY t1.status;
$$
);

-- Create a role and grant it access to the registry.
CREATE ROLE MARKETING_USERS;
CALL SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.ADMIN.GRANT_PRIVILEGE_ON_OBJECT_TO_ROLE(
  'READ',
  'REGISTRY',
  'SALES',
  'MARKETING_USERS'
);

-- Grant access to the registry for a user by assigning the role.
GRANT ROLE MARKETING_USERS to USER willy_loman;