GRANT <privilégio> … TO SHARE

Concede a um compartilhamento privilégios de acesso a bancos de dados e outros objetos de banco de dados compatíveis (esquemas, UDFs, tabelas e exibições). A concessão de privilégios nesses objetos efetivamente adicione os objetos ao compartilhamento, que podem então ser compartilhados com uma ou mais contas de consumidores.

Para obter mais detalhes, consulte Sobre o Secure Data Sharing e Criação e configuração de compartilhamentos.

Consulte também:

REVOKE <privilégio> … FROM SHARE

GRANT <privilégios>

Sintaxe

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

Onde:

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

Parâmetros

name

Especifica o identificador do objeto para o qual o privilégio especificado é concedido.

schema_name

Especifica o identificador do esquema para o qual o privilégio especificado é concedido para todas as tabelas.

share_name

Especifica o identificador do compartilhamento do qual o privilégio especificado é concedido.

Notas de uso

  • O privilégio USAGE em um único banco de dados pode ser concedido a um compartilhamento; entretanto, dentro desse banco de dados, privilégios em múltiplos esquemas, UDFs, tabelas e exibições podem ser concedidos ao compartilhamento.

  • Os privilégios sobre objetos individuais devem ser concedidos a um compartilhamento em instruções GRANT separadas. A única exceção é o privilégio SELECT em tabelas (incluindo tabelas Apache Iceberg™). Usando uma cláusula ALL, você pode conceder SELECT em todas as tabelas em um esquema especificado para um compartilhamento.

  • O privilégio SELECT em exibições só pode ser concedido em exibições seguras. Tentativa de conceder o privilégio SELECT de uma exibição não segura a um compartilhamento retorna um erro.

  • O privilégio USAGE só pode ser concedido em UDFs seguros. Tentativa de conceder o privilégio USAGE em um UDF não seguro para um compartilhamento retorna um erro.

  • Atualmente, compartilhar um UDF que faz referência a um objeto de outro banco de dados não é suportado. Por exemplo, se você tentar conceder USAGE em um UDF que faz referência a uma exibição segura de outro banco de dados, um erro é retornado.

  • Use o privilégio REFERENCE_USAGE ao compartilhar uma exibição segura que faz referência a objetos pertencentes a múltiplos bancos de dados, como a seguir:

    • O privilégio REFERENCE_USAGE deve ser concedido individualmente em cada banco de dados.

    • O privilégio REFERENCE_USAGE deve ser concedido em um banco de dados antes de conceder o privilégio SELECT em uma exibição segura a um compartilhamento.

    Para obter mais detalhes, consulte Compartilhamento de dados de vários bancos de dados.

  • Secure Data Sharing: provedores de dados não podem adicionar novos objetos a um compartilhamento automaticamente usando concessões futuras. Ou seja, provedores de dados não podem conceder privilégios sobre objetos futuros a um compartilhamento usando instruções GRANT <privilege> … TO SHARE.

  • Você não pode compartilhar novamente um banco de dados ou objetos de banco de dados criados a partir de um compartilhamento. Se você tentar conceder o privilégio USAGE em um banco de dados ou objetos de banco de dados criados a partir de um compartilhamento para um compartilhamento diferente, um erro será retornado.

  • Se você especificar um objeto TABLE que seja uma tabela Iceberg, o comando concederá o privilégio nessa tabela Iceberg.

Exemplos

Este é um exemplo de compartilhamento de objetos de um único banco de dados:

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

Este é um exemplo de compartilhamento de uma exibição segura que faz referência a objetos de um banco de dados diferente:

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