CREATE EXTERNAL ACCESS INTEGRATION¶
Erstellt eine Integration für den externen Zugriff für den Zugriff auf externe Netzwerkstandorte von einem UDF- oder Prozedur-Handler aus.
- Siehe auch:
ALTER EXTERNAL ACCESS INTEGRATION, DROP INTEGRATION, SHOW INTEGRATIONS, DESCRIBE INTEGRATION
Syntax¶
CREATE [ OR REPLACE ] EXTERNAL ACCESS INTEGRATION <name>
ALLOWED_NETWORK_RULES = ( <rule_name_1> [, <rule_name_2>, ... ] )
[ ALLOWED_API_AUTHENTICATION_INTEGRATIONS = ( <integration_name_1> [, <integration_name_2>, ... ] ) ]
[ ALLOWED_AUTHENTICATION_SECRETS = ( <secret_name_1> [, <secret_name_2>, ... ] ) ]
ENABLED = { TRUE | FALSE }
[ COMMENT = '<string_literal>' ]
Erforderliche Parameter¶
name
Bezeichner der Integration für den externen Zugriff.
Der Bezeichnerwert muss mit einem alphabetischen Zeichen 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 die Groß-/Kleinschreibung zu beachten.Weitere Details dazu finden Sie unter Anforderungen an Bezeichner.
ALLOWED_NETWORK_RULES = (rule_name [ , rule_name ... ])
Gibt die zulässigen Netzwerkregeln an. Es können nur Ausgangsregeln angegeben werden.
Referenzinformationen zu Netzwerkregeln finden Sie unter CREATE NETWORK RULE.
ENABLED = { TRUE | FALSE }
Gibt an, ob diese Integration aktiviert oder deaktiviert ist. Wenn die Integration deaktiviert ist, kann jeder Handler-Code, der darauf angewiesen ist, den externen Netzwerkstandort nicht erreichen.
Der Wert unterscheidet nicht zwischen Groß- und Kleinschreibung.
Die Voreinstellung ist
TRUE
.
Optionale Parameter¶
ALLOWED_API_AUTHENTICATION_INTEGRATIONS = ( integration_name_1 [, integration_name_2, ... ] )
Gibt die Sicherheitsintegrationen an, deren OAuth-Autorisierungsserver das von der UDF oder Prozedur verwendete Geheimnis ausgegeben hat. Die Sicherheitsintegration muss der Typ sein, der für die externe API-Integration verwendet wird.
Weitere Informationen zu Sicherheitsintegrationen finden Sie unter CREATE SECURITY INTEGRATION (Externe API-Authentifizierung).
ALLOWED_AUTHENTICATION_SECRETS = (secret_name [ , secret_name ... ])
Gibt die Geheimnisse an, die eine UDF oder Prozedur verwenden kann, wenn sie sich auf diese Integration bezieht.
Weitere Informationen zu Geheimnissen finden Sie unter CREATE SECRET.
COMMENT = 'string_literal'
Gibt einen Kommentar für die Integration des externen Zugangs 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. |
USAGE |
Geheimnis |
Erforderlich für alle von der Integration referenzierten Geheimnisse. |
USAGE |
Schema |
Erforderlich für alle Schemas, die von der Integration referenzierte Geheimnisse enthalten. |
Eine Anleitung zum Erstellen einer kundenspezifischen Rolle mit einer bestimmten Gruppe 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.
Beispiele¶
Erstellen Sie eine Integration für den externen Zugriff, die Zugriff auf die API Google Translation ermöglicht.
Ein ausführlicheres Beispiel finden Sie unter Erstellen und Verwenden einer Integration für den externen Zugriff.
Erstellen Sie ein Geheimnis für die Anmeldeinformationen.
Um ein Geheimnis zu erstellen, muss Ihnen eine Rolle mit der Berechtigung CREATE SECRET für das aktuelle Schema zugewiesen worden sein. Für andere Arten von Geheimnissen, die von diesem Befehl unterstützt werden, siehe CREATE SECRET. In diesem Beispiel bezieht sich
google_translate_oauth
auf eine Sicherheitsintegration. Weitere Informationen dazu finden Sie unter CREATE SECURITY INTEGRATION (Externe API-Authentifizierung).CREATE OR REPLACE SECRET oauth_token TYPE = OAUTH2 API_AUTHENTICATION = google_translate_oauth OAUTH_REFRESH_TOKEN = 'my-refresh-token';
Erteilen Sie der
developer
-Rolle die READ-Berechtigung für das Geheimnis, damit UDF-Entwickler es verwenden können.Erstellen Sie die Rolle, die für Entwickler erforderlich ist, die das Geheimnis verwenden müssen.
USE ROLE USERADMIN; CREATE OR REPLACE ROLE developer;
Erteilen Sie die READ-Berechtigung an die
developer
-Rolle.USE ROLE SECURITYADMIN; GRANT READ ON SECRET oauth_token TO ROLE developer;
Erstellen Sie eine Netzwerkregel, die den Standort des externen Netzwerks repräsentiert. Verwenden Sie eine Rolle mit den unter CREATE NETWORK RULE beschriebenen Berechtigungen.
USE ROLE SYSADMIN; CREATE OR REPLACE NETWORK RULE google_apis_network_rule MODE = EGRESS TYPE = HOST_PORT VALUE_LIST = ('translation.googleapis.com');
Erstellen Sie eine Integration für den externen Zugriff unter Verwendung des Geheimnisses und der Netzwerkregel.
USE ROLE ACCOUNTADMIN; CREATE OR REPLACE EXTERNAL ACCESS INTEGRATION google_apis_access_integration ALLOWED_NETWORK_RULES = (google_apis_network_rule) ALLOWED_AUTHENTICATION_SECRETS = (oauth_token) ENABLED = true;
Erteilen Sie der
developer
-Rolle die USAGE-Berechtigung für die Integration, damit UDF-Entwickler sie verwenden können.GRANT USAGE ON INTEGRATION google_apis_access_integration TO ROLE developer;
Erstellen Sie einer UDF
google_translate_python
, die den angegebenen Text in einen Ausdruck in der angegebenen Sprache übersetzt. Weitere Informationen dazu finden Sie unter Verwendung der Integration für den externen Zugriff in einer Funktion oder Prozedur.USE ROLE developer; CREATE OR REPLACE FUNCTION google_translate_python(sentence STRING, language STRING) RETURNS STRING LANGUAGE PYTHON RUNTIME_VERSION = 3.8 HANDLER = 'get_translation' EXTERNAL_ACCESS_INTEGRATIONS = (google_apis_access_integration) PACKAGES = ('snowflake-snowpark-python','requests') SECRETS = ('cred' = oauth_token ) AS $$ import _snowflake import requests import json session = requests.Session() def get_translation(sentence, language): token = _snowflake.get_oauth_access_token('cred') url = "https://translation.googleapis.com/language/translate/v2" data = {'q': sentence,'target': language} response = session.post(url, json = data, headers = {"Authorization": "Bearer " + token}) return response.json()['data']['translations'][0]['translatedText'] $$;
Erteilen Sie die USAGE-Berechtigung für die Funktion
google_translate_python
, damit Personen mit der Benutzerrolle diese Funktion aufrufen können.GRANT USAGE ON FUNCTION google_translate_python(string, string) TO ROLE user;
Führen Sie die Funktion
google_translate_python
aus, um einen Ausdruck zu übersetzen.USE ROLE user; SELECT google_translate_python('Happy Thursday!', 'zh-CN');
Dies erzeugt die folgende Ausgabe.
------------------------------------------------------- | GOOGLE_TRANSLATE_PYTHON('HAPPY THURSDAY!', 'ZH-CN') | ------------------------------------------------------- | 快乐星期四! | -------------------------------------------------------