Conceder direitos do chamador restritos a um executável em um aplicativo¶
Este tópico descreve como um consumidor pode realizar concessões de autor da chamada a um executável em um Snowflake Native App.
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 autor da chamada permitem que um executável funcione com direitos de autor da chamada, mas restringe os privilégios do autor da chamada com os quais o executável funciona. Com os direitos restritos do autor da chamada, um executável de propriedade de um aplicativo não pode ser executado com um privilégio específico, a menos que um administrador na conta do consumidor o permita 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.
Privilégios necessários para conceder direitos de chamador restritos a um aplicativo¶
Para conceder concessões de chamador a um aplicativo como consumidor, você deve usar a função ACCOUNTADMIN ou usar uma função que tenha o privilégio MANAGE CALLER GRANTS. Para obter mais informações, consulte GRANT CALLER.
Conceder concessões de chamador a um executável em um aplicativo usando Snowsight¶
Usando Snowsight, você pode conceder concessões de chamador a um aplicativo em objetos na conta do consumidor.
Nota
Para executar outras tarefas, incluindo revogar concessões de autor da chamada de um aplicativo, realizar concessões de autor da chamada a uma tabela específica ou atribuir direitos de chamador no nível de conta, você deve usar os comandos SQL apropriados.
Faça login no Snowsight.
No menu de navegação, selecione Catalog » Apps.
Selecione um aplicativo.
Clique no ícone Settings na barra de ferramentas e selecione a guia Privileges.
Se o aplicativo for compatível com direitos restritos do chamador, a seção Restricted caller’s rights será exibida na guia Privileges.
Nota
Você só pode conceder concessões ao chamador na Snowsight se o provedor tiver configurado o aplicativo para exibir a UI dos direitos restritos do chamador.
Clique em Add grants.
Selecione um Access scope.
Isso determina se os direitos do chamador se aplicam a um esquema, a um banco de dados ou ao nível da conta. Você deve selecionar a opção com o menor escopo possível para evitar conceder direitos desnecessários ao aplicativo.
Cuidado
Tenha cuidado ao selecionar o escopo de nível de conta, que pode conceder direitos de chamador ao aplicativo em todos os tipos de objetos compatíveis.
Se você selecionou o escopo do esquema ou do banco de dados, selecione o esquema ou o banco de dados conforme necessário.
Nota
Você pode selecionar vários esquemas ou bancos de dados. Você também pode selecionar esquemas em diferentes bancos de dados.
Clique em Next.
Selecione o tipo de objeto aos quais os direitos do chamador serão concedidos.
Use a pesquisa para encontrar um tipo de objeto. A lista de tipos de objetos depende do escopo que você escolheu acima.
Quando você seleciona um tipo de objeto, a entrada do objeto na lista se expande para os privilégios disponíveis para cada tipo de objeto.
Selecione os privilégios que deseja conceder.
Você pode selecionar vários privilégios para cada tipo de objeto. Você também pode selecionar privilégios para outros tipos de objetos.
Nota
O Snowflake concede automaticamente o privilégio USAGE a todos os objetos que você selecionar.
Clique em Next.
Selecione Grant summary para verificar o escopo, os tipos de objeto e os privilégios que você selecionou.
Nota
Todos os objetos do tipo selecionado que forem criados no futuro serão criados com os mesmos privilégios usando o escopo e os tipos de objeto selecionados.
Selecione SQL para visualizar os comandos GRANT CALLER que a Snowsight executará.
Nota
Se necessário, você pode copiar esses comandos e executá-los manualmente em uma planilha.
Clique em Save
O escopo, os objetos e os privilégios que você selecionou são exibidos em Restricted caller’s rights section.
Para modificar os privilégios selecionados, clique em Edit e selecione ou desmarque os privilégios conforme necessário.
Conceder concessões de chamador a um executável em um aplicativo usando SQL¶
Ao configurar um aplicativo que solicita direitos restritos do chamador, execute as seguintes tarefas para conceder concessões do chamador ao aplicativo:
Verifique a listagem do aplicativo para verificar se o provedor comunicou que o aplicativo tem executáveis RCR.
Conceda as concessões do chamador conforme mencionado na listagem. O exemplo a seguir mostra como usar o comando GRANT CALLER para conceder o privilégio SELECT em todas as tabelas de um banco de dados e esquema específicos:
GRANT CALLER USAGE ON DATABASE db1 TO APPLICATION hello_snowflake_app; GRANT CALLER USAGE ON SCHEMA db1.sch1 TO APPLICATION hello_snowflake_app; GRANT INHERITED CALLER SELECT ON ALL TABLES IN SCHEMA db.sch1 TO APPLICATION hello_snowflake_app;
Esse comando permite que um executável com direitos restritos de chamador acesse a execução de consultas em todas as tabelas com o esquema e o banco de dados
db.sch1. Além de conceder o privilégio SELECT em todas as tabelas, você também deve conceder USAGE no banco de dados e no esquema.