セキュアオブジェクトを使用したデータアクセスの制御を使用する¶
共有データベースの機密データがコンシューマーアカウントのユーザーに公開されないように、Snowflakeは、テーブルを直接共有するのではなく、 セキュアビュー および/または セキュア UDFs を共有することを 強く お勧めします。
さらに、特に非常に大きなテーブルでデータを共有する場合に最適なパフォーマンスを得るために、安全なオブジェクトのベーステーブルで clustering keys を定義することをお勧めします。
このトピックでは、共有セキュアオブジェクトのためのベーステーブルにおけるクラスタリングキーの使用について説明し、セキュアビューをコンシューマーアカウントと共有するための詳細な手順を提供します。データプロバイダーとコンシューマーの両方にサンプルスクリプトを提供します。
注釈
セキュアオブジェクトを共有するための手順は、テーブルを共有する場合と基本的に同じですが、次のオブジェクトが追加されています。
ベーステーブルを含む「プライベート」スキーマと、セキュアオブジェクトを含む「パブリック」スキーマ。パブリックスキーマとセキュアオブジェクトのみが共有されます。
「マッピングテーブル」(「プライベート」スキーマにおいても)は、ベーステーブルのデータを複数のコンシューマアカウントと共有し、テーブル内の特定の行を特定のアカウントと共有する場合にのみ必要です。
サンプルの設定とタスク¶
これらのサンプル手順では、 mydb という名前のデータベースがデータプロバイダーアカウントに存在し、 private と public の2つのスキーマを持っていることを前提としています。データベースとスキーマが存在しない場合は、先に進む前にそれらを作成する必要があります。
ステップ1: プライベートスキーマでデータとマッピングテーブルを作成する¶
mydb.private スキーマに次の2つのテーブルを作成し、それらにデータを入力します。
sensitive_data --- 共有するデータと、アカウントによるデータアクセスを制御するための access_id 列が含まれています。sharing_access --- access_id 列を使用して、共有データとデータにアクセスできるアカウントをマップします。ステップ2: パブリックスキーマにセキュアビューを作成する¶
mydb.public スキーマに次のセキュアビューを作成します。
paid_sensitive_data --- アカウントに基づいてデータを表示します。ベーステーブル(sensitive_data)の access_id 列をビューに含める必要はありません。
ステップ3: テーブルとセキュアビューを検証する¶
テーブルとセキュアビューを検証して、アカウントによってデータが適切にフィルターされることを確認します。
他のアカウントと共有されるセキュアビューの検証を有効にするために、Snowflakeはセッションパラメーター SIMULATED_DATA_SHARING_CONSUMER を提供します。このセッションパラメーターを、アクセスをシミュレートするコンシューマアカウントの名前に設定します。その後、ビューをクエリして、コンシューマーアカウントのユーザーに表示される結果を確認できます。
サンプルスクリプト¶
次のスクリプトは、前のセクションで説明したすべてのタスクの実行を示しています。
「プライベート」スキーマに2つのテーブルを作成し、最初のテーブルに3つの異なる企業(Apple、Microsoft、および IBM)の株式データを入力します。そして、2番目のテーブルに株式データを個々のアカウントにマップするデータを入力します。
「公開」スキーマにセキュアビューを作成します。このビューは、2番目のテーブルのマッピング情報を使用して、最初のテーブルの株式データをアカウント別にフィルター処理します。
ACCOUNTADMIN ロールを使用して共有を作成します。
オブジェクトを共有に追加します。これらのオブジェクトに対する権限をデータベースロール経由で共有に追加する(オプション1)か、オブジェクトに対する権限を共有に直接付与する(オプション2)かの いずれか を選択できます。
アカウントを共有に追加します。
サンプルスクリプト(コンシューマー用)¶
コンシューマーは次のスクリプトを使用してデータベースを作成し(上記のスクリプトで作成した共有から)、結果のデータベースのセキュアビューをクエリできます。
共有からデータベースを作成して、共有データベースをアカウントに取り込みます。
データベースに対する権限をアカウント内の他のロールに付与します(例: CUSTOM_ROLE 1)。GRANT ステートメントは、データコンシューマーがデータベースロールを使用してオブジェクトを共有に追加した(オプション1)か、オブジェクトに対する権限を直接共有に付与した(オプション 2)かによって異なります。
CUSTOM_ROLE 1ロールを使用して、作成したデータベースのビューをクエリします。クエリを実行するには、セッションで使用中のアクティブなウェアハウスが必要であることに注意してください。USE WAREHOUSE コマンドで、 <ウェアハウス名> をアカウント内のいずれかのウェアハウス名に置き換えます。CUSTOM_ROLE 1ロールには、ウェアハウスに対する USAGE 権限が必要です: