SELECTSELECT

SELECT

Entendendo a nova propriedade User Type do Snowflake

By Jeff SkoldbergSep 22, 20244 min read

Esta página também está disponível em English, Deutsch, Español, Français, Italiano e 日本語.

O que é a propriedade User Type?

Ao criar ou alterar um usuário no Snowflake, existem dezenas de propriedades e parâmetros que podem ser definidos, conforme explicado na documentação do Snowflake. Uma das Object Properties que podem ser definidas para usuários é a propriedade type, que aceita os valores person, service, legacy_service ou null.

Essa propriedade foi lançada pelo Snowflake no terceiro trimestre de 2024 como uma forma de registrar a finalidade de cada usuário. Acredito que ela também seja uma maneira sutil de o Snowflake incentivar os clientes a adotar autenticação por par de chaves nas contas de serviço, como veremos a seguir.

Definindo cada tipo

  • person é, claramente, voltado para usuários humanos. Esses usuários normalmente acessam o Snowflake via SSO (SAML) ou por autenticação simples com usuário e senha. O MFA do Snowflake é sempre recomendado para usuários do tipo person.
  • O tipo service é voltado para contas de serviço. Esse tipo tem uma particularidade: não permite autenticação por usuário/senha nem MFA. Ele exige o uso da autenticação por par de chaves do Snowflake; por isso, os comandos e propriedades ligados a MFA e senhas não são permitidos. Além disso, usuários do tipo service não podem ter Primeiro, Segundo e Último Nome.

Limitações da propriedade user type do Snowflake

  • legacy_service é uma conta de serviço que pode se autenticar por senha ou SAML.

Quais são as vantagens?

Hardening da conta

Ao diferenciar service de legacy_service, mantemos a segurança da conta sempre em foco. A autenticação por par de chaves é amplamente reconhecida como mais segura do que a autenticação por senha; sinalizar cada conta que ainda usa a abordagem menos segura é uma boa prática e pode virar uma lista de pendências para uma futura faxina.

Analisando o query history

Outro benefício de manter a propriedade Type para todos os usuários é poder usar essa informação em análises. Por exemplo, imagine que você queira ver a contagem de queries em uma tabela separada por tipo de serviço, usando o query history do Snowflake:

select
    users.type = 'PERSON' as is_person,
    count(*)
from snowflake.account_usage.query_history
left join snowflake.account_usage.users
    on query_history.user_name=users.name
where true
    and query_history.query_text ilike '%analytics.public.orders%'
    and start_time > current_date - 30
group by 1

Exemplo de código: definindo a propriedade Type

Definindo o User Type ao criar um novo usuário

Definir a propriedade type na criação de um usuário é simples:

create user if not exists my_service_user
    type = service
    rsa_public_key = <string>;

Atualizando o User Type de um usuário existente

Imagine que queremos definir type=service para uma conta de serviço já existente que hoje usa autenticação por senha. Ao atualizar um usuário existente, dá para fazer só o essencial:

alter user my_service_user set
    type = service
    rsa_public_key = <string>
;

Nesse caso, não usamos unset na senha nem em outras propriedades incompatíveis; elas continuam armazenadas, mas desativadas. Definir o user type como legacy_service, person ou null reativaria essas propriedades.

Para manter tudo organizado, sugiro o seguinte:

alter user my_service_user unset password;
alter user my_service_user unset first_name;
alter user my_service_user unset middle_name;
alter user my_service_user unset last_name;
alter user my_service_user set disable_mfa = true;

Limitações

Até o momento (setembro de 2024), a propriedade type não aparece na interface do Snowsight e só pode ser definida via código. Além disso, o comando show users não exibe uma coluna para o user type, mas espero que isso mude em breve.

A única forma de consultar o tipo de um usuário é com o comando describe user <username> ou consultando a tabela snowflake.account_usage.users.

Conclusão e recomendações

A nova propriedade type no Snowflake é uma ótima forma de acompanhar os tipos de usuário na sua conta e funciona também como um recurso de hardening, já que obriga você a reconhecer onde ainda existem contas de serviço com autenticação legada.

Recomendo revisar cada conta de serviço da sua conta Snowflake e marcar uma a uma como type = service ou type = legacy_service. Para as contas legacy_service, monte um plano de ação para migrá-las para o tipo service em um futuro próximo.

Jeff é consultor de dados e analytics com mais de 15 anos de experiência em automatizar insights e usar dados para controlar processos de negócio. Do lado tecnológico, é especialista em Snowflake + dbt + Tableau. Do lado de negócios, tem experiência em utilidades públicas, ensaios clínicos, publishing, CPG e manufatura. Fale com ele quando quiser: [email protected].