REVOKE <privilégios>¶
Remove um ou mais privilégios em um objeto protegível de uma função ou função de banco de dados. Os privilégios que podem ser revogados são específicos do objeto.
- Funções:
Os privilégios que podem ser revogados de funções são agrupados nas seguintes categorias:
Privilégios globais
Privilégios para objetos de conta (monitores de recursos, warehouses virtuais e bancos de dados)
Privilégios para esquemas
Privilégios para objetos de esquema (tabelas, visualizações, estágios, formatos de arquivo, UDFs e sequências)
- Funções de banco de dados:
Os privilégios que podem ser revogados de funções de banco de dados são agrupados nas seguintes categorias:
Privilégios para o banco de dados que contém a função de banco de dados.
Privilégios para esquemas no banco de dados que contém a função de banco de dados.
Privilégios para objetos de esquema (tabelas, exibições, estágios, formatos de arquivo, UDFs e sequências) no banco de dados que contém a função de banco de dados.
- Consulte também:
Sintaxe¶
Funções de conta:
REVOKE [ GRANT OPTION FOR ]
{
{ globalPrivileges | ALL [ PRIVILEGES ] } ON ACCOUNT
| { accountObjectPrivileges | ALL [ PRIVILEGES ] } ON { RESOURCE MONITOR | WAREHOUSE | COMPUTE POOL | DATABASE | INTEGRATION | FAILOVER GROUP | REPLICATION GROUP | EXTERNAL VOLUME } <object_name>
| { schemaPrivileges | ALL [ PRIVILEGES ] } ON { SCHEMA <schema_name> | ALL SCHEMAS IN DATABASE <db_name> }
| { schemaPrivileges | ALL [ PRIVILEGES ] } ON { FUTURE SCHEMAS IN DATABASE <db_name> }
| { schemaObjectPrivileges | ALL [ PRIVILEGES ] } ON { <object_type> <object_name> | ALL <object_type_plural> IN SCHEMA <schema_name> }
| { schemaObjectPrivileges | ALL [ PRIVILEGES ] } ON FUTURE <object_type_plural> IN { DATABASE <db_name> | SCHEMA <schema_name> }
}
FROM [ ROLE ] <role_name> [ RESTRICT | CASCADE ]
Funções de banco de dados:
REVOKE [ GRANT OPTION FOR ]
{
{ CREATE SCHEMA | MODIFY | MONITOR | USAGE } [ , ... ] } ON DATABASE <object_name>
{ globalPrivileges | ALL [ PRIVILEGES ] } ON ACCOUNT
| { accountObjectPrivileges | ALL [ PRIVILEGES ] } ON { RESOURCE MONITOR | WAREHOUSE | COMPUTE POOL | DATABASE | INTEGRATION | EXTERNAL VOLUME } <object_name>
| { schemaPrivileges | ALL [ PRIVILEGES ] } ON { SCHEMA <schema_name> | ALL SCHEMAS IN DATABASE <db_name> }
| { schemaPrivileges | ALL [ PRIVILEGES ] } ON { FUTURE SCHEMAS IN DATABASE <db_name> }
| { schemaObjectPrivileges | ALL [ PRIVILEGES ] } ON { <object_type> <object_name> | ALL <object_type_plural> IN SCHEMA <schema_name> }
| { schemaObjectPrivileges | ALL [ PRIVILEGES ] } ON FUTURE <object_type_plural> IN { DATABASE <db_name> | SCHEMA <schema_name> }
}
FROM DATABASE ROLE <database_role_name> [ RESTRICT | CASCADE ]
Onde:
globalPrivileges ::=
{
CREATE {
ACCOUNT | COMPUTE POOL | DATA EXCHANGE LISTING | DATABASE | FAILOVER GROUP | INTEGRATION
| NETWORK POLICY | EXTERNAL VOLUME | REPLICATION GROUP | ROLE | SHARE
| USER | WAREHOUSE
}
| APPLY { { AGGREGATION | AUTHENTICATION | MASKING | PACKAGES | PASSWORD | PROJECTION | ROW ACCESS | SESSION } POLICY | TAG }
| ATTACH POLICY | AUDIT | BIND SERVICE ENDPOINT
| EXECUTE { ALERT | TASK }
| IMPORT SHARE
| MANAGE { GRANTS | LISTING AUTO FULFILLMENT | WAREHOUSES }
| MODIFY { LOG LEVEL | TRACE LEVEL | SESSION LOG LEVEL | SESSION TRACE LEVEL }
| MONITOR { EXECUTION | SECURITY | USAGE }
| OVERRIDE SHARE RESTRICTIONS | PURCHASE DATA EXCHANGE LISTING | RESOLVE ALL
}
[ , ... ]
accountObjectPrivileges ::=
-- For COMPUTE POOL
{ MODIFY | MONITOR | OPERATE | USAGE } [ , ... ]
-- For DATABASE
{ APPLYBUDGET | CREATE { DATABASE ROLE | SCHEMA } | IMPORTED PRIVILEGES | MODIFY | MONITOR | USAGE } [ , ... ]
-- For EXTERNAL VOLUME
{ USAGE } [ , ... ]
-- For FAILOVER GROUP
{ FAILOVER | MODIFY | MONITOR | REPLICATE } [ , ... ]
-- For INTEGRATION
{ USAGE | USE_ANY_ROLE } [ , ... ]
-- For REPLICATION GROUP
{ MODIFY | MONITOR | REPLICATE } [ , ... ]
-- For RESOURCE MONITOR
{ MODIFY | MONITOR } [ , ... ]
-- For USER
{ MONITOR } [ , ... ]
-- For WAREHOUSE
{ APPLYBUDGET | MODIFY | MONITOR | USAGE | OPERATE } [ , ... ]
schemaPrivileges ::=
ADD SEARCH OPTIMIZATION
| APPLYBUDGET
| CREATE {
ALERT | DYNAMIC TABLE | EXTERNAL TABLE | FILE FORMAT | FUNCTION | HYBRID TABLE | IMAGE REPOSITORY |
| ICEBERG TABLE | MATERIALIZED VIEW | MODEL | NETWORK RULE | PIPE | PROCEDURE
| { AGGREGATION | AUTHENTICATION | MASKING | PACKAGES | PASSWORD | PROJECTION | ROW ACCESS | SESSION } POLICY | SERVICE
| SECRET | SEQUENCE | STAGE | STREAM | STREAMLIT
| SNOWFLAKE.CORE.BUDGET |
| SNOWFLAKE.ML.ANOMALY_DETECTION | SNOWFLAKE.ML.FORECAST
| TAG | TABLE | TASK | VIEW
}
| MODIFY | MONITOR | USAGE
[ , ... ]
schemaObjectPrivileges ::=
-- For ALERT
{ MONITOR | OPERATE } [ , ... ]
-- For DYNAMIC TABLE
MONITOR, OPERATE, SELECT [ , ...]
-- For EVENT TABLE
{ INSERT | SELECT } [ , ... ]
-- For FILE FORMAT, FUNCTION (UDF or external function), MODEL, PROCEDURE, SECRET, or SEQUENCE
USAGE [ , ... ]
-- For HYBRID TABLE
{ INSERT | SELECT | UPDATE } [ , ... ]
-- For IMAGE REPOSITORY
{ READ, WRITE } [ , ... ]
-- For ICEBERG TABLE
{ APPLYBUDGET | DELETE | INSERT | REFERENCES | SELECT | TRUNCATE | UPDATE } [ , ... ]
-- For PIPE
{ APPLYBUDGET | MONITOR | OPERATE } [ , ... ]
-- For { AGGREGATION | AUTHENTICATION | MASKING | PACKAGES | PASSWORD | PROJECTION | ROW ACCESS | SESSION } POLICY or TAG
APPLY [ , ... ]
-- For SECRET
READ, USAGE [ , ... ]
-- For SERVICE
{ USAGE | MONITOR | OPERATE } [ , ... ]
-- For external STAGE
USAGE [ , ... ]
-- For internal STAGE
READ [ , WRITE ] [ , ... ]
-- For STREAM
SELECT [ , ... ]
-- For STREAMLIT
USAGE [ , ... ]
-- For TABLE
{ APPLYBUDGET | DELETE | EVOLVE SCHEMA | INSERT | REFERENCES | SELECT | TRUNCATE | UPDATE } [ , ... ]
-- For TAG
READ
-- For TASK
{ APPLYBUDGET | MONITOR | OPERATE } [ , ... ]
-- For VIEW
{ REFERENCES | SELECT } [ , ... ]
-- For MATERIALIZED VIEW
{ APPLYBUDGET | REFERENCES | SELECT } [ , ... ]
Para obter mais detalhes sobre os privilégios suportados para cada tipo de objeto, consulte Privilégios de controle de acesso.
Parâmetros obrigatórios¶
object_name
Especifica o identificador do objeto no qual os privilégios são revogados.
object_type
Especifica o tipo de objeto para objetos do nível de esquema.
AGGREGATION POLICY
ALERT
AUTHENTICATION POLICY
DYNAMIC TABLE
EVENT TABLE
EXTERNAL TABLE
FILE FORMAT
FUNCTION
HYBRID TABLE
IMAGE REPOSITORY
ICEBERG TABLE
MASKING POLICY
MATERIALIZED VIEW
MODEL
NETWORK RULE
PACKAGES POLICY
PASSWORD POLICY
PIPE
PROCEDURE
PROJECTION POLICY
ROW ACCESS POLICY
SECRET
SERVICE
SESSION POLICY
SEQUENCE
STAGE
STREAM
TABLE
TAG
TASK
VIEW
object_type_plural
Forma plural de
object_type
(por exemplo,TABLES
,VIEWS
).role_name
Especifica o identificador da função do destinatário (ou seja, a função da qual os privilégios são revogados).
database_role_name
Especifica o identificador da função do banco de dados do destinatário (ou seja, a função da qual os privilégios são revogados). 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.
Parâmetros opcionais¶
GRANT OPTION FOR
Se especificado, elimina a capacidade do destinatário de conceder os privilégios a outra função.
Padrão: sem valor
ON FUTURE
Se especificado, apenas remove privilégios concedidos em novos (ou seja, futuros) objetos de esquema de um tipo especificado (por exemplo, tabelas ou exibições) em vez de objetos existentes. Note que quaisquer privilégios concedidos para objetos existentes são retidos.
RESTRICT | CASCADE
Se especificado, determina se a operação de revogação é bem sucedida ou falha para os privilégios, com base no fato de os privilégios terem sido reatribuídos a outra função.
RESTRICT
: se o privilégio que está sendo revogado foi novamente concedido a outra função, o comando REVOKE falha.CASCADE
: se o privilégio a ser revogado tiver sido revalidado, o comando REVOKE revoga recursivamente estas concessões dependentes. Se o mesmo privilégio em um objeto tiver sido concedido à função de destino por um concessor diferente (concessão paralela), essa concessão não será afetada e a função de destino manterá o privilégio.
Padrão:
RESTRICT
Exigências de segurança¶
- Revogação de privilégios em objetos individuais:
Uma função ativa que atenda aos critérios a seguir, ou uma função superior, podem ser usadas para revogar os privilégios em um objeto de outras funções:
A função é identificada como concessora do privilégio na coluna GRANTED_BY na saída SHOW GRANTS.
Se várias instâncias de um privilégio forem concedidas em um objeto específico, apenas as instâncias concedidas pela função do concessor ativo serão revogadas.
A função tem o privilégio global MANAGE GRANTS.
Se várias instâncias de um privilégio forem concedidas em um objeto específico, todas as instâncias serão revogadas.
Observe que somente a função do sistema SECURITYADMIN e superior têm o privilégio MANAGE GRANTS por padrão; no entanto, o privilégio pode ser concedido a outras funções personalizadas.
Em esquemas de acesso gerenciado (ou seja, esquemas criados usando a sintaxe CREATE SCHEMA … WITH MANAGED ACCESS), somente o proprietário do esquema (ou seja, a função com o privilégio OWNERSHIP para o esquema) ou uma função com o privilégio global MANAGE GRANTS podem revogar privilégios sobre objetos futuros no esquema.
- Revogação de concessões em objetos futuros de um tipo específico:
Nível do banco de dados
O privilégio global MANAGE GRANTS é necessário para revogar privilégios em objetos futuros em um banco de dados. Somente a função do sistema SECURITYADMIN e superior têm o privilégio MANAGE GRANTS; no entanto, o privilégio pode ser concedido a outras funções personalizadas.
Nível do esquema
Em esquemas de acesso gerenciado (ou seja, esquemas criados usando a sintaxe CREATE SCHEMA … WITH MANAGED ACCESS), o proprietário do esquema (ou seja, a função com o privilégio OWNERSHIP para o esquema) ou uma função com o privilégio global MANAGE GRANTS podem revogar privilégios sobre objetos futuros no esquema.
Em esquemas padrão, o privilégio global MANAGE GRANTS é necessário para revogar privilégios sobre objetos futuros no esquema.
Notas de uso¶
Os privilégios não podem ser concedidos ou revogados diretamente em nenhuma classe. No entanto, você pode criar uma instância de uma classe e revogar funções de instância de uma função de conta. Revogue o privilégio CREATE <nome_da_classe> no esquema para evitar que uma função crie uma instância de uma classe.
Um privilégio pode ser concedido a uma função várias vezes por concessores diferentes. Uma instrução REVOKE <privilege> só revoga concessões para os quais a função ativa, ou uma função inferior em uma hierarquia, é o concessor. Quaisquer concessões adicionais de um privilégio especificado por outros concessores são ignoradas.
Observe também que uma instrução REVOKE <privilege> é bem-sucedida mesmo que nenhum privilégio seja revogado. Uma instrução REVOKE <privilege> só retorna um erro se um privilégio especificado tiver concessões dependentes e a cláusula CASCADE for omitida na instrução.
Vários privilégios podem ser especificados para o mesmo tipo de objeto em uma única instrução GRANT (com cada privilégio separado por vírgula), ou a palavra-chave especial
ALL [ PRIVILEGES ]
pode ser usada para conceder todos os privilégios aplicáveis ao tipo de objeto especificado. Observe, entretanto, que somente os privilégios detidos e concedíveis pela função que executa o comando GRANT são de fato concedidos à função de destino. Uma mensagem de advertência é gerada para quaisquer privilégios que não puderam ser concedidos.Você não pode especificar esta palavra-chave para tags.
Os privilégios concedidos a uma determinada função são automaticamente herdados por quaisquer outras funções às quais a função é concedida, bem como quaisquer outras funções de nível superior dentro da hierarquia de funções. Para obter mais detalhes, consulte Visão geral do controle de acesso.
Para bancos de dados, o privilégio IMPORTED PRIVILEGES só se aplica a bancos de dados compartilhados (ou seja, bancos de dados criados a partir de um compartilhamento). Para obter mais detalhes, consulte Consumo de dados compartilhados.
Para esquemas e objetos em esquemas, é fornecida uma opção para conceder privilégios para todos os objetos do mesmo tipo dentro do contêiner (ou seja, banco de dados ou esquema). Esta é uma opção de conveniência; internamente, o comando é expandido em uma série de comandos individuais GRANT em cada objeto. Somente os objetos que atualmente existem dentro do contêiner são afetados.
Entretanto, observe que, no modelo Snowflake, a concessão de privilégios em massa não é uma prática recomendada. Em vez disso, o Snowflake recomenda criar uma função compartilhada e usar a função para criar objetos que são automaticamente acessíveis a todos os usuários a quem foi concedida a função.
Para estágios:
USAGE só se aplica a estágios externos.
READ | WRITE só se aplica a estágios internos. Além disso, para conceder o privilégio WRITE em um estágio interno, o privilégio READ deve primeiro ser concedido no estágio.
Para obter mais detalhes sobre estágios externos e internos, consulte CREATE STAGE.
Ao conceder privilégios a um UDF individual, é preciso especificar os tipos de dados para os argumentos, se houver, para o UDF sob a forma de
udf_name ( [ arg_data_type , ... ] )
. Isto é necessário porque o Snowflake usa tipos de dados de argumentos para resolver UDFs que têm o mesmo nome dentro de um esquema. Para um exemplo, consulte Exemplos (neste tópico). Para obter mais detalhes, consulte Visão geral das funções definidas pelo usuário.Ao conceder privilégios em um procedimento individual armazenado, você deverá especificar os tipos de dados para os argumentos, se houver, para o procedimento na forma de
procedure_name ( [ arg_data_type , ... ] )
. Isto é necessário porque o Snowflake usa tipos de dados de argumentos para resolver procedimentos armazenados que têm o mesmo nome dentro de um esquema.Concessões futuras: Revogar concessões futuras só remove as concessões de privilégios para objetos futuros de um tipo especificado. Quaisquer privilégios concedidos para objetos existentes são mantidos.
Para obter mais informações, consulte esquemas de acesso gerenciado.
Exemplos¶
Funções¶
Revogar os privilégios necessários para operar (ou seja, suspender ou retomar) o report_wh
warehouse da função analyst
:
REVOKE OPERATE ON WAREHOUSE report_wh FROM ROLE analyst;
Revogar somente a opção de concessão do privilégio OPERATE no report_wh
warehouse da função analyst
. A função retém o privilégio OPERATE, mas não pode mais conceder o privilégio OPERATE no warehouse a outras funções:
REVOKE GRANT OPTION FOR OPERATE ON WAREHOUSE report_wh FROM ROLE analyst;
Revogar o privilégio SELECT em todas as tabelas existentes no esquema mydb.myschema
da função analyst
:
REVOKE SELECT ON ALL TABLES IN SCHEMA mydb.myschema from ROLE analyst;
Revogar todos os privilégios em dois UDFs (com o mesmo nome no esquema atual) da função analyst
:
REVOKE ALL PRIVILEGES ON FUNCTION add5(number) FROM ROLE analyst; REVOKE ALL PRIVILEGES ON FUNCTION add5(string) FROM ROLE analyst;Observe que os UDFs têm argumentos diferentes, que é como o Snowflake identifica exclusivamente UDFs com o mesmo nome. Para obter mais detalhes sobre a nomenclatura de UDF, consulte Visão geral das funções definidas pelo usuário.
Revogar todos os privilégios em dois procedimentos armazenados (com o mesmo nome no esquema atual) da função analyst
:
REVOKE ALL PRIVILEGES ON PROCEDURE clean_schema(string) FROM ROLE analyst; REVOKE ALL PRIVILEGES ON procedure clean_schema(string, string) FROM ROLE analyst;Observe que os dois procedimentos armazenados têm argumentos diferentes, que é como o Snowflake identifica de forma única os procedimentos com o mesmo nome.
Revogar os privilégios SELECT e INSERT concedidos em todas as tabelas futuras criadas no esquema mydb.myschema
da função role1
:
REVOKE SELECT,INSERT ON FUTURE TABLES IN SCHEMA mydb.myschema FROM ROLE role1;
Funções de banco de dados¶
Revogar o privilégio SELECT em todas as tabelas existentes no esquema mydb.myschema
da função do banco de dados mydb.dr1
:
REVOKE SELECT ON ALL TABLES IN SCHEMA mydb.myschema FROM DATABASE ROLE mydb.dr1;
Revogar todos os privilégios em dois UDFs (com o mesmo nome no esquema atual) da função do banco de dados mydb.dr1
:
REVOKE ALL PRIVILEGES ON FUNCTION add5(number) FROM DATABASE ROLE mydb.dr1; REVOKE ALL PRIVILEGES ON FUNCTION add5(string) FROM DATABASE ROLE mydb.dr1;Observe que os UDFs têm argumentos diferentes, que é como o Snowflake identifica exclusivamente UDFs com o mesmo nome. Para obter mais detalhes sobre a nomenclatura de UDF, consulte Visão geral das funções definidas pelo usuário.
Revogar todos os privilégios em dois procedimentos armazenados (com o mesmo nome no esquema atual) da função de banco de dados mydb.dr1
:
REVOKE ALL PRIVILEGES ON PROCEDURE clean_schema(string) FROM DATABASE ROLE mydb.dr1; REVOKE ALL PRIVILEGES ON procedure clean_schema(string, string) FROM DATABASE ROLE mydb.dr1;Observe que os dois procedimentos armazenados têm argumentos diferentes, que é como o Snowflake identifica de forma única os procedimentos com o mesmo nome.
Revogar os privilégios SELECT e INSERT concedidos em todas as tabelas futuras criadas no esquema mydb.myschema
da função de banco de dados mydb.dr1
:
REVOKE SELECT,INSERT ON FUTURE TABLES IN SCHEMA mydb.myschema FROM DATABASE ROLE mydb.dr1;