GRANT <privilege> ...TO SHARE¶
向共享授予对数据库和其他支持的数据库对象(架构、UDFs、表和视图)的访问权限。授予对这些对象的权限可以有效地将对象添加到共享中,随后可与一个或多个使用者账户共享。
有关更多详细信息,请参阅 Secure Data Sharing 简介 和 使用共享。
语法¶
GRANT objectPrivilege ON
{ DATABASE <name>
| SCHEMA <name>
| FUNCTION <name>
| { TABLE <name> | ALL TABLES IN SCHEMA <schema_name> }
| { EXTERNAL TABLE <name> | ALL EXTERNAL TABLES IN SCHEMA <schema_name> }
| { ICEBERG TABLE <name> | ALL ICEBERG TABLES IN SCHEMA <schema_name> }
| { DYNAMIC TABLE <name> | ALL DYNAMIC TABLES IN SCHEMA <schema_name> }
| TAG <name>
| VIEW <name> }
TO SHARE <share_name>
其中:
objectPrivilege ::=
-- For DATABASE
REFERENCE_USAGE [ , ... ]
-- For DATABASE, FUNCTION, or SCHEMA
USAGE [ , ... ]
-- For TABLE
EVOLVE SCHEMA [ , ... ]
-- For EXTERNAL TABLE, ICEBERG TABLE, TABLE, or VIEW
SELECT [ , ... ]
-- For TAG
READ
参数¶
name
指定要被授予指定权限的对象的标识符。
schema_name
指定要被授予所有表的指定权限的架构的标识符。
share_name
指定要被授予指定权限的共享的标识符。
使用说明¶
单个数据库的 USAGE 权限只能授予一个共享;但在该数据库中,可以将多个架构、UDFs、表和视图的权限授予该共享。
必须在单独的 GRANT 语句中将单个对象的权限授予共享。唯一的例外是表(包括 Iceberg 表)的 SELECT 权限。使用
ALL
子句,您可以将指定架构中所有表的 SELECT 权限授予一个共享。仅可对安全视图授予对视图的 SELECT 权限。如果尝试向共享授予对非安全视图的 SELECT 权限,则会返回错误。
仅可对安全 UDFs 授予 USAGE 权限。如果尝试向共享授予对非安全 UDF 的 USAGE 权限,则会返回错误。
目前,不支持共享引用另一个数据库中对象的 UDF。例如,如果您尝试授予引用另一个数据库中安全视图的 UDF 的 USAGE 权限,则会返回错误。
共享引用属于多个数据库的对象的安全视图时,请使用 REFERENCE_USAGE 权限,如下所示:
必须在每个数据库上分别授予 REFERENCE_USAGE 权限。
在向共享授予安全视图的 SELECT 权限之前,必须先对数据库授予 REFERENCE_USAGE 权限。
有关更多详细信息,请参阅 共享来自多个数据库的数据。
Secure Data Sharing:数据提供商不能使用未来授权自动将新对象添加到共享中。也就是说,数据提供商不能使用如下语句将未来对象的权限授予共享:GRANT <privilege> ...TO SHARE。
通过共享创建的数据库或数据库对象不能重新共享。如果您尝试将通过共享创建的数据库或数据库对象的 USAGE 权限授予另一个共享,则会返回错误。
如果您指定的
TABLE
对象是 Iceberg 表,则该命令会授予对该 Iceberg 表的权限。
示例¶
以下是从单个数据库共享对象的示例:
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 EXTERNAL 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
以下是共享引用另一个数据库中对象的安全视图的示例:
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