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¶
No contexto de um aplicativo, há suporte para os seguintes tipos de executáveis:
Procedimentos armazenados de propriedade do aplicativo
Serviços disponíveis em aplicativos com contêineres
Cada um desses tipos de executáveis pode ser configurado para usar direitos do proprietário ou direitos restritos do autor da chamada.
- Direitos do proprietário:
Por padrão, os executáveis dentro de um aplicativo usam direitos de proprietário, o que significa que eles são executados com os privilégios concedidos ao proprietário do executável, que é o próprio aplicativo.
Por exemplo, os direitos do proprietário permitem que um executável acesse dados na conta do provedor e apresente esses dados ao consumidor. No entanto, eles não permitem que o consumidor acesse os dados diretamente.
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 o acesso tiver sido concedido usando as funções de aplicativo. Se o aplicativo tiver privilégios para executar uma operação, o procedimento armazenado poderá executá-la.
Para obter informações gerais sobre os direitos do proprietário, consulte Procedimentos armazenados com direitos do chamador e direitos do proprietário.
- 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.
Nota
Para garantir que os executáveis de um aplicativo sejam seguros, Snowflake Native Apps não oferecem suporte aos direitos irrestritos do autor da chamada.
Para obter informações gerais sobre os direitos restritos do chamador, consulte Direitos restritos do chamador.
Escopo dos direitos restritos do autor da chamada em um aplicativo¶
A Snowflake recomenda que os consumidores concedam concessões de autor da chamada no nível de contêiner e não em objetos específicos da conta.
- Nível de esquema:
Concede direitos de autor da chamada ao esquema, mas não concede nenhum direito a objetos do esquema. Por exemplo, a concessão CALLER USAGE do autor da chamada em um esquema concede apenas o privilégio USAGE para o esquema. Para conceder acesso a um objeto específico, por exemplo, uma função, use GRANT INHERITED CALLER USAGE ON ALL FUNCTIONS IN SCHEMA.
- Nível de banco de dados:
As concessões de autor da chamada no nível de banco de dados permite apenas que um executável acesse o banco de dados e todos os esquemas correspondentes. Por exemplo, a concessão CALLER USAGE do autor da chamada concede o privilégio USAGE para o banco de dados. No entanto, para conceder acesso a um objeto específico, você deve usar o seguinte comando:
GRANT INHERITED CALLER USAGE ON ALL FUNCTIONS IN DATABASE;
- Nível de conta:
As concessões de autor da chamada no nível da conta permitem que um executável realize operações nesse nível. A concessão CALLER USAGE do autor da chamada permite apenas que o executável acesse a conta, mas não fornece acesso a objetos dentro dela.
Para permitir o acesso a objetos específicos, é necessário conceder acesso aos tipos específicos de objeto correspondentes na conta. Por exemplo, a concessão CREATE DATABASE de autor da chamada permite que um executável crie bancos de dados na conta do consumidor, conforme mostrado no exemplo a seguir:
GRANT CALLER CREATE DATABASE ON ACCOUNT TO my_app;
Concessões de autor da chamada no nível da conta para um aplicativo¶
Os provedores podem configurar um executável em um aplicativo para usar as seguintes concessões de autor da chamada no nível da conta:
CREATE DATABASE
EXECUTE ALERT
EXECUTE MANAGED TASK
EXECUTE TASK
READ SESSION
VIEW LINEAGE
Nota
Os consumidores devem ter cuidado ao realizar concessões de autor da chamada no nível de conta para um aplicativo.
Determinar os requisitos de acesso de um aplicativo¶
Snowflake Native Apps oferecem aos provedores flexibilidade para configurar o acesso aos dados e executáveis gerenciados pelo aplicativo. A tabela a seguir apresenta diretrizes sobre qual mecanismo usar, 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. |
Realizar operações no nível da conta, como criar bancos de dados ou executar tarefas. |
Usar direitos restritos do autor da chamada, que permitem ao consumidor ativar o acesso para executar essas ações. |
Adicionar a propriedade restricted_callers_rights ao manifesto¶
Como provedor, se você configurar um executável em um aplicativo para usar direitos restritos de autor da chamada, a Snowflake recomenda que você adicione restricted_callers_rights ao arquivo de manifesto, como mostrado no exemplo a seguir:
restricted_callers_rights:
enabled: true
description: This app includes stored procedure that uses restricted caller's rights.
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 direitos restritos de autor da chamada, use a cláusula EXECUTE AS RESTRICTED CALLER quando o aplicativo criar um executável, 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;
Para obter mais informações, consulte CREATE PROCEDURE.
Uso de um serviço de direitos restritos do autor da chamada em um aplicativo com contêineres¶
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 com contêineres, um serviço Snowpark Container Services pode ser executado com os privilégios do aplicativo (direitos de proprietário) ou com os privilégios de autor da chamada do serviço (direitos restritos de autor da chamada). No entanto, no aplicativo a função é service _owner_, em vez de service_user_. Ao realizar concessões de autor da chamada , um consumidor especifica o aplicativo usando a cláusula TO APPLICATION, como mostrado no exemplo a seguir:
GRANT CALLER USAGE ON DATABASE consumer_db TO APPLICATION hello_snowflake_app;
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 executáveis de direitos restritos de autor da chamada 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 executáveis com direitos restritos de autor da chamada, esses executáveis também devem ser propriedade do aplicativo. Por exemplo, o procedimento armazenado de um aplicativo com direitos de proprietário não pode chamar o procedimento armazenado de um consumidor com direitos restritos de autor da chamada.
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.
Procedimentos armazenados com direitos restritos de autor da chamada também redigem informações internas sobre o aplicativo. Especificamente, isso se aplica aos seguintes comandos, exibições e funções, em que a maior parte das informações é redigida:
O comando DESCRIBE PROCEDURE
Exibição PROCEDURES do Information Schema
Exibição PROCEDURES do Information Schema da conta
A função GET_DDL
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 que foram receberam o privilégio MANAGE CALLER GRANTS podem realizar concessões de autor da chamada a um executável. Entretanto, durante o ciclo de vida de desenvolvimento de um Snowflake Native App, os provedores podem precisar criar e descartar o aplicativo com frequência. Snowflake Native Apps fornecem um mecanismo para criar concessões de autor da chamada 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;
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á.