CREATE PRIVACY POLICY

新しい プライバシーポリシー を作成するか、既存のプライバシーポリシーを置き換えます。

こちらもご参照ください。

ALTER PRIVACY POLICYDESCRIBE PRIVACY POLICYDROP PRIVACY POLICYSHOW PRIVACY POLICIES

構文

CREATE [ OR REPLACE ] PRIVACY POLICY [ IF NOT EXISTS ] <name>
  AS () RETURNS PRIVACY_BUDGET -> <body>
  [ COMMENT = '<string_literal>' ]
Copy

必須パラメーター

name

プライバシーポリシーの識別子(つまり名前)を指定する文字列。プライバシーポリシーが作成されるスキーマで一意である必要があります。

また、識別子はアルファベット文字で始まる必要があり、識別子文字列全体が二重引用符で囲まれていない限り、スペースや特殊文字を含めることはできません(例: "My object")。二重引用符で囲まれた識別子も大文字と小文字が区別されます。

詳細については、 識別子の要件 をご参照ください。

body

ボディの SQL 式は、ポリシーの戻り値を制御する NO_PRIVACY_POLICY と PRIVACY_BUDGET という2つの関数を呼び出します。ポリシーが割り当てられたテーブルに対してクエリが実行されると、Snowflakeはボディの条件を評価して適切な関数を呼び出し、値を返します。この返り値は、プライバシー保護されたテーブルに対するクエリにどのプライバシーバジェット(もしあれば)が関連付けられているかを決定します。

この表現は、 CURRENT_ROLEINVOKER_ROLE などのコンテキスト関数を使用して、ユーザーやユーザーグループをプライバシー予算と関連付けることができます。

ボディの式で CASE ブロックを使用する場合、 NO_PRIVACY_POLICY または PRIVACY_BUDGET のいずれかを呼び出す ELSE ステートメントを含める必要があります。すべてのユーザーは、プライバシー予算に関連付けられているか、プライバシー保護されたテーブルへの無制限のアクセス権を持っている必要があります。プライバシーで保護されたテーブルやビューにユーザーがアクセスできないようにする場合は、プライバシーポリシーで定義するのではなく、 SELECT の権限を取り消してください。

NO_PRIVACY_POLICY

プライバシーポリシーが割り当てられているテーブルまたはビューにクエリが無制限にアクセスできるようにする場合は、本文の式を使用して NO_PRIVACY_POLICY 関数を呼び出します。

PRIVACY_BUDGET

ポリシーからプライバシー予算を返す場合は、本文の式を使用して PRIVACY_BUDGET 関数を呼び出します。この式は、クエリを実行するユーザーなどの要因に基づいて、異なるクエリに対して異なるプライバシー予算を返すポリシーを可能にする条件を含むことができます。

クロスアカウントコラボレーションでは、プライバシー予算はコンシューマアカウントのアカウント識別子によって自動的に名前空間化されるため、プライバシー予算の名前が同じであっても、2つの異なるコンシューマアカウントが同じプライバシー予算を共有することはありません。 CURRENT_ACCOUNT 関数を使用してアカウント名とプライバシー予算名を連結することで、プライバシー予算を区別することができます。例えば、次のように関数を呼び出すことができます: PRIVACY_BUDGET(BUDGET_NAME => 'external_budget.' || CURRENT_ACCOUNT())

PRIVACY_BUDGET 関数のシグネチャは以下です。

PRIVACY_BUDGET(
  BUDGET_NAME=> '<string>'
  [, BUDGET_LIMIT=> <decimal> ]
  [, MAX_BUDGET_PER_AGGREGATE=> <decimal> ]
  [, BUDGET_WINDOW=> <string> ]
)
Copy

プライバシー予算の議論

BUDGET_NAME => expression

解決先:プライバシー予算の名前。Snowflakeは、プライバシーポリシーのボディにプライバシー予算の名前が指定されると、自動的にプライバシー予算を作成します。

BUDGET_LIMIT => decimal

このプライバシーポリシーの予算上限を指定する10進数> 0 。これは、許容されるプライバシー損失の総量を制御します。この値を調整することで、リフレッシュ期間中にこのプライバシー予算で保護されたテーブルに対して計算できる差分プライベート・アグリゲートの合計数が変わります。累積プライバシー損失がこの数値を超えるようなクエリが実行されると、そのクエリは失敗します。大まかな見積もりとして、 MAX_BUDGET_PER_AGGREGATE=1 の233の予算制限で、リフレッシュ期間ごとに約1000の骨材を使用することができます。

デフォルト:233.0

MAX_BUDGET_PER_AGGREGATE => decimal

クエリの各集約関数にどれだけのプライバシー予算を使用するかを指定します。この値を調整することで、各集計クエリに追加されるノイズの量が変化し、予算の上限に達する前に計算できる集計の数も変化します。たとえば、 select count(*), avg(a) ... クエリに count(*)avg(a) の2つの集計があるとします。10進数> 0 で指定します。

デフォルト:0.5

BUDGET_WINDOW => string

プライバシー予算がリフレッシュされる頻度、つまり累積プライバシー損失が0にリセットされる頻度。有効な値:

  • Daily:毎日12:00 AM UTC に更新

  • Weekly:毎週日曜日12:00 AM UTC に更新

  • Monthly:暦月の初日12:00 AM UTC に更新

  • Yearly:1月1日12:00 AM UTC に更新

  • Never:プライバシー予算が更新されることはありません。

デフォルト:毎週

オプションのパラメーター

COMMENT = 'string_literal'

プライバシーポリシーのコメントを指定します。

デフォルト: 値なし

アクセス制御の要件

この SQL コマンドの実行に使用される ロール には、少なくとも次の 権限 が必要です。

権限

オブジェクト

メモ

CREATE PRIVACY POLICY

スキーマ

スキーマ内の任意のオブジェクトを操作するには、親データベースとスキーマに対する USAGE 権限も必要であることに注意してください。

指定された権限のセットを使用してカスタムロールを作成する手順については、 カスタムロールの作成 をご参照ください。

セキュリティ保護可能なオブジェクト に対して SQL アクションを実行するためのロールと権限付与に関する一般的な情報については、 アクセス制御の概要 をご参照ください。

使用上の注意

  • メタデータについて:

    注意

    Snowflakeサービスを使用する場合、お客様は、個人データ(ユーザーオブジェクト向け以外)、機密データ、輸出管理データ、またはその他の規制されたデータがメタデータとして入力されていないことを確認する必要があります。詳細については、 Snowflakeのメタデータフィールド をご参照ください。

  • CREATE OR REPLACE <オブジェクト> ステートメントはアトミックです。つまり、オブジェクトが置き換えられると、単一のトランザクションで、古いオブジェクトが削除されて新しいオブジェクトが作成されます。

analysts という予算を常に返すプライバシー・ポリシーを作成します。

CREATE PRIVACY POLICY my_priv_policy
  AS ( ) RETURNS PRIVACY_BUDGET ->
  PRIVACY_BUDGET(BUDGET_NAME=> 'analysts');
Copy

プライバシー保護されたテーブルに admin 無制限にアクセスできるようにする一方、他のすべてのユーザーをプライバシー予算 analysts に関連付けるプライバシーポリシーを作成します。

CREATE PRIVACY POLICY my_priv_policy
  AS () RETURNS PRIVACY_BUDGET ->
    CASE
      WHEN CURRENT_USER() = 'ADMIN'
        THEN NO_PRIVACY_POLICY()
      ELSE PRIVACY_BUDGET(BUDGET_NAME => 'analysts')
    END;
Copy