- Kategorien:
Kontextfunktionen (Allgemein)
IS_DATABASE_ROLE_ACTIVATED (SYS_CONTEXT-Funktion)¶
Gibt den VARCHAR-Wert 'TRUE' zurück, wenn eine Datenbankrolle in der aktuellen Sitzung aktiviert ist.
Syntax¶
SYS_CONTEXT(
'SNOWFLAKE$SESSION' ,
'IS_DATABASE_ROLE_ACTIVATED' ,
'<database_role>'
)
Argumente¶
'SNOWFLAKE$SESSION'Gibt an, dass Sie eine Funktion aufrufen möchten, um Kontextinformationen über die aktuelle Sitzung zurückzugeben.
'IS_DATABASE_ROLE_ACTIVATED'Ruft die IS_DATABASE_ROLE_ACTIVATED-Funktion auf.
'database_role'Gibt die zu prüfende Datenbankrolle an. Der Name kann vollqualifiziert oder relativ sein.
Rückgabewerte¶
Die Funktion gibt einen der folgenden VARCHAR-Werte zurück:
'TRUE', wenn die Primärrolle oder die Sekundärrollen des aktuellen Benutzenden der Sitzung die Berechtigungen der angegebenen Datenbankrolle erben.'FALSE', wenn die angegebene Datenbankrolle nicht in der Hierarchie der aktiven Rolle des Benutzenden enthalten ist oder wenn die Datenbankrolle nicht existiert.
Zum Vergleich dieses Rückgabewerts mit dem BOOLEAN-Wert TRUE oder FALSE müssen Sie den Rückgabewert in BOOLEAN umwandeln. Beispiel:
SELECT SYS_CONTEXT('SNOWFLAKE$SESSION', 'IS_DATABASE_ROLE_ACTIVATED', 'my_db_role')::BOOLEAN = TRUE;
Nutzungshinweise¶
Diese Funktion wird in Governance-Richtlinien (wie Maskierungsrichtlinien, Zeilenzugriffsrichtlinien oder Projektionsrichtlinien), die auf freigegebene Tabellen angewendet werden, nicht unterstützt. Freigegebene Objekte können nicht auf den Sitzungsstatus von Verbrauchenden zugreifen.
Wenn Sie keinen vollqualifizierten Namen angeben, löst die Funktion den Datenbankkontext der Datenbankrolle wie folgt auf:
Abfragen: Sitzungsdatenbank (die aktuell verwendete Datenbank).
Textkörper/Body einer Datenschutzrichtlinie: Datenbank, die die geschützte Tabelle oder Ansicht enthält.
Freigabe: Datenbank im Konto des Verbrauchenden.
Diese Funktion kann nicht in Definitionen für materialisierte Ansichten verwendet werden, da die Funktion nicht deterministisch ist.
Beispiele¶
Überprüfen einer Datenbankrolle in der aktuellen Datenbank anhand eines relativen Namens:
SELECT SYS_CONTEXT('SNOWFLAKE$SESSION', 'IS_DATABASE_ROLE_ACTIVATED', 'ANALYST_ROLE');
+-------------------------------------------------------------------------+
| SYS_CONTEXT('SNOWFLAKE$SESSION', 'IS_DATABASE_ROLE_ACTIVATED', 'ANA... |
+-------------------------------------------------------------------------+
| TRUE |
+-------------------------------------------------------------------------+
Überprüfen einer Datenbankrolle in einer anderen Datenbank mit einem vollqualifizierten Namen:
SELECT SYS_CONTEXT('SNOWFLAKE$SESSION', 'IS_DATABASE_ROLE_ACTIVATED', 'DB2.READER_ROLE');
+-------------------------------------------------------------------------+
| SYS_CONTEXT('SNOWFLAKE$SESSION', 'IS_DATABASE_ROLE_ACTIVATED', 'DB ... |
+-------------------------------------------------------------------------+
| TRUE |
+-------------------------------------------------------------------------+