Richtlinien für Clean Room-Tabellen¶
Clean rooms can implement data policies to control how data can be used by collaborators. These are in addition to any Snowflake table policies set on the underlying tables linked into the clean room.
Each collaborator in a clean room can set policies on their own data. Your policies are enforced only in requests from other users; your policies are not enforced against your own requests. For example, if your join policy allows joins against only column A, other users are restricted to joining on column A, but you can run joins against any of your columns.
Clean Room-Richtlinien können über die Clean Room API oder UI festgelegt werden.
Um Richtlinienprüfungen zu implementieren, muss Folgendes zutreffen:
Der Dateneigentümer muss eine Richtlinie in seinem Clean Room festlegen. Sie können Richtlinien über API oder UI festlegen. Jeder Richtlinientyp wird separat festgelegt. Der Clean Room implementiert nativ Spaltenrichtlinien, Zeilenrichtlinien und Aktivierungsrichtlinien. Clean Room-Richtlinien sind nicht additiv: Wenn Sie eine Clean Room-Richtlinie festlegen, werden alle vorherigen Werte gelöscht.
-- Sets a join policy on column HASHED_EMAIL. CALL samooha_by_snowflake_local_db.provider.set_join_policy( 'my_provider_cleanroom', ['my_db.my_sch.T1:HASHED_EMAIL']); -- Replaces the previous join policy. Now the only column in the join policy is AGE_BND. CALL samooha_by_snowflake_local_db.provider.set_join_policy( 'my_provider_cleanroom', ['my_db.my_sch.T1:AGE_BAND']);
Die Vorlage muss die Richtlinie an der entsprechenden Stelle in der Vorlage überprüfen. Eine Clean Room-Richtlinie wird nur geprüft, wenn auf die Spalte in der Vorlage der entsprechende Richtlinienfilter angewendet wurde. Wenn Sie eine Clean Room-Richtlinie festlegen, um Ihre Daten zu schützen, sollten Sie die Vorlage daraufhin untersuchen, ob die Vorlage Ihre Richtlinien wie erwartet durchsetzt. Die folgende Vorlage prüft, ob col1 von der Spaltenrichtlinie des Dateneigentümers zugelassen ist:
SELECT IDENTIFIER( {{ col1 | column_policy }} ) FROM {{ source_table[0] }} AS c;
Die folgende Vorlage prüft nicht, ob
col1über eine Clean Room-Richtlinie verfügt:SELECT IDENTIFIER( {{ col1 }}) FROM {{ source_table[0] }} AS c;
Clean Rooms unterstützt unterschiedliche Vorlagenfilter für die einzelnen Richtlinientypen. Die Semantik des Filters wird jedoch nicht geprüft, sondern nur, ob die Spalte in der Richtlinie für diesen Filtertyp enthalten ist. Im folgenden -Ausschnitt wird beispielsweise die Verknüpfungsrichtlinie auf
col1geprüft, obwohl die Spalte nicht mit verknüpft ist. Wenncol1in der Verknüpfungsrichtlinie des Dateneigentümers enthalten ist, kann die Abfrage erfolgreich sein. Wenncol1nicht in der Verknüpfungsrichtlinie des Dateneigentümers enthalten ist, wird die Abfrage blockiert.SELECT IDENTIFIER( {{ col1 | join_policy }}) FROM {{ source_table[0] }} AS c;
Bemerkung
Spaltenrichtlinienprüfungen werden durchgeführt, wenn die JinjaSQL der Vorlage analysiert wird. Abfragen mit Platzhaltern werden von diesen Prüfungen möglicherweise nicht erfasst, sodass Sie bei der Gestaltung einer Analysevorlage bedacht vorgehen sollten. Wenn einige Spalten wirklich nie abgefragt werden sollen, sollten Sie eine Ansicht Ihrer Quelltabelle erstellen, die diese sensiblen Spalten eliminiert, und stattdessen eine Verknüpfung in dieser Ansicht erstellen.
Snowflake-Richtlinien in Clean Rooms¶
When you link tables into a clean room, any Snowflake table policies on the source tables are enforced in the linked tables in the clean
room, but these policies aren’t necessarily reported by the clean room API or UI. For instance, a
Snowflake join policy continues to be enforced in the clean room, but that join policy is not visible
by calling consumer.view_provider_join_policy or consumer.view_join_policy. Therefore, you should either remove policies from the
underlying linked tables, create equivalent clean room policies (when they exist), or communicate the existence of these policies clearly
to your collaborators so that their queries don’t fail or behave unexpectedly („why can’t I join on this column?“).
Alle Änderungen an Snowflake-Richtlinien in den Quelltabellen werden automatisch an die verknüpften Ansichten im Clean Room weitergegeben.
Snowflake-Datenschutzrichtlinien verhindern die Erstellung einer Ansicht aus einer geschützten Tabelle, sodass Sie keine Tabellen mit Datenschutzrichtlinien verknüpfen können.
Verknüpfungsrichtlinien¶
Set a join policy to indicate which columns in your data can be joined on by any template in the clean room. (Snowflake join policies, in contrast, specify which columns must be joined on.) Join policies apply to all templates in the clean room.
A column cannot be in both a join policy and a column policy, but a column can be in both a join policy and an activation policy.
Implementierung einer Verknüpfungsrichtlinie¶
Clean room join policies are enforced against a column if the template applies the join_policy or join_and_column_policy
filter to the column.
Wenn eine Vorlage eine Verknüpfungsrichtlinie für eine Spalte prüft und im Clean Room keine Verknüpfungsrichtlinien festgelegt sind oder die Spalte nicht in der Verknüpfungsrichtlinie enthalten ist, wird die Abfrage blockiert.
Der folgende Code zeigt, wie Sie Verknüpfungsrichtlinien als Anbieter oder Verbraucher festlegen. Denken Sie daran, dass Richtlinien nur für Abfragen gelten, die von einem anderen Konto ausgeführt werden.
-- Set join policies on two columns in a clean room where you are a provider.
CALL samooha_by_snowflake_local_db.provider.set_join_policy(
'my_provider_cleanroom',
['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:HASHED_EMAIL', 'MYDB.MYSCH.EXPOSURES:HASHED_EMAIL']);
-- Set join policies on two columns in a clean room where you are a consumer.
CALL samooha_by_snowflake_local_db.consumer.set_join_policy(
'my_consumer_cleanroom',
['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:HASHED_EMAIL', 'MYDB.MYSCH.EXPOSURES:HASHED_EMAIL']);
Mit den folgenden Prozeduren können Sie Verknüpfungsrichtlinien im Code anzeigen oder verwalten:
consumer.set_join_policyconsumer.view_provider_join_policyconsumer.view_join_policyprovider.view_join_policyprovider.set_join_policy
Spaltenrichtlinien¶
Set a column policy to indicate which of your columns can be projected in analysis results from a specific template. Column policies are applied to specific templates in a specific clean room.
Eine Spalte kann nicht sowohl in einer Verknüpfungs- als auch in einer Spaltenrichtlinie enthalten sein. Eine Spalte kann sowohl in einer Aktivierungs- als auch in einer Spaltenrichtlinie enthalten sein.
Implementierung einer Spaltenrichtlinie¶
Clean room column policies are enforced against a column only if the template uses the column_policy or join_and_column_policy
filter.
Wenn ein Clean Room eine Spaltenrichtlinie für eine Spalte prüft und die Spalte nicht in der Spaltenrichtlinie enthalten ist oder der Clean Room über keine Spaltenrichtlinien verfügt, wird die Abfrage blockiert.
Der folgende Code zeigt, wie Spaltenrichtlinien für drei Spalten festgelegt werden, wenn der Zugriff über die prod_overlap_analysis-Vorlage erfolgt. Das Beispiel zeigt, wie Sie die Richtlinie sowohl als Anbieter als auch als Verbraucher einstellen können. Denken Sie daran, dass Richtlinien nur für Abfragen gelten, die von einem anderen Konto ausgeführt werden.
-- Set column policy on prod_overlap_analysis template in a clean room where
-- you are a provider.
call samooha_by_snowflake_local_db.provider.set_column_policy(
'my_provider_cleanroom',
['prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:STATUS',
'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:AGE_BAND',
'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:DAYS_ACTIVE']);
-- Set column policy on prod_overlap_analysis template in a clean room where
-- you are a consumer.
call samooha_by_snowflake_local_db.consumer.set_column_policy(
'my_consumer_cleanroom',
['prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:STATUS',
'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:AGE_BAND',
'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:DAYS_ACTIVE']);
Die folgenden Prozeduren werden verwendet, um Spaltenrichtlinien im Code anzuzeigen oder zu verwalten:
consumer.set_column_policyconsumer.view_column_policyconsumer.view_provider_column_policyprovider.set_column_policyprovider.view_column_policy
Aktivierungsrichtlinien¶
Set an activation policy to indicate which of your columns can be activated by an activation template. Activation saves query results to a table in the Snowflake account of the provider or consumer, or to a third-party activation connector.
Eine Spalte kann sowohl Teil einer Aktivierungsrichtlinie als auch einer beliebigen anderen Richtlinie sein.
Aktivierungsrichtlinie implementieren¶
Aktivierungsrichtlinien können in der Clean Room UI festgelegt werden, wenn die Vorlage die Aktivierung zulässt.
Aktivierungsrichtlinien werden für eine bestimmte Spalte in einer bestimmten Vorlage festgelegt.
Activation policies are enforced against a column only if the template applies the activation_policy filter to the column.
The following code demonstrates setting an activation policy to allow the HASHED_EMAIL and REGION_CODE columns to be activated in a clean room. This policy affects all users and all activation templates in the clean room. There are equivalent procedures for providers and consumers in a clean room. Call the procedure that reflects your role in the clean room.
-- Set activation policy on prod_overlap_analysis template in a clean room where you are a provider
call samooha_by_snowflake_local_db.provider.set_activation_policy('my_cleanroom', [
'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:HASHED_EMAIL',
'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:REGION_CODE' ]);
-- Set activation policy on prod_overlap_analysis template in a clean room where you are a consumer
call samooha_by_snowflake_local_db.consumer.set_activation_policy('my_cleanroom', [
'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE_NAME.DEMO.CUSTOMERS:HASHED_EMAIL',
'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE_NAME.DEMO.CUSTOMERS:REGION_CODE' ]);
Die folgenden Prozeduren werden verwendet, um Aktivierungsrichtlinien im Code zu verwalten:
consumer.set_activation_policyprovider.set_activation_policy
Aggregationsrichtlinien¶
Aggregationsrichtlinien verlangen, dass alle Abfragen für eine Tabelle Aggregationen enthalten (GROUP BY, COUNT und andere Funktionen) und außerdem eine Mindestanzahl von Zeilen pro Ergebnisgruppe erforderlich ist, da die Gruppe sonst aus den Ergebnissen weggelassen wird.
Clean Rooms haben keine eigene Implementierung von Aggregationsrichtlinien. Um Aggregationseinschränkungen auf Ihre verknüpften Daten anzuwenden, wenden Sie entweder eine Aggregationsrichtlinie auf die Quelltabelle an oder implementieren Sie Aggregationseinschränkungen in Ihrer Vorlage.
Einige von Snowflake bereitgestellte Vorlagen verwenden die für einen Benutzer oder eine Vorlage festgelegten Parameter threshold und threshold_value. Diese Werte können in der Clean Room UI oder durch den Aufruf von provider.add_consumers oder provider/consumer.set_privacy geändert werden. Wenn dies für einen Verbraucher festgelegt ist, können Sie auf diese Werte in Ihrer Vorlage zugreifen.