ALTER PRIVACY POLICY¶
既存の プライバシーポリシー のプロパティを変更します。
注意
budget_limit、 max_budget_per_aggregate、 budget_window を変更すると、 ALTER コマンドで指定されていないプロパティはデフォルト値に戻ります。パラメータの現在値を取得するには、 DESCRIBE PRIVACY POLICY コマンドを実行します。
- こちらもご参照ください。
CREATE PRIVACY POLICY、 DESCRIBE PRIVACY POLICY、 DROP PRIVACY POLICY、 SHOW PRIVACY POLICIES
構文¶
ALTER PRIVACY POLICY [ IF EXISTS ] <name> RENAME TO <new_name>
ALTER PRIVACY POLICY [ IF EXISTS ] <name> SET BODY -> <expression>
ALTER PRIVACY POLICY <name> SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ]
ALTER PRIVACY POLICY <name> UNSET TAG <tag_name> [ , <tag_name> ... ]
ALTER PRIVACY POLICY [ IF EXISTS ] <name> SET COMMENT = '<string_literal>'
ALTER PRIVACY POLICY [ IF EXISTS ] <name> UNSET COMMENT
パラメーター¶
name変更するプライバシーポリシーの識別子を指定します。
識別子にスペースまたは特殊文字が含まれる場合は、文字列全体を二重引用符で囲む必要があります。二重引用符で囲まれた識別子も大文字と小文字が区別されます。
詳細については、 識別子の要件 をご参照ください。
RENAME TO new_nameプライバシーポリシーの新しい識別子を指定します。スキーマに対して一意である必要があります。識別子が別のリストにすでに配置されている場合、新しい識別子は使用できません。
詳細については、 識別子の要件 をご参照ください。
オプションでオブジェクトの名前を変更して、オブジェクトを別のデータベースやスキーマに移動できます。これを実行するには、新しいデータベース名やスキーマ名をそれぞれ
db_name.schema_name.object_nameまたはschema_name.object_nameの形式で含む、修飾されたnew_name値を指定します。注釈
宛先データベースやスキーマはすでに存在している必要があります。また、同じ名前のオブジェクトが宛先データベースにすでに存在することはできません。存在する場合、ステートメントはエラーを返します。
オブジェクトを管理アクセススキーマに移動することは、オブジェクトの所有者(つまり、オブジェクトに対して OWNERSHIP 権限を持つロール)がターゲットスキーマも所有している場合を 除き 禁止されています。
SET ...プライバシーポリシーに設定する1つ以上のプロパティを指定します。
BODY -> expressionポリシーの新しいボディを指定します。
ボディの 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:プライバシー予算が更新されることはありません。
デフォルト:毎週
TAG tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ]タグ の名前とタグ文字列の値を指定します。
タグ値は常に文字列であり、タグ値の最大文字数は256です。
ステートメントでのタグの指定に関する情報については、 Tag quotas をご参照ください。
COMMENT = 'string_literal'プライバシーポリシーのコメントを追加するか、既存のコメントを上書きします。
デフォルト: 値なし
UNSET ...プライバシーポリシーに対して、デフォルトにリセットして設定を解除する1つまたは複数のプロパティおよび/またはパラメーターを指定します。
TAG tag_name [ , tag_name ... ]COMMENT
プロパティ/パラメーターをリセットするときは、名前のみを指定します。プロパティの値を指定すると、エラーが返されます。
アクセス制御の要件¶
この操作の実行に使用される ロール には、少なくとも次の 権限 が必要です。
権限 |
オブジェクト |
注意 |
|---|---|---|
OWNERSHIP |
プライバシーポリシー |
OWNERSHIP is a special privilege on an object that is automatically granted to the role that created the object, but can also be transferred using the GRANT OWNERSHIP command to a different role by the owning role (or any role with the MANAGE GRANTS privilege). |
Operating on an object in a schema requires at least one privilege on the parent database and at least one privilege on the parent schema.
指定された権限のセットを使用してカスタムロールを作成する手順については、 カスタムロールの作成 をご参照ください。
セキュリティ保護可能なオブジェクト に対して SQL アクションを実行するためのロールと権限付与に関する一般的な情報については、 アクセス制御の概要 をご参照ください。
使用上の注意¶
既存のプライバシーポリシーを更新し、ポリシーの現在の定義を確認する必要がある場合は、 DESCRIBE PRIVACY POLICY コマンドを実行します。また、 GET_DDL 関数を使用して、プライバシーポリシーのボディを含む完全な定義を取得することもできます。
プライバシーポリシーを マネージドアクセススキーマ に(ALTER PRIVACY POLICY ... RENAME TO 構文を使用して)移動することは、プライバシーポリシーの所有者(つまり、プライバシーポリシーの OWNERSHIP 権限を持つロール)がターゲットスキーマも所有している場合を 除き 、禁止されています。
メタデータについて:
注意
Snowflakeサービスを使用する場合、お客様は、個人データ(ユーザーオブジェクト向け以外)、機密データ、輸出管理データ、またはその他の規制されたデータがメタデータとして入力されていないことを確認する必要があります。詳細については、 Snowflakeのメタデータフィールド をご参照ください。
例¶
プライバシーポリシーのボディ my_priv_policy を変更し、常に analysts という名前の予算を返すようにします。
-- Modify the body of privacy policy "my_priv_policy" so it always returns a -- budget named "analysts" ALTER PRIVACY POLICY my_priv_policy SET BODY -> PRIVACY_BUDGET(BUDGET_NAME => 'analysts'); -- Set budget limit to 50 and max budget per aggregate to 0.1 -- budget window is not mentioned so it is reset to its default value ALTER PRIVACY POLICY users_policy SET BODY -> privacy_budget(budget_name=>'analysts', budget_limit=>50, max_budget_per_aggregate=>0.1);