Implementação de privacidade ao nível de entidade com políticas de agregação

A privacidade ao nível de entidade fortalece as proteções de privacidade fornecidas pelas políticas de agregação. Com privacidade ao nível de entidade, o Snowflake pode garantir que um grupo de agregação contenha um certo número de entidades, em vez de apenas um certo número de linhas.

A maioria das tarefas e considerações relacionadas às políticas de agregação são as mesmas, independentemente de você estar implementando privacidade ao nível de entidade. Para obter informações gerais sobre como trabalhar com políticas de agregação, consulte Políticas de agregação.

Sobre a privacidade ao nível de entidade

Uma entidade se refere a um conjunto de atributos que pertencem a um objeto lógico (por exemplo, um perfil de usuário ou informações familiares). Esses atributos podem ser usados para identificar uma entidade em um conjunto de dados. A privacidade ao nível de entidade é um recurso das tecnologias de aprimoramento de privacidade (PET) que protege a privacidade de uma entidade armazenada em um conjunto de dados compartilhado. Ela garante que as consultas não possam expor atributos confidenciais de uma entidade, mesmo que esses atributos sejam encontrados em vários registros.

Para atingir a privacidade ao nível de entidade, o Snowflake permite que você especifique quais atributos podem ser usados para identificar uma entidade (uma chave de entidade). Isso permite que o Snowflake identifique todos os registros que pertencem a uma entidade específica dentro de um conjunto de dados. Por exemplo, se a chave da entidade for definida como a coluna email, então o Snowflake pode determinar que todos os registros com email=joe.smith@example.com pertencem à mesma entidade.

Políticas de agregação sem privacidade ao nível de entidade

Por padrão, as políticas de agregação exigem que os analistas executem consultas que agregam dados em vez de recuperar linhas individuais, alcançando assim privacidade ao nível de linha. No entanto, a privacidade ao nível de linha não impede que uma consulta exponha os atributos de uma entidade quando esses atributos são encontrados em várias linhas (por exemplo, em uma tabela contendo dados transacionais).

Por exemplo, suponha que um serviço de streaming, ActonViz, tem uma tabela transacional com o endereço de e-mail (user_id) e doméstico (household_id) de cada visualizador enquanto eles assistem aos programas.

user_id

household_id

program_id

watch_time

start_time

dave_sr@company.com

12345

1

29

2023-09-12 09:00

mary@bazco.com

23485

1

30

2023-09-12 09:00

dave_sr@company.com

12345

6

18

2023-09-11 13:00

joe@jupiterlink.com

85456

6

25

2023-09-15 22:00

junior@example.com

12345

5

30

2023-09-13 11:00

ActonViz pode usar uma política de agregação para forçar os anunciantes a agregar dados em grupos com pelo menos 2 registros. Isso impede que os anunciantes recuperem os dados de um registro individual (privacidade ao nível de linha). Se cada visualizador e residência aparecesse apenas uma vez na tabela, isso seria suficiente para proteger sua privacidade.

No entanto, a consulta de um anunciante ainda pode obter informações sobre os visualizadores e suas famílias. Uma consulta pode criar um grupo que consiste inteiramente em registros de residências 12345 ou, pior ainda, um grupo que consistia inteiramente de registros para o visualizador dave_sr. Em ambos os casos, o número de registros no grupo atenderia aos requisitos definidos por ActonViz (mínimo de 2 registros por grupo).

Políticas de agregação com privacidade ao nível de entidade

Para obter privacidade ao nível de entidade, o Snowflake permite que você especifique uma chave de entidade ao atribuir uma política de agregação a uma tabela ou exibição. Depois que a chave da entidade for definida, os grupos retornados por uma consulta em uma tabela ou exibição com restrição de agregação devem conter o número especificado de entidades, em vez de apenas um número especificado de linhas.

No exemplo anterior, suponha que ActonViz defina household_id como a chave da entidade porque identifica exclusivamente cada residência. A privacidade de cada residência agora é preservada. Antes da mudança, um grupo poderia consistir inteiramente de registros com household_id = 12345, mas agora deve conter pelo menos dois valores distintos para household_id.

Observe que a chave da entidade nem sempre é a mesma que a chave primária de uma tabela. Neste exemplo, a tabela pode usar user_id como a chave primária porque identifica exclusivamente um visualizador. Mas neste caso, ActonViz quer proteger a privacidade de uma família inteira, que consiste em vários visualizadores, e, portanto, household_id foi escolhida como a chave da entidade.

Sobre os tamanhos mínimos de grupo

Cada política de agregação especifica um tamanho mínimo de grupo. Sem privacidade ao nível de entidade, o tamanho mínimo do grupo define o número de registros que devem ser inclusos em um grupo de agregação. Quando uma chave de entidade é especificada, o tamanho mínimo do grupo define quantas entidades devem ser inclusas em um grupo de agregação.

As seguintes políticas ao nível de coluna não afetam como o Snowflake calcula se há entidades suficientes em um grupo de agregação:

  • Políticas de projeção não têm efeito.

  • Políticas de mascaramento não têm efeito. Quando uma política de mascaramento é atribuída à coluna GROUP BY, os grupos de agregação formados pela consulta são baseados nos valores retornados pela política de mascaramento. Cada um desses grupos deve ter entidades suficientes.

Nos casos em que as referências de nome forem usadas várias vezes (por exemplo, em operadores JOIN ou UNION), o Snowflake impõe o tamanho mínimo de grupo para cada referência de nome de cada conjunto de dados separadamente. Isso se aplica mesmo quando a referência aponta para o mesmo conjunto de dados várias vezes.

Aplicação de privacidade ao nível de entidade com as políticas de agregação

Para impor privacidade ao nível de entidade com políticas de agregação, faça o seguinte:

  1. Ao executar o comando CREATE AGGREGATION POLICY para criar a política de agregação, especifique o número de entidades que devem ser inclusas em cada grupo de agregação.

  2. Defina a chave da entidade ao atribuir a política de agregação a uma tabela ou exibição.

Especifique o número mínimo de entidades

A sintaxe para criar uma política de agregação com CREATE AGGREGATION POLICY não muda se você estiver usando uma chave de entidade para obter privacidade ao nível de entidade. Você ainda usa o argumento MIN_GROUP_SIZE da função AGGREGATION_CONSTRAINT para especificar um tamanho mínimo de grupo. Assim que você definir uma chave de entidade, o tamanho mínimo do grupo muda de um requisito sobre o número de registros em um grupo para o número de entidades em um grupo.

Por exemplo, o código a seguir cria uma política de agregação com um tamanho mínimo de grupo de 5. Se você definir uma chave de entidade ao atribuir a política a uma tabela, cada grupo de agregação deve conter pelo menos 5 entidades.

CREATE AGGREGATION POLICY my_agg_policy
  AS () RETURNS AGGREGATION_CONSTRAINT ->
  AGGREGATION_CONSTRAINT(MIN_GROUP_SIZE => 5);
Copy

Para obter detalhes completos sobre a criação de políticas de agregação, incluindo um exemplo de uma política de agregação condicional que impõe diferentes restrições em diferentes circunstâncias, consulte Criação de uma política de agregação.

Definição de uma chave de entidade

Você define uma chave de entidade para uma tabela quando atribui a política de agregação à tabela ou exibição. Você pode definir a chave da entidade ao criar uma nova tabela ou exibição, ou ao atualizar uma tabela de exibição existente.

Defina uma chave de entidade para tabelas e exibições existentes

Ao executar o comando ALTER TABLE … SET AGGREGATION POLICY ou ALTER VIEW. … SET AGGREGATION POLICY para atribuir a política de agregação, use a cláusula ENTITY KEY para especificar quais colunas na tabela ou exibição contêm os atributos de identificação de uma entidade (ou seja, a chave da entidade).

Por exemplo, para criar uma chave de entidade ao atribuir uma política de agregação my_agg_policy a uma tabela viewership_log, execute:

ALTER TABLE viewership_log
  SET AGGREGATION POLICY my_agg_policy
  ENTITY KEY (first_name,last_name);
Copy

Como as colunas first_name e last_name são a chave de entidade, a política de agregação pode determinar que todas as linhas com first_name = joe e last_name = peterbilt pertencem à mesma entidade.

Especificação de uma chave de entidade para novas tabelas e exibições

Ao executar o comando CREATE TABLE … WITH AGGREGATION POLICY ou CREATE VIEW … WITH AGGREGATION POLICY para atribuir a política de agregação, use a cláusula ENTITY KEY para especificar quais colunas na tabela ou exibição contêm os atributos de identificação de uma entidade.

Por exemplo, para criar uma nova tabela t1 ao atribuir uma política de agregação e definir uma chave de entidade, execute:

CREATE TABLE t1
  WITH AGGREGATION POLICY my_agg_policy
  ENTITY KEY (first_name,last_name);
Copy

Como as colunas first_name e last_name são a chave de entidade, a política de agregação pode determinar que todas as linhas com first_name = joe e last_name = peterbilt pertencem à mesma entidade.

Consulta de uma tabela com restrição de agregação

Os requisitos para consultar uma tabela com restrição de agregação com uma chave de entidade são os mesmos para consultar uma tabela sem essa chave. Para obter mais informações sobre quais tipos de consultas estão em conformidade com esses requisitos, consulte Requisitos de consulta.