Tutorial 5: Configurar e testar privilégios de ponto de extremidade do servidor¶
Introdução¶
No Tutorial 1, você usa a mesma função para criar e testar um serviço. A função que cria o serviço é a função de proprietário do serviço, então você pode se comunicar com o serviço usando essa função.
Neste tutorial, você explorará o uso de uma função diferente para se comunicar com o serviço.
Você concede a esta função o privilégio USAGE usando uma função de serviço que você define na especificação do serviço.
Neste tutorial, você modifica o Tutorial 1 do seguinte modo:
Crie uma nova função que você usará para se comunicar com o serviço.
Modifique a especificação do serviço da seguinte forma:
Defina dois pontos de extremidade, em vez de apenas um. Observe que o segundo ponto de extremidade é adicionado apenas para demonstrar como as permissões de ponto de extremidade funcionam.
Defina uma função de serviço que tenha permissão para acessar apenas um dos dois pontos de extremidade.
Conceda a função de serviço à nova função que você criou para permitir acesso a um dos pontos de extremidade do servidor.
Use a nova função para se comunicar com o ponto de extremidade do servidor.
Preparação¶
Siga a Configuração comum com as seguintes modificações:
Conclua as etapas comuns de configuração.
Usando a função ACCOUNTADMIN, execute o script a seguir para criar outra função (
service_function_user_role
), substituindouser_name
pelo nome do usuário Snowflake. Depois de criar o serviço Echo, você usa essa função para se comunicar com o serviço.USE ROLE ACCOUNTADMIN; CREATE ROLE service_function_user_role; GRANT ROLE service_function_user_role TO USER <user-name>; GRANT USAGE ON WAREHOUSE tutorial_warehouse TO ROLE service_function_user_role;
Siga o Tutorial 1, etapas 1 e 2, para criar e enviar uma imagem para um repositório em sua conta. Não prossiga com a etapa 3 porque você criará o serviço como parte deste tutorial.
Criação de um serviço¶
Para garantir que você esteja no contexto correto para as instruções SQL nesta etapa, execute o seguinte:
USE ROLE test_role; USE DATABASE tutorial_db; USE SCHEMA data_schema; USE WAREHOUSE tutorial_warehouse;
Para criar o serviço, execute o seguinte comando usando
test_role
(a função de proprietário do serviço).CREATE SERVICE echo_service IN COMPUTE POOL tutorial_compute_pool FROM SPECIFICATION $$ spec: containers: - name: echo image: /tutorial_db/data_schema/tutorial_repository/my_echo_service_image:latest env: SERVER_PORT: 8000 CHARACTER_NAME: Bob readinessProbe: port: 8000 path: /healthcheck endpoints: - name: echoendpoint port: 8000 public: true - name: echoendpoint2 port: 8002 public: true serviceRoles: - name: echoendpoint_role endpoints: - echoendpoint $$;
De acordo com a especificação inline, o
echo_service
expõe dois pontos de extremidade públicos, mas a função de serviço (echoendpoint_role
) concede o privilégio USAGE somente em um dos pontos de extremidade.Verifique se o serviço está em execução.
SHOW SERVICES; SELECT SYSTEM$GET_SERVICE_STATUS('echo_service'); DESCRIBE SERVICE echo_service;
Usando
test_role
(a função do proprietário do serviço), conceda a função de serviço definida na especificação para a nova função (service_function_user_role
) que você criou como parte da configuração comum. O privilégio USAGE no banco de dados e no esquema.USE ROLE test_role; USE DATABASE tutorial_db; USE SCHEMA data_schema; GRANT USAGE ON DATABASE tutorial_db TO ROLE service_function_user_role; GRANT USAGE ON SCHEMA data_schema TO ROLE service_function_user_role; GRANT SERVICE ROLE echo_service!echoendpoint_Role TO ROLE service_function_user_role;
Esta função de serviço concede a
service_function_user_role
o privilégio USAGE no ponto de extremidadeechoendpoint
.Para demonstrar que o nome da função de serviço não diferencia maiúsculas de minúsculas, o exemplo usa o nome da função
echoendpoint_Role
.
Uso do serviço¶
Crie uma função de serviço para se comunicar com o serviço. Você cria uma função de serviço usando o service_function_user_role
(não a função de proprietário do serviço) e usa o serviço.
Crie uma função de serviço.
USE ROLE service_function_user_role; CREATE OR REPLACE FUNCTION my_echo_udf_try1 (InputText VARCHAR) RETURNS varchar SERVICE=echo_service ENDPOINT=echoendpoint AS '/echo';
Tente criar outra função de serviço que se refira ao ponto de extremidade
echoservice2
para o qual a função não tem privilégio de acesso. Portanto, o comando deve falhar.CREATE OR REPLACE FUNCTION my_echo_udf_try2 (InputText varchar) RETURNS varchar SERVICE=echo_service ENDPOINT=echoendpoint2 AS '/echo';
Use a função de serviço.
SELECT my_echo_udf_try1('Hello');
Limpeza¶
Para remover os recursos que você criou, siga as etapas em Tutorial 1 para limpar outros recursos criados no Tutorial 1.
Qual é o próximo passo?¶
Agora que você concluiu este tutorial, você pode retornar para Como trabalhar com serviços para explorar outros tópicos.