レジストリ

概要

コラボレーションでテンプレートやデータ提供などのリソースを使用するには、まずレジストリに登録する必要があります。レジストリは、そうしたリソースを格納するように設計されたアカウントレベルのコンテナです。一旦登録されると、レジストリ内のリソースは、レジストリへのアクセス権とその特定のコラボレーションに必要なリンク作成権限の両方を持つアカウント内のユーザーなら誰でも、コラボレーションにリンクすることができるようになります。特に、レジストリは特定のコラボレーションから独立しています。登録されたリソースは、そのアカウント内の任意の数のコラボレーションにリンクすることも、まったくリンクしないこともできます。

各Snowflakeアカウントは、デフォルトのレジストリをサポートしています。アカウント用に追加のカスタムレジストリを作成できます。カスタムレジストリは、リソースへのアクセスをグループ化および管理するのに優れた方法です。例えば、販売データ用に1つのカスタムレジストリを作成し、支出データ用に別のカスタムレジストリを作成し、 DCR 権限およびカスタム RBAC ロール 経由でこれらのレジストリへのアクセスを適切なユーザーに付与することができます。

レジストリルール

レジストリに関する主なルールは次のとおりです。

  • レジストリはアカウントレベルのオブジェクトです。ユーザーは、自分のアカウントのレジストリのみを表示し、アクセスできます。ただし、レジストリ内のリソースをコラボレーションにリンクすると、そのリソースは仕様に従ってアクセスできるすべての人に表示されます。リソースを含んでいるレジストリへのアクセスは必要ありません。

  • 各カスタムレジストリは、単一のリソースタイプ(テンプレート、データ提供など)をサポートしています。リソース型はレジストリの作成時に指定されます。デフォルトのレジストリは、任意のリソースタイプをサポートしています。

  • アカウントで作成できるカスタムレジストリの数に制限はありません。

  • リソースを登録するときに、任意のレジストリ名パラメーターを使用してカスタムレジストリを指定できます。カスタムレジストリを指定しない場合、リソースはアカウントのデフォルトレジストリに登録されます。

  • すべてのユーザーは、アカウントのデフォルトレジストリにアクセスできます。ただし、カスタムレジストリは、最初は作成者にのみ公開されており、追加のユーザーには GRANT_PRIVILEGE_ON_OBJECT_TO_ROLE を呼び出して明示的にアクセスを付与する必要があります。

  • アカウントは、同じリソースタイプを格納する複数のレジストリを持つことができます。

  • レジストリに最大リソース数はありません。

  • リソースは、その種類のリソースについて、そのアカウントのすべてのレジストリで一意の名前を持っている必要があります。例えば、同じアカウントに sales という名前のテンプレートと sales という名前のデータ提供を持つことができますが、同じアカウントの同じレジストリ、または異なるレジストリに sales という名前のテンプレートを2つ持つことはできません。リソース名は仕様で最上位の name 値として定義されています。

  • 2つの異なるアカウントが、同じ名前とタイプのリソースをコラボレーションにリンクする場合、それは許可されます。コラボレーション仕様には同じ名前のリソースが表示されますが、システムはどのリソースが意図されているかを知ることができます。その名前のリソースは、コラボレーションにリソースをリンクしたアカウントから使用されます。

この例では、カスタムレジストリを作成し、そこにテンプレートを登録し、新しいロールにそのレジストリへの読み取りアクセスを付与します。そのロールを持つユーザーは、そのレジストリのテンプレートをコラボレーションにリンクすることができます。

-- 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;