Solicitação de compartilhamento de dados com especificações do app

Este tópico descreve como configurar as especificações de um Snowflake Native App para solicitar permissão para compartilhar dados com provedores ou terceiros por meio de listagens. Isso permite casos de uso como relatórios de conformidade, compartilhamento de telemetria e pré-processamento de dados.

Compartilhamento de dados de um app com provedores ou terceiros

Alguns Snowflake Native Apps precisam compartilhar dados com o provedor ou com contas Snowflake de terceiros para diversos fins comerciais. Os casos de uso comuns incluem:

  • Relatórios de conformidade: compartilhamento de logs de auditoria ou dados de conformidade com contas regulatórias

  • Telemetria e análise: envio de métricas de uso de volta ao provedor para melhoria do produto

  • Pré-processamento de dados: compartilhamento de dados transformados com contas de parceiros

  • Suporte e solução de problemas: envio de dados de diagnóstico às equipes de suporte

Para habilitar o compartilhamento de dados de um app, o app precisa incluir compartilhamentos e listagens. Um compartilhamento contém os objetos de banco de dados que serão compartilhados, e uma listagem oferece o mecanismo para compartilhar dados entre contas e regiões.

Para obter mais informações sobre compartilhamento de dados, consulte Sobre o Secure Data Sharing.

Para configurar um app para compartilhar dados usando listagens, siga estas etapas:

  1. Use a concessão automatizada de privilégios para solicitar privilégios do consumidor para criar compartilhamentos e listagens.

  2. Crie um compartilhamento e conceda objetos de banco de dados a ele.

  3. Crie uma listagem externa anexada ao compartilhamento.

  4. Para solicitar permissão do consumidor para compartilhar dados com contas de destino específicas, use as especificações do aplicativo.

Nota

Ao contrário dos outros tipos de especificação de app, cada especificação LISTING está associada a exatamente um objeto de listagem. Um app não pode criar várias especificações de app para a mesma listagem.

Fluxo de trabalho de especificação do app para compartilhamento de dados

A configuração de um app para compartilhar dados usando listagens segue este fluxo de trabalho geral:

  1. Os provedores configuram a concessão automatizada de privilégios para o aplicativo. Isso permite que os consumidores concedam permissão a um app para criar compartilhamentos e listagens.

    Nota

    As especificações de app exigem que manifest_version = 2 seja definido no arquivo de manifesto.

  2. Os provedores adicionam os privilégios CREATE SHARE e CREATE LISTING ao arquivo de manifesto.

  3. Os provedores adicionam instruções SQL ao script de configuração para criar os seguintes objetos, conforme necessário:

    O script de configuração cria o compartilhamento e a listagem quando o app é instalado ou atualizado. A especificação do app pode ser criada durante a configuração ou em tempo de execução por meio de um procedimento armazenado.

  4. Ao configurar o app, os consumidores revisam e aprovam as contas de destino e as configurações de preenchimento automático na listagem. As configurações de preenchimento automático são aplicáveis apenas ao compartilhamento entre regiões. Para mais informações sobre como os consumidores visualizam e aprovam especificações de aplicativos, consulte Aprovar conexões com recursos externos usando especificações de aplicativo.

Definição da especificação do app para compartilhamento de dados

Para uma especificação de app do tipo LISTING, sua definição contém as seguintes entradas:

  • TARGET_ACCOUNTS: uma lista separada por vírgulas de contas de destino com as quais compartilhar dados, entre aspas simples. Cada conta deve ser especificada no formato. ; por exemplo: 'ProviderOrg.ProviderAccount,PartnerOrg.PartnerAccount'.

  • LISTING: o identificador do objeto de listagem criado pelo app.

  • AUTO_FULFILLMENT_REFRESH_SCHEDULE: Opcional. O cronograma de atualização para compartilhamento de dados entre regiões. Pode ser especificado como <num> MINUTE ou USING CRON <expression>.

Nota

O nome da listagem na especificação do app deve corresponder a uma listagem existente criada pelo app. Depois que isso for definido, o nome da listagem não poderá ser alterado.

Definição da versão do arquivo de manifesto

Para habilitar a concessão automatizada de privilégios para um app, defina a versão no início do arquivo de manifesto, conforme mostrado no exemplo a seguir:

manifest_version: 2
Copy

Adição dos privilégios CREATE SHARE e CREATE LISTING ao arquivo de manifesto

Os privilégios CREATE SHARE e CREATE LISTING permitem que o app crie compartilhamentos e listagens durante a instalação ou atualização.

  1. Para configurar um app para solicitar esses privilégios, adicione o seguinte código à seção privileges do arquivo de manifesto:

    manifest_version: 2
    ...
    privileges:
      - CREATE SHARE:
          description: "Create a share for sharing compliance data with provider"
      - CREATE LISTING:
          description: "Create a listing for cross-region sharing of compliance data"
    ...
    
    Copy

Se você especificar manifest_version como 2 no arquivo de manifesto, o Snowflake vai conceder automaticamente os privilégios CREATE SHARE e CREATE LISTING ao app durante a instalação ou atualização.

Criação de compartilhamento e concessão de objetos a ele

  1. Para criar um compartilhamento de dados, adicione o comando CREATE SHARE ao script de configuração, conforme mostrado no seguinte exemplo:

CREATE SHARE compliance_share;
Copy
  1. Conceda os objetos de banco de dados que você deseja compartilhar, conforme mostrado no seguinte exemplo:

-- Grant usage on a table in the app's database:
GRANT USAGE ON TABLE app_schema.compliance_data TO SHARE compliance_share;

-- If sharing from a database created by the app, do the following:
GRANT USAGE ON DATABASE app_created_db TO SHARE compliance_share;
GRANT USAGE ON SCHEMA app_created_db.reporting TO SHARE compliance_share;
GRANT SELECT ON TABLE app_created_db.reporting.metrics TO SHARE compliance_share;
Copy

Nota

Os apps só podem compartilhar dados das seguintes fontes:

  • Bancos de dados criados pelo app: O app deve ser proprietário desses bancos de dados.

Os apps não podem adicionar contas de destino diretamente ao compartilhamento. Isso é controlado pela especificação do app.

Criação de listagem externa

  1. Para criar uma listagem externa anexada ao compartilhamento, adicione o comando CREATE LISTING ao script de configuração, como mostrado no seguinte exemplo:

    CREATE EXTERNAL LISTING compliance_listing
    SHARE compliance_share
      AS
      $$
        title: "Compliance Data Share"
        subtitle: "Regulatory compliance reporting data"
        description: "Share compliance and audit data with authorized accounts"
          listing_terms:
          type: "OFFLINE"
      $$
      PUBLISH = FALSE
      REVIEW = FALSE;
    
    Copy

Nota

  • Os apps só podem anexar compartilhamentos, e não pacotes de aplicativo, a uma listagem.

  • Os apps não podem adicionar diretamente contas de destino ou configurações de preenchimento automático à listagem.

  • O manifesto de listagem só pode incluir as seguintes propriedades: título, subtítulo, descrição e listing_terms.

  • Todas as novas listagens devem ser criadas em um estado não publicado, com PUBLISH e REVIEW definidos como FALSE.

  • O título e a descrição da listagem podem ser personalizados com base nas informações do consumidor, permitindo que os provedores distinguem as fontes de dados.

Criação de especificação do app para uma listagem

  1. Para criar a especificação do app para uma listagem, siga este exemplo:

ALTER APPLICATION SET SPECIFICATION shareback_spec
  TYPE = LISTING
  LABEL = 'Compliance Data Sharing'
  DESCRIPTION = 'Share compliance data with provider for regulatory reporting'
  TARGET_ACCOUNTS = 'ProviderOrg.ProviderAccount,AuditorOrg.AuditorAccount'
  LISTING = compliance_listing
  AUTO_FULFILLMENT_REFRESH_SCHEDULE = '720 MINUTE';
Copy

Este comando cria a especificação do app chamada shareback_spec que solicita permissão para compartilhar dados com as contas de destino especificadas.

  1. Para compartilhamento entre regiões, o parâmetro AUTO_FULFILLMENT_REFRESH_SCHEDULE é obrigatório. Você pode defini-lo como um dos seguintes valores:

    • '<num> MINUTE': número de minutos, com um mínimo de 10

    • e um máximo de 11.520 minutos ou oito dias

    • 'USING CRON <expression> <time_zone>': Expressão cron com fuso horário

Nota

  • O app só deve criar a especificação do app depois que os objetos de listagem e compartilhamento existirem.

  • Cada listagem só pode ter uma especificação do app associada.

  • A atualização das contas de destino cria uma nova solicitação pendente de aprovação do consumidor.

Validação da configuração da listagem

Os apps podem validar se a listagem foi devidamente configurada após a aprovação executando os seguintes comandos:

-- Check if the app specification is approved:
SHOW APPROVED SPECIFICATIONS IN APPLICATION;

-- Validate the listing configuration:
DESC LISTING compliance_listing;
Copy

Fluxo de trabalho de aprovação do consumidor

A aprovação do consumidor de uma especificação do app LISTING aciona este fluxo de trabalho:

  • O Snowflake adiciona automaticamente as contas de destino à listagem.

  • Se especificado, o Snowflake configura o cronograma de atualização de preenchimento automático.

  • A listagem fica visível para as contas de destino.

  • Os dados anexados à listagem podem ser consultados pelas contas aprovadas.

A rejeição do consumidor de uma especificação do app LISTING aciona este fluxo de trabalho:

  • A listagem se torna não publicada, e as contas de destino existentes são removidas da listagem.

  • O preenchimento automático é desabilitado.

  • A listagem não fica mais visível para nenhuma conta de destino.

Práticas recomendadas para especificações de app LISTING

Ao implementar o compartilhamento de dados por meio da especificação do app, considere as seguintes práticas recomendadas:

  • Integridade do compartilhamento: o Snowflake não impede que os consumidores modifiquem os compartilhamentos criados por um aplicativo. Como resultado, o provedor é responsável pela implementação de medidas para proteger a integridade dos dados compartilhados subjacentes.

  • Tratamento de erros: implemente o tratamento de erros adequado para casos em que a especificação do app tenha sido recusada ou ainda não tenha sido aprovada.

  • Considerações entre regiões: o provedor do app é responsável por definir cronogramas de atualização que conciliem os requisitos de atualização de dados às considerações de custo. Os custos do preenchimento automático de listagem são cobrados do consumidor do app, mas a escolha do cronograma do provedor deve levar em conta os custos para minimizar gastos desnecessário para o consumidor do app.

  • Conformidade: documente claramente os dados que você está compartilhando e o motivo na descrição da especificação do app.

Uso de funções de retorno de chamada com especificações de app LISTING

Os apps podem usar retornos de chamada de ciclo de vida para responder quando os consumidores aprovam ou recusam especificações de listagem, adicionando o seguinte código ao arquivo de manifesto:

lifecycle_callbacks:
  specification_action: callbacks.on_spec_update
Copy

No script de configuração, adicione o seguinte procedimento armazenado de retorno de chamada:

CREATE OR REPLACE PROCEDURE callbacks.on_spec_update (
  name STRING,
  status STRING,
  payload STRING)
RETURNS STRING
LANGUAGE SQL
AS
$$
BEGIN
  IF (name = 'shareback_spec' AND status = 'APPROVED') THEN
    -- Start populating shared tables
    CALL populate_compliance_data();
  ELSEIF (name = 'shareback_spec' AND status = 'DECLINED') THEN
    -- Clean up or notify provider
    CALL cleanup_share_data();
  END IF;
  RETURN 'Processed specification update';
END;
$$;
Copy

O procedimento permite que o app reaja adequadamente às decisões do consumidor em relação à solicitação de compartilhamento de dados do app.

Limitações

Esta seção descreve as limitações ao usar especificações de app.

Auditoria

O Snowflake não oferece auditoria interna para dados que um app compartilha de volta com o provedor. Se um consumidor tiver requisitos de conformidade ou regulatórios que incluam uma trilha de auditoria, ele deverá se alinhar diretamente com o provedor para implementar soluções de monitoramento próprias separadas.

Compartilhamento de dentro do aplicativo

O Snowflake não recomenda o compartilhamento de dados com o provedor diretamente de dentro do aplicativo porque o preenchimento automático de listagem não é compatível com dados compartilhados dessa maneira.