Usar os direitos do proprietário e os direitos restritos do chamador em um aplicativo

Este tópico descreve como configurar um aplicativo para usar os direitos do proprietário e os direitos restritos do chamador.

Sobre os direitos do proprietário e os direitos restritos do chamador em um aplicativo

Em um Snowflake Native App, os executáveis são executados com direitos de proprietário ou com direitos restritos do chamador. No contexto do Snowflake Native App Framework, os seguintes tipos de executáveis são compatíveis:

  • Procedimentos armazenados de propriedade do aplicativo

  • Serviços disponíveis em aplicativos com contêineres

Direitos do proprietário:

Os executáveis que usam os direitos do proprietário são executados com os privilégios concedidos ao proprietário do executável. Por padrão, os executáveis em um aplicativo usam os direitos do proprietário. Em um aplicativo, o proprietário do executável é o próprio aplicativo.

Por exemplo, o comando CREATE PROCEDURE cria um procedimento armazenado que usa os direitos do proprietário por padrão. Os consumidores podem chamar o procedimento armazenado se tiverem recebido acesso por meio das funções do aplicativo. Se o aplicativo tiver os privilégios para executar uma tarefa, o procedimento armazenado poderá executar essa operação.

Para obter informações sobre os direitos do proprietário, consulte Procedimentos armazenados com direitos do chamador e direitos do proprietário.

Direitos do chamador:

Os executáveis que usam os direitos do chamador são executados com os privilégios concedidos ao chamador. No entanto, por motivos de segurança, o Snowflake Native App Framework não oferece suporte a executáveis com direitos do chamador.

Direitos restritos do chamador:

Os direitos restritos do chamador permitem que um executável seja executado com os direitos do chamador, mas restringem os privilégios do chamador com os quais o executável é executado. Com direitos restritos do chamador, um executável pertencente a um aplicativo não pode ser executado com um privilégio específico, a menos que um administrador na conta do consumidor permita isso explicitamente usando o comando GRANT CALLER.

Para abreviar, os executáveis que são executados com direitos restritos do chamador também são conhecidos como RCR executáveis.

Para obter informações gerais sobre os direitos restritos do chamador, consulte Direitos restritos do chamador.

Determinar os requisitos de acesso de um aplicativo

O Snowflake Native App Framework oferece aos provedores flexibilidade na configuração do acesso aos dados e aos executáveis gerenciados pelo aplicativo. A tabela a seguir fornece diretrizes sobre o mecanismo a ser usado, dependendo dos requisitos de acesso do aplicativo:

Acesso necessário

Como obter acesso

Dados ou funções de propriedade do aplicativo

Use os direitos do proprietário por padrão. Os provedores não precisam solicitar acesso do consumidor para criar ou acessar objetos de propriedade do aplicativo.

Tabelas, visualizações ou funções específicas na conta do consumidor

Solicitar referências do consumidor

Tabelas, visualizações, funções e políticas de linha de propriedade de outro usuário ou função.

Use os direitos restritos do chamador, que permitem que o consumidor habilite o acesso a esses objetos.

Amplo acesso a bancos de dados de propriedade do consumidor

Usar concessões de função de banco de dados

Consultas que acessam uma combinação de dados do consumidor e do provedor

Usar referências e direitos do proprietário juntos

Objetos em nível de conta

Forneça scripts personalizados que contenham comandos GRANT para conceder privilégios para objetos específicos.

Adicionar a propriedade restricted_callers_rights ao manifesto

Como provedor, se você incluir um RCR executável em um aplicativo, o Snowflake recomenda que adicione o restricted_callers_rights ao arquivo de manifesto, conforme mostrado no exemplo a seguir:

restricted_callers_rights:
  enabled: true
  description: This app includes stored procedure that uses restricted caller's rights.
Copy

Embora o restricted_callers_rights não seja obrigatório, se ele estiver presente e o enabled estiver definido como true,, a Snowsight incluirá uma seção chamada Restricted caller’s rights na listagem do aplicativo.

Configurar um procedimento ou serviço para usar os direitos restritos do chamador

Para criar um procedimento armazenado que use os direitos restritos do chamador, use a cláusula EXECUTE AS RESTRICTED CALLER, conforme mostrado no exemplo a seguir:

CREATE OR REPLACE PROCEDURE CORE.HELLO()
RETURNS STRING
LANGUAGE SQL
EXECUTE AS RESTRICTED CALLER
AS
BEGIN
  RETURN 'Hello Snowflake!';
END;
Copy

Para obter mais informações, consulte CREATE PROCEDURE.

Usar um serviço de direitos restritos do chamador em um aplicativo

Para obter mais informações sobre como configurar um serviço para usar os direitos restritos do chamador, consulte Conexão ao Snowflake de dentro de um contêiner usando os direitos do chamador.

Em um aplicativo, um serviço Snowpark Container Services pode ser executado com privilégios do aplicativo (direitos do proprietário) ou com os privilégios do chamador do serviço (direitos restritos do chamador). No entanto, a função de proprietário do serviço é o aplicativo em vez da função de usuário do serviço. Ao conceder concessões ao chamador, um consumidor especifica o aplicativo usando a cláusula TO APPLICATION, conforme mostrado no exemplo a seguir:

GRANT CALLER USAGE ON DATABASE consumer_db TO APPLICATION hello_snowflake_app;
Copy

Este exemplo permite que o serviço seja executado com direitos restritos do chamador para usar a função do chamador para acessar o banco de dados consumer_db.

Limitações dos direitos restritos do chamador em um aplicativo

As seguintes limitações se aplicam ao uso de direitos restritos do chamador em um aplicativo.

Limitações gerais dos direitos restritos do chamador

Para obter limitações gerais sobre os direitos restritos do chamador em executáveis, consulte Limitações de um executável com direitos de chamador restritos. As limitações listadas também se aplicam aos aplicativos.

Limitações adicionais para aplicativos

Além das limitações gerais dos direitos restritos do chamador, os aplicativos têm as seguintes limitações:

  • Os direitos do chamador irrestritos não são compatíveis com os executáveis em um aplicativo.

  • Não é possível executar os seguintes comandos:

    • SHOW ROLES

    • SHOW USERS

    • SHOW [CALLER] GRANTS

    • SHOW AVAILABLE LISTINGS

  • Não é possível executar as seguintes funções:

    • ALL_USER_NAMES

    • GET_USERS_FOR_COLLABORATION

    • CURRENT_IP_ADDRESS

    • CURRENT_AVAILABLE_ROLES

    • CURRENT_SECONDARY_ROLES

    • SYSTEM$ALLOWLIST (ou o obsoleto SYSTEM$WHITELIST)

  • Funções de referência persistentes não são compatíveis.

  • Caminhos relativos para objetos em um estágio não são compatíveis.

  • Os RCR executáveis não podem acessar os objetos internos do aplicativo.

  • Os executáveis com direitos de proprietário não podem chamar outros executáveis que usam direitos de chamador irrestritos.

    Embora os executáveis com direitos de proprietário pertencentes ao aplicativo possam invocar RCR executáveis, os RCR executáveis também devem pertencer ao aplicativo. Por exemplo, um procedimento armazenado de um aplicativo com direitos de proprietário não pode chamar um procedimento armazenado de um consumidor com direitos restritos de chamador.

Chamar funções de faturamento a partir de um procedimento de direitos restritos do chamador em um aplicativo

As funções de faturamento, como SYSTEM$CREATE_BILLING_EVENT ou SYSTEM$CREATE_BILLING_EVENTS, não podem ser chamadas a partir de um RCR executável. Para chamar essas funções a partir de um RCR executável em um aplicativo, inclua essas funções em um procedimento de direitos do proprietário e chame o procedimento a partir do procedimento de direitos restritos do chamador.

Proteção da propriedade intelectual e direitos restritos do chamador

Aplicativos que incluem procedimentos armazenados de direitos do proprietário removem informações sobre a implementação interna do aplicativo. Para obter mais informações, consulte Proteção da propriedade intelectual do provedor.

Os procedimentos armazenados com direitos restritos do chamador também remover informações internas sobre o aplicativo. Isso é especialmente verdadeiro para os comandos, visualizações e funções a seguir, em que grande parte das informações é removida:

No entanto, diferentemente dos procedimentos armazenados com direitos do proprietário, os procedimentos que usam direitos restritos do chamador não removem informações do histórico de consultas e dos perfis de consultas.

Desenvolvimento de aplicativos que usam direitos restritos do chamador

Em geral, somente as funções às quais foi concedido o privilégio MANAGE CALLER GRANTS podem conceder concessões de chamador a um executável. No entanto, durante o ciclo de vida de desenvolvimento de um Snowflake Native App, os provedores podem precisar criar e descartar o aplicativo com frequência. O Snowflake Native App Framework fornece um mecanismo para criar concessões de chamador para um aplicativo no modo de desenvolvimento.

Os provedores podem usar uma função sem MANAGE CALLER GRANTS para conceder concessões de chamador a um aplicativo. No entanto, isso requer todos os itens a seguir:

  • O aplicativo deve ser criado no modo de desenvolvimento.

  • A função atual tem a função de proprietário do aplicativo na hierarquia de funções.

  • A função de proprietário do aplicativo tem um superconjunto das concessões do chamador que estão sendo concedidas.

    Nota

    O privilégio ALL CALLER PRIVILEGES é um superconjunto de qualquer conjunto de privilégios do chamador.

O requisito de superconjunto não pode ser atendido por meio de concessões INHERITED CALLER, que normalmente abrangem todos os objetos atuais e futuros de um determinado tipo em um contêiner específico. Para obter mais informações, consulte GRANT CALLER.

Para atender a esse requisito, as concessões do chamador que estão sendo concedidas devem ser explicitamente abrangidas pelas concessões do chamador que são concedidas à função de proprietário do aplicativo.

Permitir que os desenvolvedores de aplicativos concedam direitos de chamador a um aplicativo no modo de desenvolvimento

Para permitir que uma função de proprietário de aplicativo conceda um determinado conjunto de concessões de chamador a um aplicativo no modo de desenvolvimento, um usuário com a função ACCOUNTADMIN ou uma função que tenha recebido o privilégio MANAGE CALLER GRANTS deve primeiro conceder concessões de chamador que abranjam o conjunto de concessões à função de proprietário do aplicativo.

O exemplo a seguir mostra como conceder os privilégios necessários ao chamador nos bancos de dados de uma conta:

GRANT ALL INHERITED CALLER PRIVILEGES
  ON ALL DATABASES IN ACCOUNT
  TO ROLE app_dev_role;
Copy

Esse comando concede todas as concessões de chamador em todos os bancos de dados à função app_dev_role.

Nota

Esse comando concede apenas concessões ao chamador. Ele não permite que o desenvolvedor de aplicativos acesse um objeto que ele ainda não tenha permissão para acessar.

Medidas de segurança adicionais para aplicativos em modo de desenvolvimento

Permitir as funções de proprietário de desenvolvedores de aplicativos sem o privilégio MANAGE CALLER GRANTS simplifica o processo de desenvolvimento de aplicativos, mas também introduz possíveis riscos de segurança. Para minimizar esses riscos, o Snowflake verifica se o proprietário do aplicativo continua a ter as concessões de chamador necessárias para o aplicativo. Se o proprietário do aplicativo perder as concessões necessárias do chamador, o aplicativo também as perderá.