GRANT OWNERSHIP

Transfere a propriedade de um objeto ou todos os objetos de um tipo especificado em um esquema de uma função para outra função. Função se refere a uma função ou função de banco de dados.

OWNERSHIP é um tipo especial de privilégio que só pode ser concedido de uma função para outra; ele não pode ser revogado. Para obter mais detalhes, consulte Visão geral do controle de acesso.

Este comando é uma variação de GRANT <privilégios>.

Consulte também:

REVOKE <privilégios>

Sintaxe

-- Role
GRANT OWNERSHIP
   { ON { <object_type> <object_name> | ALL <object_type_plural> IN { DATABASE <db_name> | SCHEMA <schema_name> } }
   | ON FUTURE <object_type_plural> IN { DATABASE <db_name> | SCHEMA <schema_name> }
   }
   TO ROLE <role_name>
   [ { REVOKE | COPY } CURRENT GRANTS ]

-- Database role
GRANT OWNERSHIP
   { ON { <object_type> <object_name> | ALL <object_type_plural> IN { DATABASE <db_name> | SCHEMA <schema_name> } }
   | ON FUTURE <object_type_plural> IN { DATABASE <db_name> | SCHEMA <schema_name> }
   }
   TO DATABASE ROLE <database_role_name>
   [ { REVOKE | COPY } CURRENT GRANTS ]
Copy

Parâmetros obrigatórios

object_name

Especifica o identificador para o objeto no qual você está transferindo a propriedade.

object_type

Especifica o tipo de objeto.

  • AGGREGATION POLICY

  • ALERT

  • AUTHENTICATION POLICY

  • COMPUTE POOL

  • DATABASE

  • DATABASE ROLE

  • DYNAMIC TABLE

  • EVENT TABLE

  • EXTERNAL TABLE

  • EXTERNAL VOLUME

  • FAILOVER GROUP

  • FILE FORMAT

  • FUNCTION

  • HYBRID TABLE

  • ICEBERG TABLE

  • IMAGE REPOSITORY

  • INTEGRATION

  • MATERIALIZED VIEW

  • NETWORK POLICY

  • NETWORK RULE

  • PACKAGES POLICY

  • PIPE

  • PROCEDURE

  • MASKING POLICY

  • PASSWORD POLICY

  • PROJECTION POLICY

  • REPLICATION GROUP

  • ROLE

  • ROW ACCESS POLICY

  • SCHEMA

  • SESSION POLICY

  • SECRET

  • SEQUENCE

  • STAGE

  • STREAM

  • TABLE

  • TAG

  • TASK

  • USER

  • VIEW

  • WAREHOUSE

object_type_plural

Forma plural de object_type (por exemplo, TABLES, VIEWS).

Observe que não são permitidas concessões em massa em canais.

role_name

O identificador para a função para a qual a propriedade do objeto é transferida.

database_role_name

O identificador para a função de banco de dados para a qual a propriedade do objeto é transferida. Se o identificador não estiver totalmente qualificado (na forma de db_name.database_role_name), o comando procura a função do banco de dados no banco de dados atual para a sessão.

A propriedade é limitada a objetos no banco de dados que contenham a função de banco de dados.

Parâmetros opcionais

[ REVOKE | COPY ] CURRENT GRANTS

Especifica se devem ser removidos ou transferidos todos os privilégios de saída existentes no objeto quando a propriedade é transferida para uma nova função:

Nota

Os privilégios de saída referem-se a quaisquer privilégios concedidos sobre o objeto individual cuja propriedade está mudando.

Ao transferir a propriedade de uma função, as concessões atuais se referem a quaisquer funções que foram concedidas à função atual (para criar uma hierarquia de funções). Se a propriedade de uma função for transferida com as concessões atuais copiadas, então a saída do comando SHOW GRANTS mostra o novo proprietário como o concedente de qualquer função secundária para a função atual.

REVOKE

Impõe a semântica RESTRICT, que exige a remoção de todos os privilégios de saída em um objeto antes de transferir a propriedade para uma nova função. Isto se destina a proteger a nova função de proprietário de herdar inconscientemente o objeto com privilégios já concedidos sobre ele.

Após a transferência de propriedade, os privilégios para o objeto devem ser explicitamente revalidados na função.

Observe que a palavra-chave REVOKE não funciona ao conceder a propriedade de objetos futuros de um tipo especificado em um banco de dados ou esquema a uma função (usando GRANT OWNERSHIP ON FUTURE <tipo_objeto>).

COPY

Transfere a propriedade de um objeto junto com uma cópia de quaisquer privilégios de saída existentes sobre o objeto. Após a transferência, o novo proprietário é identificado no sistema como o concedente dos privilégios de saída copiados (ou seja, na saída SHOW GRANTS para o objeto, o novo proprietário é listado na coluna GRANTED_BY para todos os privilégios). Como resultado, quaisquer privilégios que foram posteriormente revalidados antes da mudança de propriedade não dependem mais da função original do cedente.

A revogação de um privilégio usando REVOKE <privilégios> com a opção CASCADE não revoga de forma recorrente estas concessões anteriormente dependentes. As concessões devem ser explicitamente revogadas.

Este parâmetro exige que a função que executa o comando GRANT OWNERSHIP tenha o privilégio MANAGE GRANTS sobre a conta.

Padrão: nenhum. Nenhuma operação é executada em qualquer um dos privilégios de saída existentes.

Nota

Uma instrução GRANT OWNERSHIP falha se os privilégios de saída existentes no objeto não forem revogados ou copiados.

Notas de uso

  • Você não pode transferir o privilégio OWNERSHIP para os seguintes objetos:

    • APPLICATION ROLE

    • CONNECTION

      Apenas a função ACCOUNTADMIN pode ter o privilégio OWNERSHIP em um objeto de conexão.

    • SERVICE

    • SHARE

  • Uma função que tem o privilégio MANAGE GRANTS pode transferir a propriedade de um objeto para qualquer função; por outro lado, uma função que não tem o privilégio MANAGE GRANTS só pode transferir a propriedade de si mesma para uma função secundária dentro da hierarquia de funções.

  • A instrução GRANT OWNERSHIP é bloqueada se existirem privilégios de saída (isto é, dependentes) no objeto. O proprietário do objeto (ou uma função superior) pode copiar explicitamente todos os privilégios atuais para a nova função de proprietário (usando a opção COPY CURRENT GRANTS) ou revogar todos os privilégios de saída no objeto antes de transferir a propriedade (usando a opção REVOKE CURRENT GRANTS).

    Snowflake impede o comando GRANT OWNERSHIP … REVOKE CURRENT GRANTS em um banco de dados compartilhado. Para obter detalhes, consulte o exemplo de banco de dados compartilhado neste tópico.

  • A transferência de propriedade afeta apenas objetos existentes no momento em que o comando é emitido. Quaisquer objetos criados após a emissão do comando são de propriedade da função em uso quando o objeto é criado.

  • A transferência de propriedade de objetos dos seguintes tipos é bloqueada, a menos que condições adicionais sejam cumpridas:

    Canais:

    O canal deve ser pausado.

    Tarefas:

    A tarefa programada (por exemplo, a tarefa isolada ou a tarefa raiz em uma árvore) deve ser suspensa. Observe que todas as tarefas no contêiner são suspensas automaticamente se todas as tarefas em um banco de dados ou esquema especificado forem transferidas para outra função. As tarefas transferidas para a mesma função usando a opção COPY CURRENT GRANTS também são suspensas automaticamente.

  • Quando as concessões futuras são definidas no mesmo tipo de objeto no nível de banco de dados e esquema, as concessões no nível do esquema têm precedência sobre as concessões no nível do banco de dados, e as concessões no nível do banco de dados são ignoradas.

  • Para conceder a propriedade em uma exibição materializada, use GRANT OWNERSHIP ON VIEW.... Não há nenhuma instrução GRANT OWNERSHIP ON MATERIALIZED VIEW separada.

  • Você não pode transferir o privilégio OWNERSHIP em um compartilhamento, nem você pode transferir o privilégio OWNERSHIP em uma conexão. Apenas a função ACCOUNTADMIN pode possuir a conexão.

  • Para conceder o privilégio OWNERSHIP em tabelas dinâmicas, certifique-se de que a função receptora tenha o privilégio USAGE no banco de dados e no esquema que contém a tabela dinâmica e no warehouse usado para atualizar a tabela. Caso contrário, as atualizações agendadas subsequentes falharão.

  • Para conceder o privilégio OWNERSHIP em tabelas dinâmicas futuras:

    • Se a tabela dinâmica estiver configurada para inicializar na criação (ou seja, INITIALIZE = ON_CREATE), certifique-se de que a nova função tenha privilégios suficientes nos objetos referenciados. Caso contrário, a atualização inicial falhará e resultará em um erro informando que o objeto não pode ser encontrado.

    • Se a tabela dinâmica estiver configurada para inicializar dentro do cronograma (ou seja, INITIALIZE = ON_SCHEDULE), certifique-se de que a nova função tenha privilégios suficientes nos objetos referenciados. Caso contrário, as atualizações agendadas subsequentes falharão.

  • Funções de banco de dados:

    A propriedade só pode ser transferida em objetos do mesmo banco de dados que a função de banco de dados.

  • A transferência de propriedade em uma tabela externa ou em seu banco de dados pai bloqueia atualizações automáticas dos metadados da tabela definindo a propriedade AUTO_REFRESH como FALSE. Para redefinir a propriedade após transferir a propriedade, use o comando ALTER EXTERNAL TABLE.

Exemplos

Funções

Revogar todos os privilégios de saída no banco de dados mydb, atualmente de propriedade da função manager, antes de transferir a propriedade para a função analyst:

REVOKE ALL PRIVILEGES ON DATABASE mydb FROM ROLE manager;

GRANT OWNERSHIP ON DATABASE mydb TO ROLE analyst;

GRANT ALL PRIVILEGES ON DATABASE mydb TO ROLE analyst;
Copy

Observe que este exemplo ilustra o processo padrão (e recomendado) de transferência de propriedade em várias etapas.

Em uma única etapa, revogar todos os privilégios das tabelas existentes no esquema mydb.public e transferir a propriedade das tabelas (juntamente com uma cópia de seus privilégios atuais) para a função analyst:

GRANT OWNERSHIP ON ALL TABLES IN SCHEMA mydb.public TO ROLE analyst COPY CURRENT GRANTS;
Copy

Conceder a propriedade na tabela mydb.public.mytable à função analyst junto com uma cópia de todos os privilégios de saída atuais na tabela:

GRANT OWNERSHIP ON TABLE mydb.public.mytable TO ROLE analyst COPY CURRENT GRANTS;
Copy

Funções de banco de dados

Em uma única etapa, revogar todos os privilégios das tabelas existentes no esquema mydb.public e transferir a propriedade das tabelas (juntamente com uma cópia de seus privilégios atuais) para a mydb.dr1 função do banco de dados:

GRANT OWNERSHIP ON ALL TABLES IN SCHEMA mydb.public
  TO DATABASE ROLE mydb.dr1
  COPY CURRENT GRANTS;
Copy

Conceder a propriedade na tabela mydb.public.mytable à função de banco de dados mydb.dr1 junto com uma cópia de todos os privilégios de saída atuais na tabela:

GRANT OWNERSHIP ON TABLE mydb.public.mytable
  TO ROLE mydb.dr1
  COPY CURRENT GRANTS;
Copy

Banco de dados compartilhado

Para transferir o privilégio OWNERSHIP em um banco de dados compartilhado, use estes comandos:

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

Se necessário, conceda novamente o banco de dados ao compartilhamento usando um comando GRANT <privilégio> … TO SHARE.