Adição de conteúdo de dados compartilhados a um pacote de aplicativo¶
Este tópico descreve como adicionar conteúdo de dados compartilhados a um pacote de aplicativo.
Sobre o compartilhamento de conteúdo de dados em um pacote de aplicativo¶
O Snowflake Native App Framework permite adicionar conteúdo de dados compartilhados a um pacote de aplicativo. Este conteúdo de dados é compartilhado com os consumidores que usam seu Snowflake Native App. O conteúdo de dados que você compartilha em um pacote de aplicativo é compartilhado em todas as instâncias instaladas do Snowflake Native App.
O conteúdo de dados compartilhados não tem versão, o que significa que todas as versões de seu Snowflake Native App usam os mesmos dados. Isso é diferente da lógica do aplicativo, que tem versão.
Um consumidor não pode acessar o conteúdo compartilhado diretamente. Em vez disso, um provedor cria uma exibição segura no script de configuração de um pacote de aplicativo e concede ao consumidor acesso à exibição segura. Para obter mais detalhes, consulte Permissão para que os consumidores acessem objetos compartilhados.
Objetos de banco de dados que podem ser compartilhados com um pacote de aplicativo¶
O Snowflake Native App Framework permite que os provedores adicionem os seguintes objetos de banco de dados a um pacote de aplicativo:
Esquemas
Tabelas
Exibições
Nota
Ao compartilhar objetos de banco de dados, como tabelas e exibições, você também deve compartilhar o esquema que os contém.
As seguintes restrições se aplicam a tabelas e exibições compartilhadas em um pacote de aplicativo:
As tabelas não podem ter colunas virtuais, incluindo políticas, contendo código Java, Python ou JavaScript.
As definições de exibição ou colunas virtuais associadas a elas, como políticas, não podem conter chamadas para Java, Python ou JavaScript
As tabelas compartilhadas não podem ser tabelas temporárias, voláteis ou transitórias.
Tabelas externas não são suportadas.
Restrições ao compartilhamento de conteúdo de dados que contém políticas¶
Os provedores não podem compartilhar tabelas e exibições que contenham com políticas, incluindo mascaramento, acesso a linhas e outros tipos de políticas. Essa restrição é necessária porque adicionar ou alterar políticas no lado do provedor pode interromper imediatamente as instâncias de um Snowflake Native App em execução.
Além disso, algumas funções comumente referenciadas por políticas, como CURRENT_USER, se comportam de maneira diferente no contexto de um objeto de aplicativo criado em uma conta de consumidor. Embora uma política definida por um provedor possa funcionar corretamente na conta do provedor, ela pode não funcionar quando o consumidor instala um Snowflake Native App.
A Snowflake recomenda que você defina políticas nas exibições de proxy especificadas no script de configuração. A definição de políticas nas exibições de proxy garante que a definição das políticas não possa ser alterada após a instalação de um Snowflake Native App. A definição de políticas em exibições de proxy também garante que, durante as atualizações, o código em execução continue a usar as políticas que foram aplicadas quando a versão foi criada.
Compartilhamento de conteúdo de dados em um pacote de aplicativo¶
Para incluir o conteúdo de dados em um pacote de aplicativo, você deve conceder privilégios no objeto a ser compartilhado com o pacote de aplicativo. Quando você adiciona um objeto a um pacote de aplicativo, por padrão, o objeto é privado para o pacote de aplicativo e não fica visível quando Snowflake Native App é instalado.
Para tornar os objetos visíveis ao Snowflake Native App instalado a partir do pacote de aplicativo, use o comando GRANT … TO SHARE IN APPLICATION PACKAGE como mostrado no exemplo a seguir:
CREATE APPLICATION PACKAGE app_package;
GRANT USAGE ON SCHEMA app_package.shared_schema
TO SHARE IN APPLICATION PACKAGE app_package;
GRANT SELECT ON TABLE app_package.shared_schema.shared_table
TO SHARE IN APPLICATION PACKAGE app_package;
Neste exemplo, o primeiro comando concede o privilégio USAGE no esquema shared_schema
ao pacote do aplicativo, permitindo que ele seja compartilhado com os consumidores. O segundo comando concede o privilégio SELECT na tabela shared_table
dentro de shared_schema
ao pacote de aplicativo, permitindo que os consumidores consultem a tabela.
Depois que um consumidor instala um Snowflake Native App do pacote de aplicativo app_package
, ele pode acessar o shared_schema
e consultar o shared_table
.
Nota
Ao adicionar um objeto compartilhado a um pacote de aplicativo, você também deve compartilhar o esquema que contém o objeto.
Você também pode compartilhar exibições com um aplicativo usando comandos SQL semelhantes.
Cuidado ao revogar privilégios ou descartar objetos compartilhados¶
Tenha cuidado ao revogar privilégios de objetos compartilhados em um pacote de aplicativos ou ao descartar objetos compartilhados. Se uma versão instalada de um Snowflake Native App ainda exigir acesso a esses objetos, o Snowflake Native App poderá ficar instável ou falhar.
Referência a objetos que existem fora do pacote de aplicativo¶
Para compartilhar um objeto de banco de dados que existe fora do pacote de aplicativo, você deve criar uma exibição dentro do pacote de aplicativo para acessar o objeto. Você não pode compartilhar objetos fora do pacote de aplicativo diretamente.
Antes de compartilhar um objeto em outro banco de dados, conceda o privilégio REFERENCE_USAGE nesse banco de dados para um compartilhamento no pacote de aplicativo, conforme mostrado no exemplo a seguir:
GRANT REFERENCE_USAGE ON DATABASE other_db
TO SHARE IN APPLICATION PACKAGE app_pkg;
Depois de conceder o REFERENCE_USAGE no banco de dados externo, você deve criar uma exibição dentro do pacote de aplicativo que faça referência aos objetos compartilhados que foram compartilhados conforme mostrado no exemplo a seguir:
CREATE VIEW app_pkg.shared_schema.shared_view
AS SELECT c1, c2, c3, c4
FROM other_db.other_schema.other_table;
Este comando cria uma exibição no pacote de aplicativo que faz referência a um banco de dados, tabela e esquema fora do pacote de aplicativo.
Após criar a exibição, você deve conceder privilégios no esquema e exibição para o aplicativo conforme o exemplo a seguir:
GRANT USAGE ON SCHEMA app_pkg.shared_schema
TO SHARE IN APPLICATION PACKAGE app_pkg;
GRANT SELECT ON VIEW app_pkg.shared_schema.shared_view
TO SHARE IN APPLICATION PACKAGE app_pkg;
Permissão de acesso a objetos compartilhados em um pacote de aplicativo¶
Os objetos de banco de dados definidos e criados no script de configuração podem ser acessados diretamente por um Snowflake Native App após a instalação. Esses objetos podem incluir funções, procedimentos, novas definições de exibição etc.
Objetos de banco de dados fora do pacote de aplicativo só podem ser acessados por consumidores no Snowflake Native App instalado usando uma exibição segura definida no script de configuração.
O exemplo a seguir mostra como definir uma exibição no script de configuração.
CREATE VIEW IF NOT EXISTS inst_schema.shared_view
AS SELECT c1, c2, c3, c4
FROM shared_schema.shared_view;
Esta exibição acessa o conteúdo no shared_schema.shared_view
que é compartilhado com o pacote de aplicativo como no exemplo da seção anterior.
Nota
Se você tentar definir uma exibição que acesse diretamente o conteúdo de dados compartilhados, como um objeto de banco de dados externo ao pacote de aplicativo, o Snowflake retornará um erro.
Permissão para que os consumidores acessem objetos compartilhados¶
Por padrão, os objetos de banco de dados compartilhados com um pacote de aplicativo não ficam visíveis para o consumidor. Para permitir que os consumidores visualizem e acessem o conteúdo dos dados, o pacote de aplicativo deve criar uma exibição segura e conceder os privilégios apropriados.
Essa abordagem oferece as seguintes vantagens:
A criação da exibição no script de configuração garante que as alterações feitas diretamente nos objetos compartilhados, como novas colunas, não fiquem visíveis para a versão do Snowflake Native App que está sendo instalado pelo script de configuração.
A criação da exibição em um esquema com versão garante que cada versão do Snowflake Native App contenha apenas a definição da exibição para essa versão. Isso é importante para cenários de atualização.
Para expor objetos compartilhados a um consumidor, o script de configuração deve incluir comandos para:
Instalar exibições dentro de um esquema com versão no pacote de aplicativo.
Conceder acesso a essas exibições ao consumidor usando uma função de aplicativo.
O exemplo a seguir descreve como usar funções de aplicativo para conceder acesso a objetos compartilhados no script de configuração do pacote de aplicativo:
CREATE APPLICATION ROLE app_user;
CREATE OR ALTER VERSIONED SCHEMA inst_schema;
GRANT USAGE ON SCHEMA inst_schema
TO APPLICATION ROLE app_user;
CREATE VIEW IF NOT EXISTS inst_schema.shared_view
AS SELECT c1, c2, c3, c4
FROM shared_schema.shared_table;
GRANT SELECT ON VIEW inst_schema.shared_view
TO APPLICATION ROLE app_user;
Revogar e descartar permissões em objetos compartilhados¶
Tenha cuidado ao revogar permissões em objetos compartilhados de um pacote de aplicativo ou ao descartar objetos compartilhados. Se uma versão instalada do Snowflake Native App ainda exigir acesso a esses objetos, o Snowflake Native App poderá ficar instável ou falhar.
Definição de políticas em exibições de proxy¶
Snowflake recomenda que você crie exibições de proxy e defina políticas para protegê-las no script de configuração. A definição de políticas para proteger a exibição do proxy garante que a definição de políticas não possa ser alterada após a instalação do Snowflake Native App. A definição de políticas em exibições de proxy também garante que, durante as atualizações, o código em execução continue a usar as políticas que são aplicadas quando a versão atualizada é criada.