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 Introdução ao Secure Data Sharing e Como trabalhar com 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> }
      | 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 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. 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.

  • 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.

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