SELECTSELECT

SELECT

La nueva propiedad User Type de Snowflake

By Jeff SkoldbergSep 22, 20244 min read

Esta página también está disponible en English, Deutsch, Français, Italiano, 日本語 y Português.

¿Qué es la propiedad User Type?

Al crear o modificar un usuario en Snowflake, hay decenas de propiedades y parámetros que puedes configurar, tal como se explica en la documentación de Snowflake. Una de las Object Properties que puedes asignar a los usuarios es la propiedad type, que admite los valores person, service, legacy_service o null.

Snowflake introdujo esta propiedad recientemente, en el tercer trimestre de 2024, para dar seguimiento al propósito de cada usuario. En mi opinión, también es una forma sutil de incentivar a sus clientes a usar autenticación por par de claves en las cuentas de servicio, como veremos más adelante.

Qué significa cada tipo

  • person está pensado, como es evidente, para usuarios humanos. Estos usuarios suelen iniciar sesión en Snowflake mediante SSO (SAML) o autenticación simple por usuario y contraseña. Siempre se recomienda activar el MFA de Snowflake para los usuarios de tipo person.
  • El tipo service está pensado para cuentas de servicio. Tiene una particularidad: no admite autenticación por usuario/contraseña ni MFA. Debe usar la autenticación por par de claves de Snowflake; por eso no se permiten los comandos y propiedades habituales relacionados con MFA y contraseñas. Además, los usuarios de tipo service no pueden tener First, Middle ni Last Name.

Limitaciones de la propiedad user type en Snowflake

  • legacy_service es una cuenta de servicio que puede autenticarse con contraseña o SAML.

¿Cuáles son las ventajas?

Fortalecimiento de la cuenta

Diferenciar entre service y legacy_service ayuda a mantener la seguridad de la cuenta como prioridad. La autenticación por par de claves se reconoce ampliamente como más segura que la autenticación por contraseña; marcar cada cuenta que usa el método menos seguro es una buena práctica y, de paso, una lista de pendientes para futuras limpiezas.

Análisis del historial de consultas

Otra ventaja de mantener la propiedad Type en todos los usuarios es que puedes aprovechar esta información para análisis. Por ejemplo, imagina que quieres ver la cantidad de consultas contra una tabla, segmentada por tipo de servicio, usando el query history de 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

Código de ejemplo: cómo configurar la propiedad Type

Definir el User Type al crear un usuario nuevo

Configurar la propiedad type al crear un usuario es muy sencillo:

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

Actualizar el User Type de un usuario existente

Imagina que quieres asignar type=service a una cuenta de servicio existente que hoy usa autenticación por contraseña. Al actualizar un usuario existente, puedes hacer lo mínimo indispensable:

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

En este caso no ejecutamos unset sobre la contraseña ni sobre las demás propiedades incompatibles; estas se conservan, pero quedan deshabilitadas. Si más adelante cambias el tipo de usuario a legacy_service, person o null, esas propiedades se reactivarán.

Como buena práctica, te sugiero lo siguiente:

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;

Limitaciones

Hasta hoy (septiembre de 2024), la propiedad type no se muestra en la interfaz de Snowsight y solo se puede configurar por código. Además, el comando show users tampoco incluye una columna con el tipo de usuario, aunque ojalá la agreguen pronto.

La única forma de revisar el tipo de un usuario es con el comando describe user <username> o consultando la tabla snowflake.account_usage.users.

Conclusión y recomendaciones

La nueva propiedad type en Snowflake es una excelente forma de llevar un registro de los tipos de usuario en tu cuenta y, además, refuerza la seguridad, ya que te obliga a reconocer dónde tienes cuentas de servicio con autenticación heredada.

Mi recomendación es revisar cada cuenta de servicio en tu cuenta de Snowflake y asignarle type = service o type = legacy_service. Para las cuentas legacy_service, arma un plan de acción para migrarlas a service en el corto plazo.

Jeff es Consultor de Data y Analytics con más de 15 años de experiencia automatizando insights y usando los datos para gestionar procesos de negocio. En lo técnico, se especializa en Snowflake + dbt + Tableau. En cuanto a sectores, ha trabajado en servicios públicos, ensayos clínicos, publishing, CPG y manufactura. Puedes escribirle cuando quieras a [email protected].