Was ist die User-Type-Property?
Beim Anlegen oder Ändern eines Users in Snowflake lassen sich Dutzende Properties und Parameter setzen – nachzulesen in der Snowflake-Dokumentation. Eine dieser Object Properties ist die type-Property, die sich auf person, service, legacy_service oder null setzen lässt.
Snowflake hat diese Property im 3. Quartal 2024 eingeführt, um den Zweck jedes Users nachvollziehbar zu machen. Aus meiner Sicht ist sie zugleich ein dezenter Wink von Snowflake, für Service-Accounts auf Key-Pair-Authentifizierung zu setzen – dazu weiter unten mehr.
Die einzelnen Typen im Überblick
personist – wie der Name vermuten lässt – für menschliche User gedacht. Sie melden sich in Snowflake typischerweise per SSO (SAML) oder klassischer User-/Passwort-Authentifizierung an. Für User vom Typpersonist Snowflakes MFA grundsätzlich zu empfehlen.- Der Typ
serviceist für Service-Accounts vorgesehen. Die Besonderheit: Er erlaubt weder User-/Passwort-Authentifizierung noch MFA. Stattdessen muss Snowflakes Key-Pair-Authentifizierung verwendet werden. Übliche Befehle und Properties rund um MFA und Passwörter sind daher nicht zulässig. Außerdem können User vom Typserviceweder Vor-, Mittel- noch Nachnamen tragen.
legacy_servicebezeichnet einen Service-Account, der sich per Passwort oder SAML authentifizieren kann.
Welche Vorteile bringt das?
Account-Härtung
Die Unterscheidung zwischen service und legacy_service rückt die Account-Sicherheit in den Fokus. Key-Pair-Authentifizierung gilt allgemein als sicherer als Passwort-Authentifizierung. Jeden Account zu kennzeichnen, der noch den weniger sicheren Weg nutzt, ist gute Praxis – und liefert nebenbei eine To-do-Liste für künftige Aufräumarbeiten.
Analyse der Query History
Ein weiterer Vorteil: Wer die Type-Property für alle User konsequent pflegt, kann diese Information für Analysen nutzen. Angenommen, Sie möchten in der Snowflake Query History sehen, wie sich Queries auf eine Tabelle nach Service-Typ aufschlüsseln:
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
Codebeispiele: Die Type-Property setzen
User-Type beim Anlegen eines neuen Users setzen
Die type-Property beim Anlegen eines Users zu setzen, ist denkbar einfach:
create user if not exists my_service_user
type = service
rsa_public_key = <string>;
User-Type für einen bestehenden User aktualisieren
Angenommen, wir möchten type=service für einen bestehenden Service-Account setzen, der aktuell per Passwort authentifiziert. Beim Aktualisieren eines vorhandenen Users reicht im Minimalfall:
alter user my_service_user set
type = service
rsa_public_key = <string>
;
In diesem Fall haben wir das Passwort und andere inkompatible Properties nicht per unset entfernt. Sie bleiben gespeichert, sind aber deaktiviert. Wird der User-Typ wieder auf legacy_service, person oder null gesetzt, sind diese Properties erneut aktiv.
Für sauberes Housekeeping empfehle ich folgendes Vorgehen:
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;
Einschränkungen
Aktuell (Stand September 2024) wird die type-Property in der Snowsight-UI nicht angezeigt und lässt sich ausschließlich per Code setzen. Auch der Befehl show users liefert bislang keine Spalte für den User-Typ – das wird sich hoffentlich bald ändern.
Den Typ eines Users ermitteln Sie derzeit nur über den Befehl describe user <username> oder per Abfrage der Tabelle snowflake.account_usage.users.
Fazit und Empfehlungen
Die neue type-Property in Snowflake ist eine ausgezeichnete Möglichkeit, User-Typen in Ihrem Snowflake-Account nachzuhalten. Gleichzeitig trägt sie zur Account-Härtung bei, indem sie sichtbar macht, wo Sie Service-Accounts mit veralteter Authentifizierung im Einsatz haben.
Mein Rat: Gehen Sie jeden Service-Account in Ihrem Snowflake-Konto durch und setzen Sie ihn entweder auf type = service oder type = legacy_service. Für die legacy_service-Accounts erstellen Sie einen Aktionsplan, um sie zeitnah auf type = service umzustellen.
Jeff ist Data- und Analytics-Consultant mit über 15 Jahren Erfahrung darin, Insights zu automatisieren und Geschäftsprozesse datengetrieben zu steuern. Technologisch ist er auf Snowflake + dbt + Tableau spezialisiert. Branchenseitig bringt er Erfahrung aus Versorgungswirtschaft, klinischen Studien, Verlagswesen, CPG und Fertigung mit. Kontakt jederzeit unter [email protected].