CREATE PRIVACY POLICY¶
新しい プライバシーポリシー を作成するか、既存のプライバシーポリシーを置き換えます。
- こちらもご参照ください。
ALTER PRIVACY POLICY、 DESCRIBE PRIVACY POLICY、 DROP PRIVACY POLICY、 SHOW PRIVACY POLICIES
構文¶
CREATE [ OR REPLACE ] PRIVACY POLICY [ IF NOT EXISTS ] <name>
AS () RETURNS PRIVACY_BUDGET -> <body>
[ COMMENT = '<string_literal>' ]
必須パラメーター¶
name
プライバシーポリシーの識別子(つまり名前)を指定する文字列。プライバシーポリシーが作成されるスキーマで一意である必要があります。
また、識別子はアルファベット文字で始まる必要があり、識別子文字列全体が二重引用符で囲まれていない限り、スペースや特殊文字を含めることはできません(例:
"My object"
)。二重引用符で囲まれた識別子も大文字と小文字が区別されます。詳細については、 識別子の要件 をご参照ください。
body
ボディの SQL 式は、ポリシーの戻り値を制御する NO_PRIVACY_POLICY と PRIVACY_BUDGET という2つの関数を呼び出します。ポリシーが割り当てられたテーブルに対してクエリが実行されると、Snowflakeはボディの条件を評価して適切な関数を呼び出し、値を返します。この返り値は、プライバシー保護されたテーブルに対するクエリにどのプライバシーバジェット(もしあれば)が関連付けられているかを決定します。
この表現は、 CURRENT_ROLE や INVOKER_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> ] )
プライバシー予算の議論
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');
プライバシー保護されたテーブルに 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;