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:
Sintaxe¶
GRANT objectPrivilege ON
{ DATABASE <name>
| SCHEMA <name>
| FUNCTION <name>
| { TABLE <name> | ALL TABLES IN SCHEMA <schema_name> }
| { ICEBERG TABLE <name> | ALL ICEBERG 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 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 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 a partir de diversos 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 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