GRANT <privilèges> … TO USER¶
Accorde un ou plusieurs privilèges d’accès sur un objet sécurisable à un utilisateur. Les privilèges qui peuvent être accordés sont spécifiques à chaque objet.
Pour plus d’informations sur les rôles et les objets sécurisables, consultez Aperçu du contrôle d’accès.
Pour plus d’informations sur ces privilèges, voir Privilèges de contrôle d’accès.
Syntaxe¶
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 ]
Où :
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 } [ , ... ]
Pour plus d’informations sur les privilèges pris en charge pour chaque type d’objet, voir Privilèges de contrôle d’accès.
Paramètres requis¶
object_name
Indique l’identificateur de l’objet sur lequel les privilèges sont accordés.
object_type
Spécifie le type d’objet pour les objets au niveau du schéma.
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
Forme plurielle de
object_type
(par exempleTABLES
,VIEWS
).Notez que les autorisations globales sur les canaux ne sont pas autorisées.
user_name
Spécifie l’identificateur de l’utilisateur destinataire (l’utilisateur auquel les privilèges sont accordés).
Paramètres facultatifs¶
WITH GRANT OPTION
Si cette valeur est spécifiée, permet à l’utilisateur destinataire d’accorder les privilèges à d’autres rôles ou utilisateurs.
Par défaut : aucune valeur, ce qui signifie que le rôle destinataire ne peut pas accorder les privilèges à d’autres rôles ou utilisateurs.
Note
Le paramètre WITH GRANT OPTION ne prend pas en charge le privilège IMPORTED PRIVILEGES. Pour plus d’informations, voir Accorder des privilèges sur une base de données importée.
Notes sur l’utilisation¶
Les privilèges attribués directement aux utilisateurs ne sont effectifs que si tous les rôles secondaires de l’utilisateur sont activés.
L’octroi de privilèges directement aux utilisateurs peut accroître la prolifération d’octrois dans votre compte. En dehors des scénarios de partage de personne à personne, nous vous recommandons d’accorder des privilèges aux rôles pour gérer l’accès dont les utilisateurs ont besoin dans Snowflake.
Les octrois futurs ne sont pas disponibles.
Les privilèges CREATE et OWNERSHIP ne peuvent pas être accordés aux utilisateurs.
Les privilèges ne peuvent pas être accordées ou révoquées directement dans une classe.
Plusieurs privilèges peuvent être spécifiés pour le même type d’objet dans une seule instruction GRANT (chaque privilège étant séparé par des virgules). Il est également possible d’utiliser le mot-clé spécial
ALL [ PRIVILEGES ]
pour accorder tous les privilèges applicables au type d’objet spécifié.Note
Seuls les privilèges détenus et pouvant être accordés par l’utilisateur qui exécute la commande GRANT sont effectivement accordés au rôle cible. Un message d’avertissement est renvoyé pour tout privilège non accordé.
Vous ne pouvez pas spécifier
ALL [ PRIVILEGES ]
pour des balises.ALL [ PRIVILEGES ]
n’accorde pas de privilèges sur une classe si vous essayez d’accorderALL [ PRIVILEGES ]
sur un schéma.
Pour les schémas et les objets dans les schémas, une option
ALL object_type_plural IN container
est fournie pour accorder des privilèges sur tous les objets du même type dans le conteneur (c’est-à-dire la base de données ou le schéma). Cette option est pratique. En interne, la commande est développée en une série de commandes GRANT individuelles sur chaque objet. Cette option n’affecte que les objets qui existent actuellement dans le conteneur.Note
L’octroi de privilèges en masse n’est pas une pratique recommandée dans le modèle Snowflake. Snowflake recommande plutôt de créer un rôle partagé, puis d’utiliser ce rôle pour créer des objets automatiquement accessibles à tous les utilisateurs auxquels le rôle a été accordé.
Vous ne pouvez pas spécifier ALL TAGS ou ALL MASKING POLICIES.
Pour les zones de préparation :
USAGE ne s’applique qu’aux zones de préparation externes.
READ | WRITE ne s’appliquent qu’aux zones de préparation internes. De plus, pour accorder le privilège WRITE sur une zone de préparation interne, le privilège READ doit d’abord être accordé sur la zone de préparation.
Pour plus d’informations sur les zones de préparation externes et internes, consultez CREATE STAGE.
Lorsque vous accordez des privilèges à une UDF ou à une procédure stockée individuelle, vous devez spécifier les types de données des arguments, le cas échéant, à l’aide d’une syntaxe telle que
udf_or_stored_procedure_name ( [ arg_data_type [ , ... ] ] )
. Snowflake utilise des types de données d’argument pour résoudre des UDFs ou des procédures stockées qui ont le même nom dans un schéma. Pour plus d’informations, voir Surcharge de procédures et de fonctions.Pour les tables dynamiques, l’utilisateur destinataire doit se voir accorder le privilège USAGE sur la base de données et le schéma qui contient la table dynamique, ainsi que sur l’entrepôt utilisé pour actualiser la table. Pour plus d’informations, voir Contrôle de l’accès aux tables dynamiques.
Lorsque vous accordez des privilèges à une UDF individuelle, vous devez spécifier les types de données des arguments, le cas échéant, pour l’UDF en utilisant une syntaxe telle que
udf_name ( [ arg_data_type , ... ] )
. Ceci est nécessaire, car Snowflake utilise des types de données d’argument pour résoudre les UDFs qui ont le même nom dans un schéma. Pour plus d’informations, voir Vue d’ensemble des fonctions définies par l’utilisateur.Lorsque vous accordez des privilèges à une procédure stockée individuelle, vous devez spécifier les types de données des arguments, le cas échéant, de la procédure à l’aide d’une syntaxe telle que
procedure_name ( [ arg_data_type , ... ] )
. Ceci est nécessaire parce que Snowflake utilise des types de données d’argument pour résoudre les procédures stockées qui ont le même nom dans un schéma.Pour plus d’informations, voir les schémas d’accès gérés.
Exigences en matière de contrôle d’accès¶
- Accorder des privilèges sur des objets individuels:
En général, un rôle ou un utilisateur disposant de l’un des privilèges suivants peut accorder des privilèges sur un objet à d’autres utilisateurs :
Le privilège
MANAGE GRANTS
global.Seuls les rôles système SECURITYADMIN et ACCOUNTADMIN disposent du privilège MANAGE GRANTS ; toutefois, ce privilège peut être accordé à des rôles personnalisés ou à des utilisateurs.
Le privilège OWNERSHIP.
Le rôle qui a le privilège OWNERSHIP sur l’objet.
Le privilège USAGE. Lors de l’octroi de privilèges sur des objets de schéma (par exemple, des tables et des vues), le rôle ou l’utilisateur doit également disposer du privilège USAGE sur la base de données et le schéma parents.
Si un privilège a été accordé à un utilisateur à l’aide de la commande
GRANT privileges ... TO USER WITH GRANT OPTION
, cet utilisateur peut réattribuer ce même privilège à d’autres utilisateurs ou rôles.Dans les schémas d’accès gérés (schémas créés à l’aide de la syntaxe
CREATE SCHEMA ... WITH MANAGED ACCESS
), les propriétaires d’objets perdent la possibilité de prendre des décisions d’octroi. Seul le propriétaire du schéma (le rôle disposant du privilège OWNERSHIP sur le schéma) ou un rôle disposant du privilège MANAGE GRANTS global peut accorder des privilèges sur des objets de ce schéma.Note
Un rôle qui détient le privilège MANAGE GRANTS global peut accorder des privilèges supplémentaires au rôle ou à l’utilisateur actuel (concédant).
Exemples¶
Pour accorder le privilège USAGE sur une application Streamlit à un utilisateur spécifique, joe
:
GRANT USAGE ON STREAMLIT streamlit_db.streamlit_schema.streamlit_app TO USER joe;
Pour accorder le privilège USAGE sur une procédure à un utilisateur spécifique, user1
:
GRANT USAGE ON PROCEDURE mydb.myschema.myprocedure(number) TO USER user1;