REVOKE <privilégios> FROM APPLICATION¶
Revogue um ou mais privilégios de acesso em um objeto protegível de um aplicativo. Os privilégios que podem ser revogados são específicos do objeto.
Para obter mais detalhes sobre funções e objetos protegíveis, consulte Visão geral do controle de acesso.
- Variações:
Sintaxe¶
REVOKE { { globalPrivileges } ON ACCOUNT
| { accountObjectPrivileges | ALL [ PRIVILEGES ] } ON { USER | RESOURCE MONITOR | WAREHOUSE | COMPUTE POOL | DATABASE | INTEGRATION | CONNECTION | FAILOVER GROUP | REPLICATION GROUP | EXTERNAL VOLUME } <object_name>
| { schemaPrivileges | ALL [ PRIVILEGES ] } ON { SCHEMA <schema_name> | ALL SCHEMAS IN DATABASE <db_name> }
| { schemaObjectPrivileges | ALL [ PRIVILEGES ] } ON { <object_type> <object_name> | ALL <object_type_plural> IN { DATABASE <db_name> | SCHEMA <schema_name> }
}
FROM APPLICATION <name>
Onde:
globalPrivileges ::=
{
CREATE {
COMPUTE POOL | DATABASE | WAREHOUSE
}
| BIND SERVICE ENDPOINT
| EXECUTE MANAGED TASK
| MANAGE WAREHOUSES
| READ SESSION
}
[ , ... ]
accountObjectPrivileges ::=
-- For COMPUTE POOL
{ MODIFY | MONITOR | OPERATE | USAGE } [ , ... ]
-- For CONNECTION
{ FAILOVER } [ , ... ]
-- 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
| CREATE {
ALERT | EXTERNAL TABLE | FILE FORMAT | FUNCTION
| IMAGE REPOSITORY | MATERIALIZED VIEW | PIPE | PROCEDURE
| { AGGREGATION | MASKING | PASSWORD | PROJECTION | ROW ACCESS | SESSION } POLICY
| SECRET | SEQUENCE | SERVICE | SNAPSHOT | STAGE | STREAM
| TAG | TABLE | TASK | VIEW
}
| MODIFY | MONITOR | USAGE
[ , ... ]
schemaObjectPrivileges ::=
-- For ALERT
{ MONITOR | OPERATE } [ , ... ]
-- For DYNAMIC TABLE
OPERATE, SELECT [ , ...]
-- For EVENT TABLE
{ INSERT | SELECT } [ , ... ]
-- For FILE FORMAT, FUNCTION (UDF or external function), PROCEDURE, SECRET, SEQUENCE, or SNAPSHOT
USAGE [ , ... ]
-- For IMAGE REPOSITORY
{ READ, WRITE } [ , ... ]
-- For PIPE
{ APPLYBUDGET | MONITOR | OPERATE } [ , ... ]
-- For { MASKING | PACKAGES | PASSWORD | ROW ACCESS | SESSION } POLICY or TAG
APPLY [ , ... ]
-- For SECRET
READ, USAGE [ , ... ]
-- For SERVICE
{ MONITOR | OPERATE } [ , ... ]
-- For external STAGE
USAGE [ , ... ]
-- For internal STAGE
READ [ , WRITE ] [ , ... ]
-- For STREAM
SELECT [ , ... ]
-- 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 informações sobre os privilégios compatíveis com 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 concedidos.
object_type
Especifica o tipo de objeto para objetos do nível de esquema.
ALERT
DYNAMIC TABLE
EVENT TABLE
EXTERNAL TABLE
FILE FORMAT
FUNCTION
MASKING POLICY
MATERIALIZED VIEW
NETWORK RULE
PACKAGES POLICY
PASSWORD POLICY
PIPE
PROCEDURE
ROW ACCESS POLICY
SECRET
SESSION POLICY
SEQUENCE
STAGE
STREAM
TABLE
TAG
TASK
VIEW
object_type_plural
Forma plural de
object_type
(por exemplo,TABLES
,VIEWS
).Não são permitidos subsídios em massa para canais.
name
Especifica o identificador do aplicativo destinatário (a função à qual os privilégios são concedidos).
Exigências de segurança¶
- Revogação de privilégios em objetos individuais:
Você pode usar 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 de aplicativo:
A função é identificada como concessora do privilégio na coluna GRANTED_BY na saída SHOW GRANTS.
Se você tiver várias instâncias de um privilégio 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 você tiver várias instâncias de um privilégio 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 (esquemas criados usando a sintaxe CREATE SCHEMA … WITH MANAGED ACCESS), somente o proprietário do esquema (a função com o privilégio OWNERSHIP no esquema) ou uma função com o privilégio MANAGE GRANTS global, ou uma função superior, pode revogar privilégios em objetos 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.
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 em todos os objetos do mesmo tipo dentro do contêiner (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 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.Para obter mais informações, consulte esquemas de acesso gerenciado.
Exemplo¶
Revogue o privilégio SELECT em uma exibição de um aplicativo:
REVOKE SELECT ON VIEW data.views.credit_usage
FROM APPLICATION app_snowflake_credits;