GRANT <privilégios> … TO USER

Concede a um usuário um ou mais privilégios de acesso em um objeto seguro. Os privilégios que podem ser concedidos são específicos do objeto.

Para obter mais informações sobre funções e objetos protegíveis, consulte Visão geral do controle de acesso.

Para mais informações sobre privilégios, consulte Privilégios de controle de acesso.

Consulte também:

GRANT <privilégios> … TO ROLE , REVOKE <privilégios> … FROM USER

Sintaxe

GRANT {  { globalPrivileges         | ALL [ PRIVILEGES ] } 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> } }
      }
  TO [ USER ] <user_name> [ WITH GRANT OPTION ]
Copy

Onde:

globalPrivileges ::=
  {
      | ATTACH POLICY | AUDIT | BIND SERVICE ENDPOINT
      | APPLY {
         { AGGREGATION | AUTHENTICATION | JOIN | MASKING | PACKAGES | PASSWORD
           | PROJECTION | ROW ACCESS | SESSION } POLICY
         | TAG }
      | EXECUTE { ALERT | DATA METRIC FUNCTION | MANAGED ALERT | MANAGED TASK | TASK }
      | IMPORT SHARE
      | MANAGE { ACCOUNT SUPPORT CASES | EVENT SHARING | GRANTS | LISTING AUTO FULFILLMENT | ORGANIZATION SUPPORT CASES | USER SUPPORT CASES | 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
      | READ SESSION
  }
  [ , ... ]
Copy
accountObjectPrivileges ::=
-- For COMPUTE POOL
   { MODIFY | MONITOR | OPERATE | USAGE } [ , ... ]
-- For CONNECTION
   { FAILOVER } [ , ... ]
-- For DATABASE
   { APPLYBUDGET
   | 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 | APPLYBUDGET
   | MODIFY | MONITOR | USAGE
   [ , ... ]
Copy
schemaObjectPrivileges ::=
  -- For ALERT
     { MONITOR | OPERATE } [ , ... ]
  -- For DATA METRIC FUNCTION
     USAGE [ , ... ]
  -- For DYNAMIC TABLE
     MONITOR, OPERATE, SELECT [ , ...]
  -- For EVENT TABLE
     { APPLYBUDGET | DELETE | REFERENCES | SELECT | TRUNCATE } [ , ... ]
  -- For FILE FORMAT, FUNCTION (UDF or external function), MODEL, PROCEDURE, SECRET, SEQUENCE, or SNAPSHOT
     USAGE [ , ... ]
  -- For GIT REPOSITORY
     { READ, WRITE } [ , ... ]
  -- For HYBRID TABLE
     { APPLYBUDGET | DELETE | INSERT | REFERENCES | SELECT | TRUNCATE | UPDATE } [ , ... ]
  -- For IMAGE REPOSITORY
     { READ, WRITE } [ , ... ]
  -- For ICEBERG TABLE
     { APPLYBUDGET | DELETE | INSERT | REFERENCES | SELECT | TRUNCATE | UPDATE } [ , ... ]
  -- For MATERIALIZED VIEW
     { APPLYBUDGET | REFERENCES | SELECT } [ , ... ]
  -- For PIPE
     { APPLYBUDGET | MONITOR | OPERATE } [ , ... ]
  -- For { AGGREGATION | AUTHENTICATION | MASKING | JOIN | PACKAGES | PASSWORD | PRIVACY | PROJECTION | ROW ACCESS | SESSION } POLICY or TAG
     APPLY [ , ... ]
  -- For SECRET
     { READ | USAGE } [ , ... ]
  -- For SEMANTIC VIEW
     REFERENCES [ , ... ]
  -- For SERVICE
     { 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 } [ , ... ]
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.

  • AGGREGATION POLICY

  • ALERT

  • AUTHENTICATION POLICY

  • CORTEX SEARCH SERVICE

  • DATA METRIC FUNCTION

  • DATASET

  • DYNAMIC TABLE

  • EVENT TABLE

  • EXTERNAL TABLE

  • FILE FORMAT

  • FUNCTION

  • GIT REPOSITORY

  • IMAGE REPOSITORY

  • ICEBERG TABLE

  • JOIN POLICY

  • MASKING POLICY

  • MATERIALIZED VIEW

  • MODEL

  • MODEL MONITOR

  • NETWORK RULE

  • NOTEBOOK

  • PACKAGES POLICY

  • PASSWORD POLICY

  • PIPE

  • PRIVACY POLICY

  • PROCEDURE

  • PROJECTION POLICY

  • ROW ACCESS POLICY

  • SECRET

  • SEMANTIC VIEW

  • SERVICE

  • SESSION POLICY

  • SEQUENCE

  • SNAPSHOT

  • STAGE

  • STREAM

  • STREAMLIT

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

user_name

Especifica o identificador do usuário destinatário (o usuário ao qual os privilégios são concedidos).

Parâmetros opcionais

WITH GRANT OPTION

Se especificado, permite que o usuário destinatário conceda os privilégios a outras funções ou usuários.

Padrão: nenhum valor, o que significa que a função destinatária não pode conceder privilégios a outras funções ou usuários.

Nota

O parâmetro 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 importado.

Notas de uso

  • Os privilégios atribuídos diretamente aos usuários só são efetivos quando o usuário tem todas as funções secundárias ativadas.

  • A concessão de privilégios diretamente aos usuários pode aumentar a proliferação de concessões na sua conta. Fora dos cenários de compartilhamento pessoa a pessoa, recomendamos que você conceda privilégios a funções para gerenciar o acesso de que os usuários precisam no Snowflake.

  • Concessões futuras não está disponível.

  • Os privilégios CREATE e OWNERSHIP não podem ser concedidos aos usuários.

  • Os privilégios não podem ser concedidos ou revogados diretamente em nenhuma classe.

  • 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írgulas). Como alternativa, a palavra-chave especial ALL [ PRIVILEGES ] pode ser usada para conceder todos os privilégios aplicáveis ao tipo de objeto especificado.

    Nota

    • Somente os privilégios mantidos e concedidos pelo usuário que executa o comando GRANT são realmente concedidos à função de destino. Uma mensagem de aviso é retornada para todos os privilégios não concedidos.

    • Você não pode especificar ALL [ PRIVILEGES ] para as tags.

    • ALL [ PRIVILEGES ] não concede privilégios em uma classe se você tentar conceder ALL [ PRIVILEGES ] em um esquema.

  • Para esquemas e objetos em esquemas, a opção ALL object_type_plural IN container é fornecida para conceder privilégios a todos os objetos do mesmo tipo no contêiner (ou seja, banco de dados ou esquema). Essa opção oferece conveniência. Internamente, o comando é expandido em uma série de comandos GRANT individuais em cada objeto. Essa opção afeta apenas os objetos que existem atualmente no contêiner.

    Nota

    A concessão de privilégios em massa não é uma prática recomendada no modelo Snowflake. Em vez disso, a Snowflake recomenda a criação de uma função compartilhada e, em seguida, o uso dessa função para criar objetos que são automaticamente acessíveis a todos os usuários que receberam a função.

    Você não pode especificar ALL TAGS ou ALL MASKING POLICIES.

  • 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 informações sobre os estágios externos e internos, consulte CREATE STAGE.

  • Ao conceder privilégios em uma UDF ou procedimento armazenado individual, você deve especificar os tipos de dados dos argumentos, se houver, usando uma sintaxe como udf_or_stored_procedure_name ( [ arg_data_type [ , ... ] ] ). O Snowflake usa tipos de dados de argumentos para resolver UDFs ou procedimentos armazenados que têm o mesmo nome dentro de um esquema. Para obter mais informações, consulte Sobrecarga de procedimentos e funções.

  • Para tabelas dinâmicas, o usuário receptor deve ter 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. Para obter mais informações, consulte Controle de acesso a tabelas dinâmicas.

  • Ao conceder privilégios em uma UDF individual, você deve especificar os tipos de dados para os argumentos, se houver, para a UDF usando uma sintaxe como 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 informações, consulte Visão geral das funções definidas pelo usuário.

  • Ao conceder privilégios em um procedimento armazenado individual, você deve especificar os tipos de dados para os argumentos, se houver, para o procedimento usando uma sintaxe como 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.

Requisitos de controle de acesso

Concessão de privilégios em objetos individuais:

Em geral, uma função ou usuário com qualquer um dos privilégios a seguir pode conceder privilégios em um objeto a outros usuários:

  • O privilégio global MANAGE GRANTS.

    Somente as funções de sistema SECURITYADMIN e ACCOUNTADMIN têm o privilégio MANAGE GRANTS; no entanto, o privilégio pode ser concedido a funções ou usuários personalizados.

  • O privilégio OWNERSHIP.

    A função que tem o privilégio OWNERSHIP no objeto.

  • O privilégio USAGE. Ao conceder privilégios em objetos de esquema (por exemplo, tabelas e exibições), a função ou o usuário também deve ter o privilégio USAGE no banco de dados e no esquema pai.

Se um privilégio tiver sido concedido a um usuário com o comando GRANT privileges ... TO USER WITH GRANT OPTION, esse usuário poderá conceder novamente o mesmo privilégio a outros usuários ou funções.

Em esquemas de acesso gerenciado (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. Somente o proprietário do esquema (a função com o privilégio OWNERSHIP no esquema) ou uma função com o privilégio global MANAGE GRANTS pode conceder privilégios aos objetos desse esquema.

Nota

Uma função que tenha o privilégio global MANAGE GRANTS pode conceder privilégios adicionais à função ou ao usuário atual (concessor).

Exemplos

Para conceder o privilégio USAGE em um aplicativo Streamlit a um usuário específico, joe:

GRANT USAGE ON STREAMLIT streamlit_db.streamlit_schema.streamlit_app TO USER joe;
Copy

Para conceder o privilégio USAGE em um procedimento a um usuário específico, user1:

GRANT USAGE ON PROCEDURE mydb.myschema.myprocedure(number) TO USER user1;
Copy