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 ]
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
}
[ , ... ]
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 } [ , ... ]
schemaPrivileges ::=
ADD SEARCH OPTIMIZATION | APPLYBUDGET
| MODIFY | MONITOR | USAGE
[ , ... ]
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 } [ , ... ]
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 concederALL [ 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;
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;