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:

GRANT <privilégios> … TO APPLICATION

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>
Copy

Onde:

globalPrivileges ::=
  {
      CREATE {
       COMPUTE POOL | DATABASE | WAREHOUSE
      }
      | BIND SERVICE ENDPOINT
      | EXECUTE MANAGED TASK
      | MANAGE WAREHOUSES
      | READ SESSION
  }
  [ , ... ]
Copy
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 } [ , ... ]
Copy
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
[ , ... ]
Copy
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 } [ , ... ]
Copy

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;
Copy