概要
データをコピーせずにアカウント間で共有する仕組み。
いわゆるSSOT(Single Source Of True)を実現できる。
アカウント内のデータベース内の選択した以下のオブジェクトを他のSnowflakeアカウントと共有できる。
- テーブル
- 外部テーブル
- セキュアビュー
- セキュアマテリアライズドビュー
- セキュアUDFs
公式のURLは以下。Secure Data Sharingの紹介
アーキテクチャと仕様
Shareで何が出来るか、はShareのアーキテクチャに依存するところが多い。
Shareのアーキテクチャは公式の以下の図が参考になる。
オブジェクトを提供する側(プロバイダ)と、利用する側(コンシューマ)からなる。
コンシューマは複数のプロバイダからオブジェクトの共有を受けることができる。
プロバイダが Shareオブジェクト を介してコンシューマとオブジェクトを共有する。
重要な点は、オブジェクトはアカウント間でコピーされず、ある時点のポインタが共有される点。
この構造に由来して、以下のような特徴がある。
- Shareから作成するオブジェクトは読み取り専用
- Shareからオブジェクトを作成する操作は瞬時に完了する
- コンシューマはストレージを消費しない
- 共有データに対するクエリを実行するウェアハウスのコストのみ消費する
- コンシューマはShareの再Shareはできない。
「Share」と「共有」が混在して読みづらいな…。
Shareオブジェクト
Shareは Database や Schema と同様にセキュリティ保護可能なオブジェクトである。
その実体は、共有するオブジェクトの権限とコンシューマアカウントをカプセル化したものである。
従って、Shareを開始する際に、プロバイダはこれら2つの情報を設定する。
- DB,Schema内に共有するSecure View, View, Table,UDFsなどを作成する
- Shareオブジェクトを作成する
- ShareオブジェクトにDB,Schemaに対するUSAGE権限を付与する
- Shareオブジェクトに共有するオブジェクトに対するSELECT権限を付与する
- Shareオブジェクトに共有先アカウントを紐づける
Shareに含まれるオブジェクトはプロバイダによって100%管理される。
つまり、プロバイダが誰に何を共有するか、共有の開始/終了、等を管理する。
プロバイダとコンシューマがShareを共有していた場合、
もしプロバイダがShareにオブジェクトを追加したとしても、即座にコンシューマに連携されない。
機密データのShare
共有するデータベースに機密データが含まれるシナリオについて公式に別立てされている。
機密データが含まれるテーブルを直接共有した場合、もちろん機密データは共有される。
Secure View,およびSecure UDFsを介すことで機密データを保護しつつ共有できる。
共有するデータベースのスキーマをPrivateとPublicに分ける。
Privateには機密データを含むテーブル、PublicにはSecure Viewを配置する。
PublicのSecure ViewはPrivateの機密データテーブルを参照する。
Secure Viewの外からはPrivateの機密データを参照できないものとする。
PublicのSecure ViewのみをShareの対象とすれば、コンシューマからはPrivateは読めない。