Compreensão das políticas de tabela de clean room¶
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.
As políticas de clean room podem ser definidas usando a API ou UI de clean room.
Para implementar verificações de política, estas condições devem ser verdadeiras:
O proprietário dos dados deve definir uma política na sala limpa dele. Você pode definir políticas usando a API ou a UI. Cada tipo de política é definida separadamente. A sala limpa implementa nativamente políticas de coluna, de linha e de ativação. As políticas de sala limpa não são aditivas: quando você define uma política de sala limpa, todos os valores anteriores são excluídos.
-- 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']);
O modelo deve verificar a política no local apropriado do modelo. Uma política de sala limpa será verificada somente se tiver o filtro de política apropriado aplicado à coluna no modelo. Se você definir uma política de sala limpa para proteger seus dados, deverá examinar o modelo para confirmar se ele está aplicando suas políticas conforme o esperado. O seguinte modelo verifica se col1 é permitida pela política de coluna do proprietário dos dados:
SELECT IDENTIFIER( {{ col1 | column_policy }} ) FROM {{ source_table[0] }} AS c;
O seguinte modelo não verifica se
col1tem uma política de sala limpa:SELECT IDENTIFIER( {{ col1 }}) FROM {{ source_table[0] }} AS c;
As salas limpas oferecem suporte a um filtro de modelo diferente para cada tipo de política. Entretanto, a semântica do filtro não é verificada, apenas se a coluna está na política para esse tipo de filtro. Por exemplo, no trecho a seguir,
col1é verificada na política de junção, mesmo que a coluna não esteja passando por junção. Secol1estiver na política de junção do proprietário dos dados, a consulta poderá ser bem-sucedida; secol1não estiver na política de junção do proprietário dos dados, a consulta será bloqueada.SELECT IDENTIFIER( {{ col1 | join_policy }}) FROM {{ source_table[0] }} AS c;
Nota
As verificações de política de coluna são realizadas quando o modelo JinjaSQL é analisado. As consultas com curingas podem não ser detectadas com essas verificações, e você deve ter cuidado ao criar um modelo de análise. Se houver colunas que realmente nunca devem ser consultadas, considere criar uma exibição de sua tabela de origem que elimine essas colunas confidenciais e crie um link nessa exibição.
Políticas do Snowflake em salas limpas¶
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?»).
Qualquer alteração feita nas políticas do Snowflake nas tabelas de origem é propagada automaticamente para as exibições vinculadas na sala limpa.
As políticas de privacidade do Snowflake impedem a criação de uma exibição a partir de uma tabela protegida; portanto, você não pode criar links em tabelas que tenham políticas de privacidade.
As seguintes políticas podem ser aplicadas diretamente a uma sala limpa:
Políticas de junção¶
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.
Implementação de uma política de associação¶
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.
Se um modelo verificar uma política de junção para uma coluna e a sala limpa não tiver políticas de junção definidas, ou a coluna não estiver na política de junção, a consulta será bloqueada.
O código a seguir mostra como definir políticas de junção como provedor ou consumidor. Lembre-se de que as políticas são aplicadas apenas a consultas executadas por outra conta.
-- 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']);
Os procedimentos a seguir são usados para visualizar ou gerenciar políticas de associação no código:
consumer.set_join_policyconsumer.view_provider_join_policyconsumer.view_join_policyprovider.view_join_policyprovider.set_join_policy
Políticas de coluna¶
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.
Uma coluna não pode estar em uma junção e em uma política de coluna. Uma coluna pode estar tanto em uma política de ativação quanto em uma política de coluna.
Implementação de uma política de coluna¶
Clean room column policies are enforced against a column only if the template uses the column_policy or join_and_column_policy
filter.
Se uma sala limpa verificar uma política de coluna para uma coluna e a coluna não estiver na política de coluna, ou a sala limpa não tiver políticas de coluna, a consulta será bloqueada.
O código a seguir mostra como definir políticas de coluna para três colunas quando acessadas pelo modelo prod_overlap_analysis. O exemplo a seguir mostra como definir a política como provedor e consumidor. Lembre-se de que as políticas são aplicadas apenas a consultas executadas por outra conta.
-- 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']);
Os procedimentos a seguir são usados para visualizar ou gerenciar políticas de coluna no código:
consumer.set_column_policyconsumer.view_column_policyconsumer.view_provider_column_policyprovider.set_column_policyprovider.view_column_policy
Políticas de ativação¶
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.
Uma coluna pode fazer parte de uma política de ativação, bem como de qualquer outra política.
Implementação de uma política de ativação¶
As políticas de ativação podem ser definidas na UI de clean rooms se o modelo permitir a ativação.
As políticas de ativação são definidas para uma coluna específica em um determinado modelo.
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' ]);
Os procedimentos a seguir são usados para gerenciar as políticas de ativação no código:
consumer.set_activation_policyprovider.set_activation_policy
Políticas de agregação¶
As políticas de agregação exigem que todas as consultas em uma tabela contenham agregações (GROUP BY, COUNT e outras funções), além de especificar um número mínimo de linhas por grupo de resultados, ou o grupo será omitido dos resultados.
As clean rooms não têm sua própria implementação de políticas de agregação; para aplicar restrições de agregação nos dados vinculados, aplique uma política de agregação na tabela de origem ou implemente restrições de agregação em seu modelo.
Alguns modelos fornecidos pelo Snowflake usam os parâmetros threshold e threshold_value definidos para um usuário ou modelo. Esses valores podem ser modificados na UI de clean rooms, ou chamando provider.add_consumers ou provider/consumer.set_privacy. Se definido para um consumidor, você pode acessar esses valores em seu modelo.