GRANT <privilege> ...TO SHARE

向共享授予对数据库和其他支持的数据库对象(架构、UDFs、表和视图)的访问权限。授予对这些对象的权限可以有效地将对象添加到共享中,随后可与一个或多个使用者账户共享。

有关更多详细信息,请参阅 Secure Data Sharing 简介使用共享

另请参阅:

REVOKE <privilege> ...FROM SHARE

GRANT <privileges>

语法

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

其中:

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
Copy

参数

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
语言: 中文