Comando GRANT OWNERSHIP: transferência de propriedade não permitida para bancos de dados compartilhados

Atenção

Essa mudança de comportamento está no pacote 2023_06.

Para saber o status atual do pacote, consulte Histórico do pacote.

Os comandos GRANT OWNERSHIP e DROP ROLE se comportam da seguinte forma:

Anteriormente

Ao conceder o privilégio USAGE em um banco de dados para um compartilhamento, você pode executar o comando GRANT OWNERSHIP para transferir o privilégio OWNERSHIP no banco de dados para uma função diferente. Por exemplo:

GRANT USAGE ON DATABASE mydb TO SHARE myshare;
GRANT OWNERSHIP ON DATABASE mydb TO ROLE r2 REVOKE CURRENT GRANTS;
Copy

Além disso, você pode eliminar a função que tem o privilégio OWNERSHIP no banco de dados compartilhado:

DROP ROLE r2;
Copy
Atualmente

Você pode transferir a propriedade do banco de dados compartilhado para uma função diferente e usar a cláusula COPY CURRENT GRANTS, mas não pode transferir a propriedade do banco de dados compartilhado para uma função diferente e usar a cláusula REVOKE CURRENT GRANTS. Se você tentar fazer isso, o Snowflake retornará a seguinte mensagem de erro:

Cannot transfer ownership on a database that is granted to a share

Para evitar essa mensagem de erro e transferir o privilégio OWNERSHIP para uma função diferente, revogue o privilégio USAGE no banco de dados do compartilhamento, transfira o privilégio OWNERSHIP no banco de dados para uma função diferente e conceda o privilégio USAGE no banco de dados para o compartilhamento. Por exemplo:

REVOKE USAGE ON DATABASE mydb FROM SHARE myshare;
GRANT OWNERSHIP ON DATABASE mydb TO ROLE r2;
GRANT USAGE ON DATABASE mydb TO SHARE r2;
Copy

Além disso, se você tentar eliminar a função que tem o privilégio OWNERSHIP no banco de dados compartilhado, o Snowflake retornará a seguinte mensagem de erro com instruções sobre as medidas a serem tomadas:

Cannot drop a role that is the owner of one or more shared databases. Run 'SHOW GRANTS TO ROLE <role_name>' to find these shared
databases and transfer their ownership to appropriate role using 'GRANT OWNERSHIP ON DATABASE <database_name> TO ROLE
<target_role_name> COPY CURRENT GRANTS'.

Ref: 1181