CREATE SECURITY INTEGRATION (Snowflake OAuth)

Erstellt eine neue Snowflake OAuth-Sicherheitsintegration im Konto oder ersetzt eine vorhandene Integration. Durch eine Snowflake OAuth-Sicherheitsintegration können Clients, die OAuth unterstützen, Benutzer auf eine Autorisierungsseite weiterleiten und Zugriffstoken (sowie optional Aktualisierungstoken) für den Zugriff auf Snowflake generieren.

Weitere Informationen zum Erstellen anderer Typen von Sicherheitsintegrationen (z. B. External OAuth) finden Sie unter CREATE SECURITY INTEGRATION.

Siehe auch:

ALTER SECURITY INTEGRATION (Snowflake OAuth), DROP INTEGRATION, SHOW INTEGRATIONS

Syntax

Snowflake OAuth für Partneranwendungen

CREATE [ OR REPLACE ] SECURITY INTEGRATION [IF NOT EXISTS]
  <name>
  TYPE = OAUTH
  OAUTH_CLIENT = <partner_application>
  OAUTH_REDIRECT_URI = '<uri>'  -- Required when OAUTH_CLIENT=LOOKER
  [ ENABLED = { TRUE | FALSE } ]
  [ OAUTH_ISSUE_REFRESH_TOKENS = TRUE | FALSE ]
  [ OAUTH_REFRESH_TOKEN_VALIDITY = <integer> ]
  [ OAUTH_USE_SECONDARY_ROLES = IMPLICIT | NONE ]
  [ BLOCKED_ROLES_LIST = ( '<role_name>' [ , '<role_name>' , ... ] ) ]
  [ COMMENT = '<string_literal>' ]
Copy

Snowflake OAuth für kundenspezifische Clients

CREATE [ OR REPLACE ] SECURITY INTEGRATION [IF NOT EXISTS]
  <name>
  TYPE = OAUTH
  OAUTH_CLIENT = CUSTOM
  OAUTH_CLIENT_TYPE = 'CONFIDENTIAL' | 'PUBLIC'
  OAUTH_REDIRECT_URI = '<uri>'
  [ ENABLED = { TRUE | FALSE } ]
  [ OAUTH_ALLOW_NON_TLS_REDIRECT_URI = TRUE | FALSE ]
  [ OAUTH_ENFORCE_PKCE = TRUE | FALSE ]
  [ OAUTH_USE_SECONDARY_ROLES = IMPLICIT | NONE ]
  [ PRE_AUTHORIZED_ROLES_LIST = ( '<role_name>' [ , '<role_name>' , ... ] ) ]
  [ BLOCKED_ROLES_LIST = ( '<role_name>' [ , '<role_name>' , ... ] ) ]
  [ OAUTH_ISSUE_REFRESH_TOKENS = TRUE | FALSE ]
  [ OAUTH_REFRESH_TOKEN_VALIDITY = <integer> ]
  [ NETWORK_POLICY = '<network_policy>' ]
  [ OAUTH_CLIENT_RSA_PUBLIC_KEY = <public_key1> ]
  [ OAUTH_CLIENT_RSA_PUBLIC_KEY_2 = <public_key2> ]
  [ COMMENT = '<string_literal>' ]
Copy

Erforderliche Parameter (alle OAuth-Clients)

name

Zeichenfolge, die den Bezeichner (d. h. den Namen) für die Integration angibt. Muss in Ihrem Konto eindeutig sein.

Darüber hinaus muss der Bezeichner mit einem Buchstaben beginnen und darf keine Leer- oder Sonderzeichen enthalten, es sei denn, die gesamte Bezeichnerzeichenfolge wird in doppelte Anführungszeichen gesetzt (z. B. "My object"). Bei Bezeichnern, die in doppelte Anführungszeichen eingeschlossen sind, ist auch die Groß-/Kleinschreibung zu beachten.

Weitere Details dazu finden Sie unter Anforderungen an Bezeichner.

TYPE = OAUTH

Geben Sie den Typ der Integration an:

  • OAUTH: Erstellt eine Sicherheitsschnittstelle zwischen Snowflake und einem Client, der OAuth unterstützt.

OAUTH_CLIENT = { CUSTOM | partner_application }

Geben Sie den Clienttyp an:

  • CUSTOM: Erstellt eine OAuth-Schnittstelle zwischen Snowflake und einem kundenspezifischen Client.

  • partner_application: Erstellt eine OAuth-Schnittstelle zwischen Snowflake und einer Partneranwendung. Folgende Werte werden unterstützt:

    • TABLEAU_DESKTOP: Tableau Desktop Version 2019.1 oder höher.

    • TABLEAU_SERVER: Tableau Online oder Tableau Server. Wenn Tableau Server eine Verbindung zu Snowflake über private Konnektivität zum Snowflake-Dienst herstellt, müssen Sie stattdessen OAUTH_CLIENT = CUSTOM angeben.

    • LOOKER: Das Looker Business Intelligence-Tool.

OAUTH_REDIRECT_URI = 'uri'

Gibt den Client-URI an. Nachdem ein Benutzer authentifiziert wurde, wird der Webbrowser zu dieser URI umgeleitet.

Dieser Parameter ist erforderlich, wenn OAUTH_CLIENT = LOOKER. Weitere Informationen zu dem Beispiel finden Sie in der Looker-Dokumentation.

Zusätzliche erforderliche Parameter (kundenspezifische Clients)

Nur erforderlich, wenn OAUTH_CLIENT = CUSTOM (d. h. beim Erstellen einer Integration für einen kundenspezifischen Client)

OAUTH_CLIENT_TYPE = { 'CONFIDENTIAL' | 'PUBLIC' }

Gibt den Typ des zu registrierenden Clients an. Snowflake unterstützt sowohl vertrauliche als auch öffentliche Clients. Vertrauliche Clients können ein Geheimnis speichern. Sie werden in einem geschützten Bereich ausgeführt, auf den Endbenutzer nicht zugreifen können. Ein in der Cloud bereitgestellter, sicherer Service kann beispielsweise ein vertraulicher Client sein. Ein Client, der hingegen auf einem Desktop ausgeführt oder über einen App Store verteilt wird, kann ein öffentlicher Client sein.

OAUTH_REDIRECT_URI = 'uri'

Gibt den Client-URI an. Nachdem ein Benutzer authentifiziert wurde, wird der Webbrowser zu dieser URI umgeleitet. Die URI muss durch TLS (Transport Layer Security) geschützt werden, falls der optionale Parameter OAUTH_ALLOW_NON_TLS_REDIRECT_URI nicht auf TRUE gesetzt ist.

Die mit der Umleitungs-URI gesendeten Abfrageparameter dürfen nicht in die Anforderung an den Autorisierungsendpunkt aufgenommen werden. Wenn z. B. der Wert des Abfrageparameters redirect_uri in der Anforderung an den Autorisierungsendpunkt https://www.example.com/connect?authType=snowflake ist, müssen Sie sicherstellen, dass der Parameter OAUTH_REDIRECT_URI auf https://www.example.com/connect gesetzt ist.

Optionale Parameter (alle OAuth-Clients)

ENABLED = { TRUE | FALSE }

Gibt an, ob die Integrationsoperation gestartet oder angehalten werden soll.

  • TRUE aktiviert die Integration.

  • FALSE deaktiviert die Integration für Wartungszwecke. Eine Integration zwischen Snowflake und einem Drittanbieterdienst funktioniert nicht.

Standard: FALSE. Wenn eine Sicherheitsintegration erstellt wird, ohne diesen Parameter auf TRUE zu setzen, setzt Snowflake den Parameter auf FALSE.

Zusätzliche optionale Parameter (Partneranwendungen)

Gültig, wenn OAUTH_CLIENT = <Partneranwendung> (d. h. beim Erstellen einer Integration für eine Partneranwendung)

OAUTH_ISSUE_REFRESH_TOKENS = { TRUE | FALSE }

Boolescher Wert, der angibt, ob der Client ein Aktualisierungstoken gegen ein Zugriffstoken austauschen darf, wenn das aktuelle Zugriffstoken abgelaufen ist. Wenn auf FALSE gesetzt, wird unabhängig von dem in OAUTH_REFRESH_TOKEN_VALIDITY eingestellten Wert kein Aktualisierungstoken ausgestellt. Die Benutzerzustimmung wird widerrufen, und der Benutzer muss die Autorisierung erneut bestätigen.

Standard: TRUE

Bemerkung

Wenn dieser Parameter auf FALSE gesetzt ist und die Sicherheitsintegration zudem ENABLED = TRUE enthält, wird der Snowflake OAuth-Ablauf wiederholt, ein nicht konfigurierbares Zugriffstoken ausgegeben und das Zugriffstoken ist 600 Sekunden (10 Minuten) lang gültig. Nach Ablauf dieses Zugriffstokens muss sich der Benutzer erneut authentifizieren.

Wenn Sie diesen Parameter auf FALSE und ENABLED = FALSE setzen, werden keine Token ausgegeben und die Integration ist deaktiviert.

OAUTH_REFRESH_TOKEN_VALIDITY = integer

Ganzzahl, die angibt, wie lange Aktualisierungstoken gültig sein sollen (in Sekunden). Diese Einstellung kann verwendet werden, um das Aktualisierungstoken regelmäßig ablaufen zu lassen. Beachten Sie, dass OAUTH_ISSUE_REFRESH_TOKENS auf TRUE gesetzt sein muss.

Wenn ein Aktualisierungstoken abläuft, muss die Anwendung den Benutzer erneut durch den Autorisierungsablauf leiten, damit ein neues Aktualisierungstoken abgerufen wird.

Die unterstützten Minimal-, Maximal- und Standardwerte lauten wie folgt:

Anwendung

Minimum

Maximum

Standard

Tableau Desktop

60 (1 Minute)

36000 (10 Stunden)

36000 (10 Stunden)

Tableau Server oder Tableau Online

60 (1 Minute)

7776000 (90 Tage)

7776000 (90 Tage)

Kundenspezifischer Client

3600 (1 Stunde)

7776000 (90 Tage)

7776000 (90 Tage)

Wenn Sie aus geschäftlichen Gründen den Mindestwert senken oder den Höchstwert erhöhen müssen, bitten Sie Ihren Kontoadministrator, eine Anforderung an den Snowflake-Support zu senden.

OAUTH_USE_SECONDARY_ROLES = { IMPLICIT | NONE }
  • IMPLICIT: Die in den Benutzereigenschaften festgelegten Standard-Sekundärrollen sind in der geöffneten Sitzung standardmäßig aktiviert.

  • NONE: Standard-Sekundärrollen werden in der geöffneten Sitzung nicht unterstützt.

Standard: NONE

BLOCKED_ROLES_LIST = ( 'role_name' [ , 'role_name' , ... ] )

Durch Kommas getrennte Liste von Snowflake-Rollen, deren Verwendung ein Benutzer nach der Authentifizierung nicht ausdrücklich zustimmen kann, z. B. 'BLOCKED_ROLES_LIST = ('custom_role1', 'custom_role2').

Standardmäßig verhindert Snowflake, dass sich die Rollen ACCOUNTADMIN, ORGADMIN und SECURITYADMIN authentifizieren können. Um diesen berechtigten Rollen die Authentifizierung zu ermöglichen, setzen Sie mit dem Befehl ALTER ACCOUNT den Kontoparameter OAUTH_ADD_PRIVILEGED_ROLES_TO_BLOCKED_LIST auf FALSE.

COMMENT = 'string_literal'

Gibt einen Kommentar für die Integration an.

Standard: Kein Wert

Zusätzliche optionale Parameter (kundenspezifische Clients)

Gültig, wenn OAUTH_CLIENT = CUSTOM (d. h. beim Erstellen einer Integration für einen kundenspezifischen Client)

OAUTH_ALLOW_NON_TLS_REDIRECT_URI = { TRUE | FALSE }

Wenn TRUE, kann OAUTH_REDIRECT_URI auf einen URI gesetzt werden, der nicht durch TLS geschützt ist. Wir empfehlen dringend die Verwendung von TLS, um Man-in-the-Middle-OAuth-Umleitungen bei Phishing-Angriffen zu verhindern.

Standard: FALSE

OAUTH_ENFORCE_PKCE = { TRUE | FALSE }

Boolescher Wert, der angibt, ob für die Integration Proof Key for Code Exchange (PKCE) erforderlich sein soll.

Standardmäßig ist PKCE optional und wird nur durchgesetzt, wenn die Parameter code_challenge und code_challenge_method beide in der URL des Autorisierungsendpunkts enthalten sind. Wir empfehlen jedoch dringend, dass Ihr Client für alle Berechtigungen PKCE erfordert, um den OAuth-Ablauf sicherer zu gestalten. Weitere Informationen dazu finden Sie unter Snowflake OAuth für kundenspezifische Clients konfigurieren.

Standard: FALSE

OAUTH_USE_SECONDARY_ROLES = { IMPLICIT | NONE }
  • IMPLICIT: Die in den Benutzereigenschaften festgelegten Standard-Sekundärrollen sind in der geöffneten Sitzung standardmäßig aktiviert.

  • NONE: Standard-Sekundärrollen werden in der geöffneten Sitzung nicht unterstützt.

Standard: NONE

PRE_AUTHORIZED_ROLES_LIST = ( 'role_name' [ , 'role_name' , ... ] )

Durch Kommas getrennte Liste von Snowflake-Rollen, denen ein Benutzer nach der Authentifizierung nicht ausdrücklich zustimmen muss, z. B. PRE_AUTHORIZED_ROLES_LIST = ('custom_role1', 'custom_role2'). Beachten Sie, dass die Rollen ACCOUNTADMIN, ORGADMIN und SECURITYADMIN nicht in die Liste aufgenommen werden können.

Bemerkung

Dieser Parameter wird nur bei vertraulichen Clients unterstützt.

BLOCKED_ROLES_LIST = ( 'role_name' [ , 'role_name' , ... ] )

Durch Kommas getrennte Liste von Snowflake-Rollen, deren Verwendung ein Benutzer nach der Authentifizierung nicht ausdrücklich zustimmen kann, z. B. BLOCKED_ROLES_LIST = ('custom_role1', 'custom_role2').

Beachten Sie, dass die Rollen ACCOUNTADMIN, ORGADMIN und SECURITYADMIN standardmäßig in der Liste enthalten sind. Wenn diese Rollen jedoch aus Ihrem Konto entfernt werden sollen, müssen Sie den Kontoadministrator bitten, eine entsprechende Anforderung an den Snowflake-Support zu senden.

OAUTH_ISSUE_REFRESH_TOKENS = { TRUE | FALSE }

Boolescher Wert, der angibt, ob der Client ein Aktualisierungstoken gegen ein Zugriffstoken austauschen darf, wenn das aktuelle Zugriffstoken abgelaufen ist. Wenn auf FALSE gesetzt, wird kein Aktualisierungstoken ausgestellt. Die Benutzerzustimmung wird widerrufen, und der Benutzer muss die Autorisierung erneut bestätigen.

Standard: TRUE

OAUTH_REFRESH_TOKEN_VALIDITY = integer

Ganzzahl, die angibt, wie lange Aktualisierungstoken gültig sein sollen (in Sekunden). Diese Einstellung kann verwendet werden, um das Aktualisierungstoken regelmäßig ablaufen zu lassen. Beachten Sie, dass OAUTH_ISSUE_REFRESH_TOKENS auf TRUE gesetzt sein muss.

Beachten Sie, dass Sie Ihren Kontoadministrator bitten müssen, eine entsprechende Anforderung an den Snowflake-Support zu senden, wenn das Unternehmen einen niedrigeren oder höheren Mindest- bzw. Höchstwert wünscht.

Werte:

86400 (1 Tag) bis 7776000 (90 Tage)

Standard:

7776000

NETWORK_POLICY = 'network_policy'

Gibt eine bestehende Netzwerkrichtlinie an. Diese Netzwerkrichtlinie kontrolliert Netzwerkdatenverkehr, der versucht, einen Autorisierungscode gegen ein Zugriffs- oder Aktualisierungstoken auszutauschen oder ein Aktualisierungstoken zu verwenden, um ein neues Zugriffstoken zu erhalten.

Wenn für das Konto oder den Benutzer auch Netzwerkrichtlinien festgelegt sind, finden Sie entsprechende Informationen unter Rangfolge bei Netzwerkrichtlinien.

OAUTH_CLIENT_RSA_PUBLIC_KEY = public_key1

Gibt einen öffentlichen RSA-Schlüssel an.

OAUTH_CLIENT_RSA_PUBLIC_KEY_2 = public_key2

Gibt einen zweiten öffentlichen RSA-Schlüssel an. Wird für die Schlüsselrotation verwendet.

COMMENT = 'string_literal'

Gibt einen Kommentar für die Integration an.

Standard: Kein Wert

Anforderungen an die Zugriffssteuerung

Eine Rolle, die zur Ausführung dieses SQL-Befehls verwendet wird, muss mindestens die folgenden Berechtigungen haben:

Berechtigung

Objekt

Anmerkungen

CREATE INTEGRATION

Konto

Only the ACCOUNTADMIN role has this privilege by default. The privilege can be granted to additional roles as needed.

Eine Anleitung zum Erstellen einer kundenspezifischen Rolle mit einem bestimmten Satz von Berechtigungen finden Sie unter Erstellen von kundenspezifischen Rollen.

Allgemeine Informationen zu Rollen und Berechtigungen zur Durchführung von SQL-Aktionen auf sicherungsfähigen Objekten finden Sie unter Übersicht zur Zugriffssteuerung.

Nutzungshinweise

  • Metadaten:

    Achtung

    Kunden müssen sicherstellen, dass bei der Nutzung des Snowflake-Dienstes keine personenbezogenen Daten (außer für ein Objekt „Benutzer“), sensible Daten, exportkontrollierte Daten oder andere regulierte Daten als Metadaten eingegeben werden. Weitere Informationen dazu finden Sie unter Metadatenfelder in Snowflake.

  • CREATE OR REPLACE <Objekt>-Anweisungen sind atomar. Das heißt, wenn ein Objekt ersetzt wird, erfolgt das Löschen des alten Objekts und das Erstellen des neuen Objekts in einer einzigen Transaktion.

Beispiele

Beispiel für Tableau Desktop

Im folgenden Beispiel wird eine OAuth-Integration mit den Standardeinstellungen erstellt:

CREATE SECURITY INTEGRATION td_oauth_int1
  TYPE = oauth
  ENABLED = true
  OAUTH_CLIENT = tableau_desktop;
Copy

Zeigen Sie mit DESCRIBE INTEGRATION die Integrationseinstellungen an:

DESC SECURITY INTEGRATION td_oauth_int1;
Copy

Im folgenden Beispiel wird eine OAuth-Integration mit Aktualisierungstoken erstellt, die nach 10 Stunden (36000 Sekunden) ablaufen. Die Integration verhindert, dass Benutzer eine Sitzung mit SYSADMIN als aktiver Rolle starten können:

CREATE SECURITY INTEGRATION td_oauth_int2
  TYPE = oauth
  ENABLED = true
  OAUTH_CLIENT = tableau_desktop
  OAUTH_REFRESH_TOKEN_VALIDITY = 36000
  BLOCKED_ROLES_LIST = ('SYSADMIN');
Copy

Beispiel für Tableau Online oder Tableau Server

Im folgenden Beispiel wird eine OAuth-Integration mit den Standardeinstellungen erstellt:

CREATE SECURITY INTEGRATION ts_oauth_int1
  TYPE = oauth
  ENABLED = true
  OAUTH_CLIENT = tableau_server;
Copy

Zeigen Sie mit DESCRIBE INTEGRATION die Integrationseinstellungen an:

DESC SECURITY INTEGRATION ts_oauth_int1;
Copy

Im folgenden Beispiel wird eine OAuth-Integration mit Aktualisierungstoken erstellt, die nach 1 Tag (86.400 Sekunden) ablaufen. Die Integration verhindert, dass Benutzer eine Sitzung mit SYSADMIN als aktiver Rolle starten können:

CREATE SECURITY INTEGRATION ts_oauth_int2
  TYPE = oauth
  ENABLED = true
  OAUTH_CLIENT = tableau_server
  OAUTH_REFRESH_TOKEN_VALIDITY = 86400
  BLOCKED_ROLES_LIST = ('SYSADMIN');
Copy

Beispiel für kundenspezifischen Client

Im folgenden Beispiel wird eine OAuth-Integration erstellt, die die Schlüsselpaar-Authentifizierung verwendet. Die Integration erlaubt eine Nutzung von Aktualisierungstoken, die nach 1 Tag (86400 Sekunden) ablaufen. Die Integration verhindert, dass Benutzer eine Sitzung mit SYSADMIN als aktiver Rolle starten können:

CREATE SECURITY INTEGRATION oauth_kp_int
  TYPE = oauth
  ENABLED = true
  OAUTH_CLIENT = custom
  OAUTH_CLIENT_TYPE = 'CONFIDENTIAL'
  OAUTH_REDIRECT_URI = 'https://localhost.com'
  OAUTH_ISSUE_REFRESH_TOKENS = TRUE
  OAUTH_REFRESH_TOKEN_VALIDITY = 86400
  PRE_AUTHORIZED_ROLES_LIST = ('MYROLE')
  BLOCKED_ROLES_LIST = ('SYSADMIN');
Copy