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