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>'
)
Copy

Syntax für den Aufruf von Funktionen:

SYS_CONTEXT(
  'SNOWFLAKE$SESSION' ,
  '<function>' , '<argument>' [ , ... ]
)
Copy

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_NAME

Name 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_TYPE einer der folgenden Werte ist, ist der Wert der PRINCIPAL_NAME-Eigenschaft der Name des Benutzenden:

    • USER

    • USER_PERSON

    • USER_SERVICE

    • USER_LEGACY_SERVICE

  • Wenn für PRINCIPAL_TYPE der Wert TASK angegeben ist, ist der Wert der Name der Aufgabe.

  • Wenn für PRINCIPAL_TYPE der Wert SNOWSERVICE angegeben ist, ist der Wert der Name des SPCS-Dienstes.

PRINCIPAL_TYPE

Typ des Prinzipals, der die Sitzung gestartet hat. Diese Eigenschaft kann einen der folgenden Werte haben:

  • USER oder USER_suffix, wenn ein Benutzender die Sitzung gestartet hat. suffix hängt vom Typ des Benutzenden ab:

    • Wenn das Benutzerobjekt keine TYPE-Eigenschaft hat, lautet der Wert USER.

    • Wenn die TYPE-Eigenschaft auf PERSON gesetzt ist, lautet der Wert USER_PERSON.

    • Wenn die TYPE-Eigenschaft auf SERVICE gesetzt ist, lautet der Wert USER_SERVICE.

    • Wenn die TYPE-Eigenschaft auf LEGACY_SERVICE gesetzt ist, lautet der Wert USER_LEGACY_SERVICE.

  • TASK, wenn eine Aufgabe die Sitzung gestartet hat.

  • SNOWSERVICE, wenn ein SPCS Dienst die Sitzung gestartet hat.

PRINCIPAL_EMAIL

Die E-Mail-Adresse, die mit dem Prinzipal verbunden ist. Wenn keine E-Mail-Adresse zugeordnet ist, ist der Wert dieser Eigenschaft NULL.

PRINCIPAL_DATABASE

Der 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_SCHEMA

Der 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.

ID

Der Bezeichner der Sitzung, in der die Funktion aufgerufen wurde.

ROLE

Die Primärrolle für die Sitzung, in der die Funktion aufgerufen wurde.

ROLE_TYPE

Der Typ der Primärrolle. Diese Eigenschaft kann einen der folgenden Werte haben:

  • ROLE, wenn die Primärrolle eine Kontorolle ist.

ROLE_DATABASE

Der Name der Datenbank, die die Datenbankrolle enthält, wenn die Rolle eine Datenbankrolle ist.

SECONDARY_ROLES

JSON-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;
Copy

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_ROLES

JSON-Array der vom Benutzenden angeforderten Kontorollen. Angenommen, der Benutzende hat Folgendes ausgeführt:

USE SECONDARY ROLES ACCOUNTADMIN;
Copy

Das JSON-Array für diese Eigenschaft enthält nur die ACCOUNTADMIN-Rolle.

DATABASE

Die 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.

SCHEMA

Das 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.

SCHEMAS

Der 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.

WAREHOUSE

Das 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:

Nutzungshinweise

  • Wenn Sie den Funktionsaufruf in einer Zeichenfolge in doppelten Anführungszeichen angeben, versehen Sie das $-Zeichen mit einem Backslash (\), als Escapezeichen, damit $SESSION nicht 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');"
    
    Copy

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;
Copy
+--------------+-------------+---------------------+
| 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;
Copy
+---------+------+
| 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;
Copy
+------------------+---------------------------------------------------------+
| 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;
Copy
+----------+--------+--------------+
| 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');
Copy
+---------------------------------------------+
| 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'))));
Copy
+-----------------------+
| PATH_ELEMENT          |
|-----------------------|
| BOOKS_DB.BOOKS_SCHEMA |
| BOOKS_DB.PUBLIC       |
+-----------------------+