Consultar descobertas de proteção de dados sensíveis no BigQuery

Nesta página, você verá exemplos de consultas que podem ser usadas para analisar as descobertas de proteção de dados sensíveis que foram exportadas para o BigQuery.

É possível configurar um job de inspeção ou um acionador de jobs para salvar as descobertas no BigQuery. Isso permite consultar as descobertas para uma análise mais detalhada. Quando as descobertas são exportadas para o BigQuery, os dados são gravados em uma tabela nova ou atual.

Para mais informações sobre todas as ações que a proteção de dados sensíveis pode realizar após a inspeção, consulte o tópico conceitual Ações.

Para mais informações sobre como executar consultas, consulte:

Colunas da tabela do BigQuery

As colunas da tabela de descobertas exportadas são baseadas nos atributos do objeto Finding.

Se você estiver configurando a inspeção de uma tabela do BigQuery, poderá configurar o job ou o gatilho de jobs de modo que as descobertas exportadas contenham os identificadores da linha. Isso permite vincular as descobertas da inspeção às linhas que as contêm.

No job de inspeção ou no acionador de jobs, defina os campos a seguir como os nomes das colunas que identificam exclusivamente cada linha na tabela, ou seja, as colunas que atendem à finalidade de uma chave primária:

  • Se você estiver usando o console do Google Cloud, defina o campo Campos de identificação (separados por vírgula).
  • Se você estiver usando a API DLP, defina a propriedade identifyingFields.

Quando a inspeção for concluída e as descobertas forem exportadas para o BigQuery, cada descoberta conterá os valores correspondentes das colunas especificadas. Esses valores estarão no campo location.content_locations.record_location.record_key.id_values. É possível usar esses valores para vincular a descoberta de volta à linha específica na tabela do BigQuery inspecionada.

Amostras de consultas

Use as consultas de exemplo a seguir para analisar as descobertas. Também é possível usar as consultas em uma ferramenta de visualização, como o Looker Studio. Essas consultas são fornecidas para ajudar você a começar a consultar os dados das descobertas.

Em cada uma das consultas a seguir, substitua o seguinte:

  • PROJECT_ID: o identificador do projeto
  • DATASET: o nome do conjunto de dados do BigQuery
  • TABLE_ID: o ID da tabela.

Selecionar a contagem de cada infoType

Console do Google Cloud

SELECT info_type.name,
COUNT(info_type.name) AS count
FROM `PROJECT_ID.DATASET.TABLE_ID`
GROUP BY info_type.name
ORDER BY count DESC;

Linha de comando

bq query --use_legacy_sql=false ' SELECT info_type.name,
COUNT(info_type.name) AS count
FROM `PROJECT_ID.DATASET.TABLE_ID`
GROUP BY info_type.name ORDER BY count DESC;'

Selecionar a contagem de cada infoType por dia

Console do Google Cloud

SELECT info_type.name, cast(TIMESTAMP_SECONDS(create_time.seconds) as date) as day,
COUNT(locations.container_name) AS count
FROM `PROJECT_ID.DATASET.TABLE_ID`,
UNNEST(location.content_locations) AS locations
GROUP BY info_type.name, day
ORDER BY count DESC;

Linha de comando

bq query --use_legacy_sql=false ' SELECT info_type.name,
cast(TIMESTAMP_SECONDS(create_time.seconds) as date) as day,
COUNT(locations.container_name) AS count FROM `PROJECT_ID.DATASET.TABLE_ID`,
UNNEST(location.content_locations) AS locations
GROUP BY info_type.name, day ORDER BY count DESC;'

Seleciona a contagem de cada infoType em cada contêiner

Console do Google Cloud

SELECT info_type.name, locations.container_name,
COUNT(locations.container_name) AS count
FROM `PROJECT_ID.DATASET.TABLE_ID`,
UNNEST(location.content_locations) AS locations
GROUP BY locations.container_name, info_type.name
ORDER BY count DESC;

Linha de comando

bq query --use_legacy_sql=false ' SELECT info_type.name, locations.container_name,
COUNT(locations.container_name) AS count FROM `PROJECT_ID.DATASET.TABLE_ID`,
UNNEST(location.content_locations) AS locations
GROUP BY locations.container_name,info_type.name ORDER BY count DESC;'

Seleciona os tipos de descoberta encontrados para cada coluna de uma tabela

Essa consulta agrupa todas as descobertas por nome de coluna e se destina a trabalhar em descobertas de um job de inspeção do BigQuery. Essa consulta é útil se você estiver tentando identificar os tipos prováveis para uma determinada coluna. Você pode ajustar as configurações modificando as cláusulas WHERE e HAVING. Por exemplo, se vários resultados de tabela estiverem incluídos na tabela de descobertas, será possível limitá-los a apenas uma execução de job ou a um nome de tabela.

Console do Google Cloud

SELECT
  table_counts.field_name,
  STRING_AGG( CONCAT(" ",table_counts.name," [count: ",CAST(table_counts.count_total AS String),"]")
  ORDER BY
    table_counts.count_total DESC) AS infoTypes
FROM (
  SELECT
    locations.record_location.field_id.name AS field_name,
    info_type.name,
    COUNT(*) AS count_total
  FROM
    `PROJECT_ID.DATASET.TABLE_ID`,
    UNNEST(location.content_locations) AS locations
  WHERE
    (likelihood = 'LIKELY'
      OR likelihood = 'VERY_LIKELY'
      OR likelihood = 'POSSIBLE')
  GROUP BY
    locations.record_location.field_id.name,
    info_type.name
  HAVING
    count_total>200 ) AS table_counts
GROUP BY
  table_counts.field_name
ORDER BY
  table_counts.field_name

A consulta acima pode produzir um resultado como este para uma tabela de amostra, em que a coluna infoTypes informa quantas instâncias de cada infoType foram encontradas para essa coluna.

field_name infoTypes
field1 CUSTOM_USER_US [count: 7004], CUSTOM_USER_EU [count: 2996]
field2 US_VEHICLE_IDENTIFICATION_NUMBER [count: 9597]
field3 EMAIL_ADDRESS [count: 10000]
field4 IP_ADDRESS [count: 10000]
field5 PHONE_NUMBER [count: 7815]
field6 US_SOCIAL_SECURITY_NUMBER [count: 10000]
field7 CREDIT_CARD_NUMBER [count: 10000]