- Kategorien:
Kontextfunktionen (Allgemein)
SYS_CONTEXT (SNOWFLAKE$SESSION-Namespace)¶
Gibt Informationen zu der Sitzung zurück, in der die Funktion aufgerufen wird.
Sie können diese Funktion in den folgenden Kontexten aufrufen:
Sie können diese Funktion direkt in der aktuellen Sitzung aufrufen.
Sie können eine ausführbare Datei mit Aufruferrechten ausführen (z. B. eine gespeicherte Prozedur mit Aufruferrechten), die diese Funktion aufruft.
Sie können eine ausführbare Datei mit Eigentümerrechten (z. B. eine gespeicherte Prozedur mit Eigentümerrechten) ausführen, die diese Funktion aufruft, vorausgesetzt, der Eigentümerrolle wurde die READ SESSION-Berechtigung für das Konto zugewiesen.
In jedem anderen Kontext gibt die Funktion NULL zurück.
- Siehe auch:
SYS_CONTEXT, SYS_CONTEXT (SNOWFLAKE$APPLICATION-Namespace), SYS_CONTEXT (SNOWFLAKE$ENVIRONMENT-Namespace), SYS_CONTEXT (SNOWFLAKE$ORGANIZATION-Namespace)
Syntax¶
Syntax für das Abrufen von Eigenschaften:
SYS_CONTEXT(
'SNOWFLAKE$SESSION' ,
'<property>'
)
Syntax für den Aufruf von Funktionen:
SYS_CONTEXT(
'SNOWFLAKE$SESSION' ,
'<function>' , '<argument>' [ , ... ]
)
Argumente¶
'SNOWFLAKE$SESSION'Gibt an, dass Sie eine Eigenschaft abrufen oder eine Funktion aufrufen möchten, um Informationen zu der Sitzung zurückzugeben, in der die Funktion aufgerufen wird.
'property'Name der Eigenschaft, die Sie abrufen möchten. Sie können die folgenden Eigenschaften angeben:
Eigenschaft
Beschreibung
PRINCIPAL_NAMEName des Prinzipals (Benutzender, Aufgabe oder SPCS Dienst), der/die die Sitzung gestartet hat. Der Name hängt vom Wert der
PRINCIPAL_TYPE-Eigenschaft ab:Wenn
PRINCIPAL_TYPEeiner der folgenden Werte ist, ist der Wert derPRINCIPAL_NAME-Eigenschaft der Name des Benutzenden:USERUSER_PERSONUSER_SERVICEUSER_LEGACY_SERVICE
Wenn für
PRINCIPAL_TYPEder WertTASKangegeben ist, ist der Wert der Name der Aufgabe.Wenn für
PRINCIPAL_TYPEder WertSNOWSERVICEangegeben ist, ist der Wert der Name des SPCS-Dienstes.
PRINCIPAL_TYPETyp des Prinzipals, der die Sitzung gestartet hat. Diese Eigenschaft kann einen der folgenden Werte haben:
USERoderUSER_suffix, wenn ein Benutzender die Sitzung gestartet hat.suffixhängt vom Typ des Benutzenden ab:Wenn das Benutzerobjekt keine TYPE-Eigenschaft hat, lautet der Wert
USER.Wenn die TYPE-Eigenschaft auf
PERSONgesetzt ist, lautet der WertUSER_PERSON.Wenn die TYPE-Eigenschaft auf
SERVICEgesetzt ist, lautet der WertUSER_SERVICE.Wenn die TYPE-Eigenschaft auf
LEGACY_SERVICEgesetzt ist, lautet der WertUSER_LEGACY_SERVICE.
TASK, wenn eine Aufgabe die Sitzung gestartet hat.SNOWSERVICE, wenn ein SPCS Dienst die Sitzung gestartet hat.
PRINCIPAL_EMAILDie E-Mail-Adresse, die mit dem Prinzipal verbunden ist. Wenn keine E-Mail-Adresse zugeordnet ist, ist der Wert dieser Eigenschaft NULL.
PRINCIPAL_DATABASEDer Name der Datenbank, die das Objekt für den Prinzipal enthält. Wenn der Prinzipal zum Beispiel eine Aufgabe ist, ist der Wert dieser Eigenschaft der Name der Datenbank, die die Aufgabe enthält.
Wenn der Prinzipal ein Objekt auf Kontoebene ist (z. B. ein Benutzender), ist der Wert dieser Eigenschaft NULL.
PRINCIPAL_SCHEMADer Name des Schemas, das das Objekt für den Prinzipal enthält. Wenn der Prinzipal zum Beispiel eine Aufgabe ist, ist der Wert dieser Eigenschaft der Name des Schemas, das die Aufgabe enthält.
Wenn der Prinzipal ein Objekt auf Kontoebene ist (z. B. ein Benutzender), ist der Wert dieser Eigenschaft NULL.
IDDer Bezeichner der Sitzung, in der die Funktion aufgerufen wurde.
ROLEDie Primärrolle für die Sitzung, in der die Funktion aufgerufen wurde.
ROLE_TYPEDer Typ der Primärrolle. Diese Eigenschaft kann einen der folgenden Werte haben:
ROLE, wenn die Primärrolle eine Kontorolle ist.
ROLE_DATABASEDer Name der Datenbank, die die Datenbankrolle enthält, wenn die Rolle eine Datenbankrolle ist.
SECONDARY_ROLESJSON-Array der Rollen auf Kontoebene, die als Sekundärrollen in der Sitzung aktiviert sind. Zu den aktivierten Rollen gehören Rollen, die hierarchisch unter der angeforderten Rolle stehen. Angenommen, der Benutzende hat Folgendes ausgeführt:
USE SECONDARY ROLES ACCOUNTADMIN;
Das JSON-Array für diese Eigenschaft enthält die ACCOUNTADMIN-Rolle und die SECURITYADMIN-, SYSADMIN- und USERADMIN-Rollen, die sich unter der ACCOUNTADMIN-Rolle befinden.
WANTED_SECONDARY_ROLESJSON-Array der vom Benutzenden angeforderten Kontorollen. Angenommen, der Benutzende hat Folgendes ausgeführt:
USE SECONDARY ROLES ACCOUNTADMIN;
Das JSON-Array für diese Eigenschaft enthält nur die ACCOUNTADMIN-Rolle.
DATABASEDie aktuelle Datenbank, die für die Sitzung verwendet wird, wenn die Rolle, die die Funktion aufgerufen hat, über Berechtigungen für den Zugriff auf die Datenbank verfügt.
SCHEMADas aktuelle Schema, das für die Sitzung verwendet wird, wenn die Rolle, die die Funktion aufgerufen hat, über Berechtigungen zum Zugriff auf das Schema verfügt.
SCHEMASDer aktuelle Suchpfad von Schemas für die Sitzung, wenn die Rolle, die die Funktion aufgerufen hat, über Berechtigungen zum Zugriff auf die aktuelle Datenbank verfügt.
WAREHOUSEDas aktuelle Warehouse, das für die Sitzung verwendet wird.
'function'Name der Funktion, die Sie aufrufen möchten. Sie können die folgenden Funktionen aufrufen:
'argument' [ , ... ]Argumente, die an die Funktion übergeben werden, die Sie aufrufen möchten.
Rückgabewerte¶
Die Funktion gibt einen VARCHAR-Wert oder NULL zurück:
Der Rückgabewert hängt von der Eigenschaft ab, die Sie abrufen, oder von der Funktion, die Sie aufrufen.
Wenn Sie SYS_CONTEXT mit dem SNOWFLAKE$SESSION-Namespace außerhalb von jeglichem unterstützten Kontext aufrufen, gibt die Funktion NULL zurück.
Nutzungshinweise¶
Wenn Sie den Funktionsaufruf in einer Zeichenfolge in doppelten Anführungszeichen angeben, versehen Sie das
$-Zeichen mit einem Backslash (\), als Escapezeichen, damit$SESSIONnicht als Shell-Variable interpretiert wird.Wenn Sie beispielsweise Snowflake CLI verwenden und die SQL-Anweisung als Befehlszeilenargument in doppelten Anführungszeichen angeben:
snow sql --query "SELECT SYS_CONTEXT('SNOWFLAKE\$SESSION', 'PRINCIPAL_NAME');"
Beispiele¶
Die folgenden Beispiele zeigen, wie Kontextinformationen über die Sitzung abrufen werden:
Abrufen von Informationen über den Prinzipal¶
Das folgende Beispiel gibt den Namen und den Typ des Prinzipals zurück, der die Funktion aufgerufen hat:
SELECT SYS_CONTEXT('SNOWFLAKE$SESSION', 'PRINCIPAL_NAME') AS name,
SYS_CONTEXT('SNOWFLAKE$SESSION', 'PRINCIPAL_TYPE') AS type,
SYS_CONTEXT('SNOWFLAKE$SESSION', 'PRINCIPAL_EMAIL') AS email;
+--------------+-------------+---------------------+
| NAME | TYPE | EMAIL |
|--------------+-------------+---------------------|
| MY_USER_NAME | USER_PERSON | my.user@example.com |
+--------------+-------------+---------------------+
Abrufen von Informationen zu Rollen¶
Das folgende Beispiel gibt den Namen und den Typ der Primärrolle in der Sitzung zurück, in der die Funktion aufgerufen wurde:
SELECT SYS_CONTEXT('SNOWFLAKE$SESSION', 'ROLE') AS role,
SYS_CONTEXT('SNOWFLAKE$SESSION', 'ROLE_TYPE') AS type;
+---------+------+
| ROLE | TYPE |
|---------+------|
| MY_ROLE | ROLE |
+---------+------+
Im folgenden Beispiel wird die ACCOUNTADMIN-Rolle als Sekundärrolle verwendet. Das Beispiel gibt dann die Liste der angefragten Sekundärrollen in der Sitzung (ACCOUNTADMIN) und die Liste der Rollen auf Kontoebene zurück, die als Sekundärrollen in der Sitzung aktiviert sind.
Die Liste der aktivierten Rollen enthält Rollen, die hierarchisch unter der angeforderten Rolle liegen. Weil die ACCOUTADMIN-Rolle aktiviert ist, enthält die Liste SECURITYADMIN, SYSADMIN und USERADMIN, die sich unter der ACCOUNTADMIN-Rolle befinden.
USE SECONDARY ROLES ACCOUNTADMIN;
SELECT SYS_CONTEXT('SNOWFLAKE$SESSION', 'WANTED_SECONDARY_ROLES') AS requested_roles,
SYS_CONTEXT('SNOWFLAKE$SESSION', 'SECONDARY_ROLES') AS requested_roles_with_child_roles;
+------------------+---------------------------------------------------------+
| REQUESTED_ROLES | REQUESTED_ROLES_WITH_CHILD_ROLES |
|------------------+---------------------------------------------------------|
| ["ACCOUNTADMIN"] | ["ACCOUNTADMIN","SECURITYADMIN","SYSADMIN","USERADMIN"] |
+------------------+---------------------------------------------------------+
Abrufen der aktuellen Datenbank, des Schemas, des Suchpfads und des Warehouse¶
Das folgende Beispiel gibt die aktuelle Datenbank, das aktuelle Schema und das aktuelle Warehouse zurück, die für die Sitzung verwendet werden:
SELECT SYS_CONTEXT('SNOWFLAKE$SESSION', 'DATABASE') AS database,
SYS_CONTEXT('SNOWFLAKE$SESSION', 'SCHEMA') AS schema,
SYS_CONTEXT('SNOWFLAKE$SESSION', 'WAREHOUSE') AS warehouse;
+----------+--------+--------------+
| DATABASE | SCHEMA | WAREHOUSE |
|----------+--------+--------------|
| MY_DB | PUBLIC | MY_WAREHOUSE |
+----------+--------+--------------+
Das folgende Beispiel gibt ein JSON-Array zurück, das den Suchpfad für die Sitzung enthält:
SELECT SYS_CONTEXT('SNOWFLAKE$SESSION', 'SCHEMAS');
+---------------------------------------------+
| SYS_CONTEXT('SNOWFLAKE$SESSION', 'SCHEMAS') |
|---------------------------------------------|
| ["MY_DB.MY_SCHEMA","MY_DB.PUBLIC"] |
+---------------------------------------------+
Das folgende Beispiel gibt eine Zeile für jedes Element im Suchpfad zurück:
SELECT value::VARCHAR AS path_element
FROM TABLE(
FLATTEN(INPUT => PARSE_JSON(SYS_CONTEXT('SNOWFLAKE$SESSION', 'SCHEMAS'))));
+-----------------------+
| PATH_ELEMENT |
|-----------------------|
| BOOKS_DB.BOOKS_SCHEMA |
| BOOKS_DB.PUBLIC |
+-----------------------+