Concessão de acesso a um Snowflake Native App

Este tópico descreve como um consumidor pode permitir que o Snowflake Native App crie e acesse objetos em sua conta. Isto inclui conceder os privilégios solicitados por um aplicativo ou permitir o acesso a objetos existentes usando referências.

Sobre os privilégios e referências solicitados por um aplicativo

Em um Snowflake Native App simples, todos os objetos necessários pelo aplicativo são criados dentro do objeto APPLICATION quando o script de configuração é executado durante a instalação. Todos os objetos exigidos pelo aplicativo são criados e acessados no aplicativo instalado. O consumidor não precisa realizar nenhuma ação em sua conta.

No entanto, alguns aplicativos podem solicitar que o consumidor execute os seguintes tipos de ações em sua conta:

  • Criar um banco de dados ou warehouse.

  • Executar tarefas.

  • Acessar objetos existentes, por exemplo, uma tabela.

Existem dois tipos de acesso que um Snowflake Native App pode solicitar:

  • Privilégios que permitem que o aplicativo execute algumas operações no nível da conta. Um aplicativo pode solicitar os seguintes privilégios globais:

    • EXECUTE TASK

    • EXECUTE MANAGED TASK

    • CREATE WAREHOUSE

    • MANAGE WAREHOUSES

    • CREATE DATABASE

    Alguns aplicativos também podem solicitar o privilégio IMPORTED PRIVILEGES no banco de dados SNOWFLAKE. Consulte Concessão do privilégio IMPORTED PRIVILEGES no banco de dados SNOWFLAKE para obter detalhes.

  • Referências que permitem que o aplicativo acesse objetos que já existem na conta do consumidor e estão fora do objeto APPLICATION. Um provedor define as referências exigidas pelo aplicativo no arquivo manifest.yml.

    Após instalar o aplicativo, o consumidor pode autorizar o acesso a um objeto criando uma referência que associa o objeto ao aplicativo.

    Um aplicativo pode solicitar acesso aos seguintes tipos de objetos e seus privilégios correspondentes:

    Tipo de objeto

    Privilégios permitidos

    TABLE

    SELECT, INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES

    VIEW

    SELECT, REFERENCES

    EXTERNAL TABLE

    SELECT, REFERENCES

    FUNCTION

    USAGE

    PROCEDURE

    USAGE

    WAREHOUSE

    MODIFY, MONITOR, USAGE, OPERATE

    API INTEGRATION

    USAGE

Um consumidor pode aprovar essas solicitações usando Snowsight ou executando os comandos SQL conforme descrito nas seções a seguir.

Nota

Se você não conceder os privilégios solicitados ou não associar referências no objeto solicitado ao aplicativo, partes do aplicativo poderão não funcionar corretamente.

Gerenciamento de solicitações de acesso usando o Snowsight

Se um provedor implementar uma interface de usuário em um Snowflake Native App, um consumidor poderá realizar o seguinte usando Snowsight.

  • Visualize e conceda privilégios globais.

  • Autorize o acesso a objetos existentes na conta do consumidor.

Concessão de privilégios globais

Para conceder privilégios ou criar referências após a instalação de um aplicativo, faça o seguinte:

  1. Entre em Snowsight.

  2. No menu de navegação, selecione Data Products » Apps.

  3. Selecione o aplicativo.

  4. Selecione o ícone Security na barra de ferramentas.

    As permissões de nível de conta solicitadas pelo aplicativo aparecem em Account level privileges

  5. Na seção Account-level privileges, selecione Review e, em seguida, alterne o controle deslizante para cada privilégio que deseja conceder.

  6. Selecione Save.

Autorização de acesso a objetos específicos

Se um provedor implementar uma interface de usuário para um Snowflake Native App, um consumidor poderá usar Snowsight para autorizar o acesso a objetos em sua conta.

Para autorizar o acesso a objetos específicos:

  1. Entre em Snowsight.

  2. No menu de navegação, selecione Data Products » Apps.

  3. Selecione o aplicativo.

  4. Selecione o ícone Security na barra de ferramentas.

  5. Na seção Privileges to objects, selecione Add ao lado do objeto para o qual você deseja autorizar o acesso.

  6. Selecione Select Data e escolha o produto de dados ao qual deseja autorizar acesso.

  7. Selecione Done.

Como revogar privilégios e acesso a objetos

Para revogar privilégios ou remover acesso a objetos, faça o seguinte:

  1. Entre em Snowsight.

  2. No menu de navegação, selecione Data Products » Apps.

  3. Selecione o aplicativo.

  4. Selecione o ícone Security na barra de ferramentas.

    • Para revogar um privilégio global, selecione o botão Edit e, em seguida, alterne o controle deslizante para o privilégio que deseja revogar.

    • Para revogar o acesso de um objeto específico, selecione o botão Delete e, em seguida, selecione Revoke Privilege.

Nota

Revogar privilégios ou remover o acesso de objetos pode tornar o aplicativo instável ou parar de funcionar.

Gerenciamento de privilégios para um aplicativo usando comandos SQL

Se o desenvolvedor do aplicativo não implementar uma interface para conceder privilégios, você deverá gerenciar as solicitações de acesso do aplicativo usando comandos SQL.

Visualização dos privilégios solicitados por um aplicativo

Quando um provedor especifica os privilégios exigidos pelo aplicativo, a solicitação de privilégio é incluída como parte do aplicativo instalado. Você pode visualizar esses privilégios após instalar o aplicativo.

Para visualizar os privilégios exigidos por um aplicativo, execute o comando SHOW PRIVILEGES como mostrado no exemplo a seguir:

SHOW PRIVILEGES IN APPLICATION hello_snowflake_app;
Copy

Concessão de privilégios para um Snowflake Native App

Depois que um consumidor determina os privilégios solicitados por um aplicativo, ele pode conceder esses privilégios ao aplicativo.

Por exemplo, para conceder o privilégio EXECUTE TASK para um aplicativo, execute o comando GRANT PRIVILEGE como mostrado no exemplo a seguir:

GRANT EXECUTE TASK ON ACCOUNT TO APPLICATION hello_snowflake_app;
Copy

Concessão do privilégio MANAGE WAREHOUSES a um Snowflake Native App

O privilégio MANAGE WAREHOUSES permite que um aplicativo crie, modifique e use warehouses dentro da conta de consumidor. Para conceder o privilégio MANAGE WAREHOUSES a um aplicativo, use GRANT conforme mostrado no exemplo a seguir:

GRANT MANAGE WAREHOUSES ON ACCOUNT TO APPLICATION hello_snowflake_app;
Copy

Concessão do privilégio IMPORTED PRIVILEGES no banco de dados SNOWFLAKE

Alguns aplicativos podem solicitar que um consumidor conceda o privilégio IMPORTED PRIVILEGES no banco de dados SNOWFLAKE de sua conta. Este privilégio só pode ser concedido usando comandos SQL. Não pode ser concedido usando Snowsight. Se um aplicativo exigir esse privilégio, o provedor deverá comunicar essa exigência ao consumidor, por exemplo, no arquivo README do aplicativo.

Para conceder o privilégio IMPORT no banco de dados SNOWFLAKE, execute o seguinte comando:

GRANT IMPORTED PRIVILEGES ON DATABASE SNOWFLAKE TO APPLICATION hello_snowflake_app;
Copy

Nota

O privilégio IMPORTED PRIVILEGES permite que o aplicativo acesse informações sobre uso e custos associados à conta do consumidor. O consumidor deve garantir que deseja compartilhar essas informações com o aplicativo antes de conceder esse privilégio.

Autorização manual do acesso a objetos

Quando um provedor define uma referência a um objeto no arquivo manifest.yml, essa definição de referência é incluída como parte do aplicativo instalado. Um consumidor pode criar uma referência a um objeto em sua conta para autorizar o aplicativo a acessar o objeto. Se o provedor não criou uma interface de usuário para permitir o acesso aos objetos na conta do consumidor, o consumidor poderá autorizar o acesso manualmente.

O consumidor pode criar uma referência para um objeto associar ao aplicativo se tiver os privilégios solicitados no objeto. Por exemplo, se os privilégios SELECT e INSERT forem necessários para um objeto, por exemplo uma tabela, o consumidor deverá criar a referência usando uma função que tenha os privilégios SELECT e INSERT na tabela. Para visualizar os tipos de objetos e as concessões de privilégio específicas necessárias para cada objeto, consulte Visualização das referências solicitadas por um aplicativo.

Nota

Uma referência não concede nenhum privilégio ao objeto. Se a função usada para criar a referência perder privilégios no objeto, a referência não será mais válida. O consumidor deve fazer uma das seguintes opções:

  • Restaure os privilégios necessários para a função que criou a referência.

  • Recrie a referência usando uma função com os privilégios necessários no objeto.

Visualização das referências solicitadas por um aplicativo

Um consumidor pode visualizar as referências solicitadas por um aplicativo executando o comando SHOW REFERENCES conforme mostrado no exemplo a seguir:

SHOW REFERENCES IN APPLICATION hello_snowflake_app;
Copy

Este comando exibe uma lista de todas as referências definidas no aplicativo. Também exibe os privilégios que a função de consumidor deve ter no objeto para criar a referência.

Criação da referência e associação da referência ao aplicativo

Depois de visualizar as referências solicitadas pelo aplicativo, um consumidor pode criar a referência executando a função do sistema SYSTEM$REFERENCE conforme mostrado no exemplo a seguir:

SELECT SYSTEM$REFERENCE('table', 'db1.schema1.table1', 'persistent', 'select', 'insert');
Copy

Este comando cria a referência e retorna um identificador para o objeto. O identificador é semelhante ao exemplo a seguir:

ENT_REF_TABLE_16617302895522_2CDD20F5C047A5B87B2CE36F6837715786AF9F2D

O consumidor passa esse identificador para um procedimento armazenado de retorno de chamada para associar a referência ao aplicativo.

Nota

O consumidor deve executar este comando para cada referência solicitada pelo aplicativo.

Para associar uma referência a um aplicativo, o consumidor deve passar o identificador retornado chamando a função de sistema SYSTEM$REFERENCE para um procedimento armazenado de retorno de chamada. Um procedimento de retorno de chamada é um procedimento armazenado que o provedor cria no Snowflake Native App para associar uma referência ao aplicativo.

Para usar um procedimento de retorno de chamada, execute o seguinte comando:

CALL app.config.register_single_reference(
  'consumer_table', 'ADD', 'ENT_REF_TABLE_16617302895522_2CDD20F5C047A5B87B2CE36F6837715786AF9F2D');
Copy

Neste exemplo, o procedimento armazenado register_single_reference() associa a referência ao identificador ENT_REF_TABLE_16617302895522_2CDD20F5C047A5B87B2CE36F6837715786AF9F2D do aplicativo.

Nota

Um provedor pode incluir diferentes procedimentos de retorno de chamada em um aplicativo. Eles devem ser especificados no arquivo README do aplicativo.

Criação e associação da referência ao aplicativo em uma única etapa

Depois de visualizar as referências solicitadas pelo aplicativo, um consumidor pode criar a referência e associá-la ao aplicativo, passando a função do sistema SYSTEM$REFERENCE como argumento para um procedimento armazenado de retorno de chamada.

O exemplo a seguir mostra a sintaxe para passar a função do sistema SYSTEM$REFERENCE como argumento para um procedimento armazenado de retorno de chamada:

CALL app.config.register_single_reference(
 'consumer_table', 'ADD', SYSTEM$REFERENCE('table', 'db1.schema1.table1',
 'PERSISTENT', 'SELECT', 'INSERT'));
Copy

Este exemplo cria a referência e passa o identificador para a função de retorno de chamada para associar a referência ao aplicativo.