GRANT <privilégios> … TO APPLICATIONROLE

Concede um ou mais privilégios de acesso em um objeto de nível de esquema protegível para uma função de aplicativo. Os privilégios que podem ser concedidos 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 OWNERSHIP , REVOKE <privilégios> FROM APPLICATION ROLE

Sintaxe

GRANT {
        { schemaPrivileges         | ALL [ PRIVILEGES ] } ON SCHEMA <schema_name>
        | { schemaObjectPrivileges | ALL [ PRIVILEGES ] } ON { <object_type> <object_name> | ALL <object_type_plural> IN { DATABASE <db_name> | SCHEMA <schema_name> }
        | { schemaObjectPrivileges | ALL [ PRIVILEGES ] } ON FUTURE <object_type_plural> IN SCHEMA <schema_name>
      }
    TO APPLICATION ROLE <name> [ WITH GRANT OPTION ]
Copy

Onde:

schemaPrivileges ::=
ADD SEARCH OPTIMIZATION
| CREATE {
    ALERT | EXTERNAL TABLE | FILE FORMAT | FUNCTION
    | MATERIALIZED VIEW | PIPE | PROCEDURE
    | { MASKING | PASSWORD | ROW ACCESS | SESSION } POLICY
    | SECRET | SEQUENCE | 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, or SEQUENCE
     USAGE [ , ... ]
  -- For PIPE
     { APPLYBUDGET | MONITOR | OPERATE } [ , ... ]
  -- For { MASKING | PACKAGES | PASSWORD | ROW ACCESS | SESSION } POLICY or TAG
     APPLY [ , ... ]
  -- For SECRET
     READ, USAGE [ , ... ]
  -- 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 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 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).

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

name

Especifica o identificador da função do aplicativo (ou seja, a função à qual os privilégios são concedidos).

Parâmetros opcionais

ON FUTURE

Especifica que os privilégios são concedidos em objetos de esquema novos (ou seja, futuros) de um tipo especificado em vez de objetos existentes. Futuras concessões podem ser revogadas a qualquer momento usando REVOKE <privilégios> FROM APPLICATION ROLE com as palavras-chave ON FUTURE; quaisquer privilégios concedidos em objetos existentes serão mantidos. Para obter mais informações sobre concessões futuras, consulte Concessões futuras sobre objetos de esquema neste tópico.

WITH GRANT OPTION

Se especificado, permite que a função do aplicativo do destinatário conceda os privilégios a outras funções do aplicativo.

Padrão: nenhum valor, o que significa que a função de aplicativo do destinatário não pode conceder privilégios a outras funções de aplicativo.

Nota

A cláusula WITH GRANT OPTION não oferece suporte ao privilégio IMPORTED PRIVILEGES. Para obter mais informações, consulte Concessão de privilégios em um banco de dados compartilhado.

Notas de uso

Você deve usar uma função de aplicativo para conceder e revogar privilégios em objetos em um aplicativo.

Este comando tem restrições diferentes dependendo se você é o provedor ou consumidor do aplicativo.

O consumidor de aplicativo não pode fazer o seguinte com relação a uma função de aplicativo:

  • Conceder ou revogar privilégios de objeto com relação a uma função de aplicativo.

  • Conceder uma função de aplicativo a um banco de dados ou compartilhamento ou revogar uma função de aplicativo de um banco de dados ou compartilhamento.

  • Conceder uma função de aplicativo ao mesmo aplicativo ou a um aplicativo diferente ou revogar uma função de aplicativo do mesmo aplicativo ou de um aplicativo diferente.

Esses itens se aplicam ao provedor de aplicativos em relação a uma função de aplicativo.

  • Para conceder o privilégio OWNERSHIP em um objeto ou todos os objetos de um tipo especificado em um esquema a uma função de aplicativo, transferindo a propriedade do objeto de uma função de aplicativo para outra função de aplicativo, use comando GRANT OWNERSHIP.

  • 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.

    No entanto, somente os privilégios detidos e concedíveis pela função de aplicativo que executa o comando GRANT são de fato concedidos à função de aplicativo de destino. Uma mensagem de advertência é gerada para quaisquer privilégios que não puderam ser concedidos.

  • Os privilégios concedidos a uma determinada função de aplicativo são automaticamente herdados por quaisquer outras funções de aplicativo às quais a função de aplicativo é concedida, bem como quaisquer outras funções de aplicativo de nível superior dentro da hierarquia de funções.

    Para obter mais detalhes, consulte Visão geral do controle de acesso.

  • Em esquemas de acesso gerenciado:

    • O privilégio OWNERSHIP nos objetos só pode ser transferido para uma função subordinada do proprietário do esquema.

    • 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 mais detalhes sobre estágios externos e internos, consulte CREATE STAGE e Requisitos de controle de acesso (neste tópico).

  • Ao conceder privilégios em um UDF individual ou procedimento armazenado, você deve especificar os tipos de dados dos argumentos, se houver, usando a sintaxe mostrada abaixo:

    <udf_or_stored_procedure_name> ( [ <arg_data_type> [ , ... ] ] )
    
    Copy

    O Snowflake usa tipos de dados de argumentos para resolver UDFs e procedimentos armazenados que têm o mesmo nome dentro de um esquema. Para obter mais informações, consulte Sobrecarga de procedimentos e funções.

Requisitos de controle de acesso

  • Este comando só pode ser executado de dentro do aplicativo.

  • Privilégios só podem ser concedidos ou revogados em objetos pertencentes ao aplicativo. Para determinar esses objetos, use o comando SHOW OBJECTS:

    SHOW OBJECTS OWNED BY APPLICATION myapp;
    
    Copy
  • Com relação a esquemas de acesso gerenciado:

    • Em esquemas de acesso gerenciado (ou seja, esquemas criados usando a sintaxe CREATE SCHEMA … WITH MANAGED ACCESS), os proprietários de objetos perdem a capacidade de tomar decisões de concessão.

      As seguintes funções podem conceder privilégios em objetos em um esquema de acesso gerenciado:

      • A função de aplicativo porque esta função é o proprietário do esquema (ou seja, a função com o privilégio OWNERSHIP no esquema).

      • Uma função que herda a função de aplicativo.

      • Uma função com o privilégio global MANAGE GRANTS pode conceder privilégios em objetos no esquema.

        Uma função que detém o privilégio global MANAGE GRANTS pode conceder privilégios adicionais à função atual (concessor).

    • Consulte Concessões futuras sobre objetos de esquema (neste tópico) para os requisitos de controle de acesso de concessões futuras em esquemas de acesso gerenciado.

Concessões futuras sobre objetos de esquema

As notas nestas seções se aplicam ao atribuir futuras concessões a objetos em um esquema (ou seja, ao usar as palavras-chave ON FUTURE).

Considerações

  • Quando concessões futuras são definidas no mesmo tipo de objeto para um 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. Esse comportamento se aplica a privilégios sobre objetos futuros concedidos a uma função de aplicativo ou funções de aplicativos diferentes.

Restrições e limitações

  • Não é permitida mais do que uma concessão futura do privilégio OWNERSHIP para cada tipo de objeto protegível.

  • Concessões futuras não podem ser definidas para objetos dos seguintes tipos:

    • Pool de computação

    • Função externa

    • Repositório de imagens

    • Objetos de política:

      • Política de mascaramento

      • Política de pacotes

      • Política de acesso a linhas

      • Política da sessão

    • Tag

  • Uma futura concessão do privilégio OWNERSHIP sobre objetos de um tipo especificado em um banco de dados não se aplica a novos objetos em um esquema de acesso gerenciado.

  • As seguintes restrições se aplicam a futuras concessões de objetos em um esquema de acesso gerenciado:

    • Uma futura concessão do privilégio OWNERSHIP em objetos só pode ser aplicada a uma função subordinada do proprietário do esquema (ou seja, a função com o privilégio OWNERSHIP no esquema).

    • Antes que a propriedade de um esquema de acesso gerenciado possa ser transferida para uma função diferente, todas as concessões futuras abertas do privilégio OWNERSHIP devem ser revogadas usando REVOKE <privilégios> com as palavras-chave ON FUTURE.

  • Concessões futuras não são aplicadas quando se renomeia ou se troca uma tabela.

  • Concessões futuras têm suporte em estágios nomeados com as seguintes restrições:

    • O privilégio WRITE não pode ser especificado sem o privilégio READ.

    • O privilégio READ não pode ser revogado se o privilégio WRITE estiver presente.

    • Para os estágios internos, somente concessões futuras com o privilégio READ ou WRITE serão materializados.

    • Para os estágios externos, somente as concessões futuras com os privilégios USAGE serão materializadas.

  • Em um esquema de acesso gerenciado, a função de aplicativo e uma função com o privilégio global MANAGE GRANTS pode conceder privilégios em objetos futuros no esquema de acesso gerenciado.

    Em esquemas padrão, o privilégio global MANAGE GRANTS é necessário para conceder privilégios sobre objetos futuros no esquema.

Exemplo

Conceda o privilégio SELECT em uma exibição para uma função de aplicativo:

GRANT SELECT ON VIEW data.views.credit_usage
  TO APPLICATION ROLE app_snowflake_credits;
Copy