Einführung in SQL-UDFs

Unter diesem Thema werden Konzepte und Nutzungsdetails behandelt, die für SQL-UDFs (benutzerdefinierte Funktionen) spezifisch sind.

Eine Einführung in UDFs und Informationen zu allen Arten von UDFs finden Sie unter Übersicht zu UDFs.

Unter diesem Thema:

Allgemeine Nutzung

Eine SQL-UDF wertet einen beliebigen SQL-Ausdruck aus und gibt die Ergebnisse des Ausdrucks zurück.

Die Funktionsdefinition kann ein SQL-Ausdruck sein, der entweder einen skalaren (d. h. einen einzelnen) Wert oder, wenn als Tabellenfunktion definiert, einen Satz von Zeilen zurückgibt.

Sicherheits-/Berechtigungsanforderungen für SQL-UDFs

Wenn sich eine Funktionsdefinition auf eine nicht qualifizierte Tabelle bezieht, wird diese Tabelle in dem Schema aufgelöst, das die Funktion enthält. Ein Verweis auf ein anderes Schemaobjekt (z. B. Tabelle, Ansicht oder andere Funktion) erfordert, dass der Eigentümer der Funktion über Berechtigungen zum Zugriff auf dieses Schemaobjekt verfügt. Der Aufrufer der Funktion muss keinen Zugriff auf die Objekte haben, auf die in der Funktionsdefinition verwiesen wird, sondern nur die Berechtigung zur Verwendung der Funktion.

Ein Administrator besitzt beispielsweise eine Tabelle mit dem Namen users, die vertrauliche Daten enthält, auf die allgemein nicht zugegriffen werden kann. Der Administrator kann jedoch die Gesamtzahl der Benutzer über eine Funktion verfügbar machen, für die andere Benutzer Zugriffsrechte haben:

use role dataadmin;

desc table users;

+-----------+--------------+--------+-------+---------+-------------+------------+--------+------------+---------+
| name      | type         | kind   | null? | default | primary key | unique key | check  | expression | comment |
|-----------+--------------+--------+-------+---------+-------------+------------+--------+------------+---------|
| USER_ID   | NUMBER(38,0) | COLUMN | Y     | [NULL]  | N           | N          | [NULL] | [NULL]     | [NULL]  |
| USER_NAME | VARCHAR(100) | COLUMN | Y     | [NULL]  | N           | N          | [NULL] | [NULL]     | [NULL]  |
  ...
  ...
  ...
+-----------+--------------+--------+-------+---------+-------------+------------+--------+------------+---------+

create function total_user_count() returns number as 'select count(*) from users';

grant usage on function total_user_count() to role analyst;

use role analyst;

-- This will fail because the role named "analyst" does not have the
-- privileges required in order to access the table named "users".
select * from users;

FAILURE: SQL compilation error:
Object 'USERS' does not exist.

-- However, this will succeed.
select total_user_count();

+--------------------+
| TOTAL_USER_COUNT() |
|--------------------+
| 123                |
+--------------------+

Weitere Informationen zur Verwendung von Rollen und Berechtigungen zum Verwalten der Zugriffssteuerung finden Sie unter Zugriffssteuerung in Snowflake.