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:
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 ]
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çãoREVOKE 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çãoGRANT 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
comoFALSE
. 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;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;
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;
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;
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;