GRANT <Berechtigung> … TO SHARE¶
Erteilt einer Freigabe Zugriffsrechte auf Datenbanken und andere unterstützte Datenbankobjekte (Schemas, UDFs, Tabellen und Ansichten). Durch Erteilen von Objektberechtigungen werden diese Objekte effektiv der Freigabe hinzugefügt, die dann für Verbraucherkonten freigegeben werden kann.
Weitere Details dazu finden Sie unter Einführung in Secure Data Sharing und Verwenden von Freigaben.
Syntax¶
GRANT objectPrivilege ON
{ DATABASE <name>
| SCHEMA <name>
| FUNCTION <name>
| { TABLE <name> | ALL TABLES IN SCHEMA <schema_name> }
| { ICEBERG TABLE <name> | ALL ICEBERG TABLES IN SCHEMA <schema_name> }
| TAG <name>
| VIEW <name> }
TO SHARE <share_name>
Wobei:
objectPrivilege ::=
-- For DATABASE
REFERENCE_USAGE [ , ... ]
-- For DATABASE, FUNCTION, or SCHEMA
USAGE [ , ... ]
-- For TABLE
EVOLVE SCHEMA [ , ... ]
-- For ICEBERG TABLE, TABLE, or VIEW
SELECT [ , ... ]
-- For TAG
READ
Parameter¶
name
Gibt den Bezeichner für das Objekt an, für das die angegebene Berechtigung erteilt wird.
schema_name
Gibt den Bezeichner des Schemas an, in dem allen Tabellen die angegebene Berechtigung erteilt wird.
share_name
Gibt den Bezeichner der Freigabe an, von der aus die angegebene Berechtigung erteilt wird.
Nutzungshinweise¶
Einer Freigabe kann die USAGE-Berechtigung für nur eine einzige Datenbank erteilt werden. Innerhalb dieser Datenbank können der Freigabe jedoch Berechtigungen für mehrere Schemas, UDFs, Tabellen und Ansichten erteilt werden.
Berechtigungen für einzelne Objekte müssen einer Freigabe in separaten GRANT-Anweisungen erteilt werden. Die einzige Ausnahme ist die SELECT-Berechtigung für Tabellen (einschließlich Iceberg-Tabellen). Mit einer
ALL
-Klausel können Sie einer Freigabe die SELECT-Berechtigung für alle Tabellen in einem bestimmten Schema erteilen.Die SELECT-Berechtigung für Ansichten kann nur sicheren Ansichten erteilt werden. Beim Versuch, einer Freigabe die SELECT-Berechtigung für eine nicht sichere Ansicht zu erteilen, wird ein Fehler zurückgegeben.
Die USAGE-Berechtigung kann nur sicheren UDFs erteilt werden. Beim Versuch, einer Freigabe die USAGE-Berechtigung für eine nicht sichere UDF zu erteilen, wird ein Fehler zurückgegeben.
Derzeit wird die Freigabe einer UDF, die auf ein Objekt in einer anderen Datenbank verweist, nicht unterstützt. Wenn Sie beispielsweise versuchen, einer UDF, die auf eine sichere Ansicht einer anderen Datenbank verweist, die USAGE-Berechtigung zu erteilen, wird ein Fehler zurückgegeben.
Wenn Sie eine sichere Ansicht freigeben, die auf Objekte verweist, die zu mehreren Datenbanken gehören, Verwenden Sie die Berechtigung REFERENCE_USAGE wie folgt:
Die Berechtigung REFERENCE_USAGE muss für jede Datenbank einzeln erteilt werden.
Die Berechtigung REFERENCE_USAGE muss für eine Datenbank erteilt werden, bevor einer Freigabe die SELECT-Berechtigung für eine sichere Ansicht erteilt wird.
Weitere Details dazu finden Sie unter Freigeben von Daten aus mehreren Datenbanken.
Secure Data Sharing: Datenanbieter können neue Objekte nicht automatisch zu einer Freigabe hinzufügen, indem sie zukünftige Berechtigungszuweisungen verwenden. Das heißt, Datenanbieter können einer Freigabe keine Berechtigungen für zukünftige Objekte erteilen, wenn sie GRANT <Berechtigung> … TO SHARE-Anweisungen verwenden.
Sie können Datenbanken oder Datenbankobjekte, die über eine Freigabe erstellt wurden, nicht erneut freigeben. Wenn Sie versuchen, die USAGE-Berechtigung für Datenbanken oder Datenbankobjekte, die von einer Freigabe erstellt wurden, einer anderen Freigabe zu erteilen, wird ein Fehler zurückgegeben.
Wenn Sie ein
TABLE
-Objekt angeben, das eine Iceberg-Tabelle ist, weist der Befehl die Berechtigung für diese Iceberg-Tabelle zu.
Beispiele¶
Dies ist ein Beispiel für das Freigeben von Objekten aus einer einzelnen Datenbank:
GRANT USAGE ON DATABASE mydb TO SHARE share1; GRANT USAGE ON SCHEMA mydb.public TO SHARE share1; GRANT USAGE ON FUNCTION mydb.shared_schema.function1 TO SHARE share1; GRANT USAGE ON FUNCTION mydb.shared_schema.function2 TO SHARE share1; GRANT SELECT ON ALL TABLES IN SCHEMA mydb.public TO SHARE share1; GRANT SELECT ON ALL ICEBERG TABLES IN SCHEMA mydb.public TO SHARE share1; GRANT SELECT ON ALL DYNAMIC TABLES IN SCHEMA mydb.public TO SHARE share1; GRANT USAGE ON SCHEMA mydb.shared_schema TO SHARE share1; GRANT SELECT ON VIEW mydb.shared_schema.view1 TO SHARE share1; GRANT SELECT ON VIEW mydb.shared_schema.view3 TO SHARE share1; GRANT SELECT ON ICEBERG TABLE mydb.shared_schema.iceberg_table_1 TO SHARE share1; GRANT SELECT ON DYNAMIC TABLE mydb.public TO SHARE share1;Copy
Dies ist ein Beispiel für die Freigabe einer sicheren Ansicht, die auf Objekte aus einer anderen Datenbank verweist:
CREATE SECURE VIEW view2 AS SELECT * FROM database2.public.sampletable; GRANT USAGE ON DATABASE database1 TO SHARE share1; GRANT USAGE ON SCHEMA database1.schema1 TO SHARE share1; GRANT REFERENCE_USAGE ON DATABASE database2 TO SHARE share1; GRANT SELECT ON VIEW view2 TO SHARE share1;Copy