Utiliser les droits du propriétaire et les droits restreints de l’appelant dans une application¶
Cette rubrique décrit comment configurer une application pour qu’elle utilise les droits du propriétaire et les droits restreints de l’appelant.
À propos des droits du propriétaire et des droits restreints de l’appelant dans une application¶
Dans le contexte d’une application, les types d’exécutables suivants sont pris en charge :
Procédures stockées appartenant à l’application
Services disponibles dans les applications avec conteneurs
Chacun de ces types d’exécutables peut être configuré pour utiliser les droits du propriétaire ou les droits restreints de l’appelant.
- Droits du propriétaire:
Par défaut, les exécutables d’une application utilisent les droits du propriétaire, ce qui signifie qu’ils s’exécutent avec les privilèges accordés au propriétaire de l’exécutable, à savoir l’application elle-même.
Par exemple, les droits du propriétaire permettent à un exécutable d’accéder aux données du compte du fournisseur et de présenter ces données au consommateur. Toutefois, ils ne permettent pas au consommateur d’accéder directement aux données.
Par exemple, la commande CREATE PROCEDURE crée une procédure stockée qui utilise les droits du propriétaire par défaut. Les consommateurs peuvent appeler la procédure stockée s’ils ont obtenu un accès en utilisant des rôles d’application. Si l’application dispose des privilèges nécessaires pour effectuer une opération, la procédure stockée peut effectuer cette opération.
Pour obtenir des informations générales sur les droits du propriétaire, consultez Présentation des procédures stockées des droits de l’appelant et des droits du propriétaire.
- Restriction des droits de l’appelant:
Les droits restreints de l’appelant permettent à un exécutable de s’exécuter avec les droits de l’appelant, mais limitent les privilèges de l’appelant avec lesquels l’exécutable s’exécute. Avec les droits restreints de l’appelant, un exécutable appartenant à une application ne peut pas s’exécuter avec un privilège spécifique, sauf si un administrateur du compte consommateur l’autorise explicitement à l’aide de la commande GRANT CALLER.
Note
Pour garantir la sécurité des exécutables d’une application, les Snowflake Native Apps ne prennent pas en charge les droits illimités de l’appelant.
Pour des informations générales sur les droits restreints de l’appelant, voir Restriction des droits de l’appelant.
Portée des droits restreints de l’appelant dans une application¶
Snowflake recommande aux consommateurs d’accorder les droits de l’appelant au niveau du conteneur, et non sur des objets spécifiques de leur compte.
- Niveau schéma:
Accorde les droits de l’appelant sur le schéma, mais n’accorde aucun droit sur les objets du schéma. Par exemple, l’octroi du droit de l’appelant CALLER USAGE sur un schéma n’accorde que le privilège USAGE sur le schéma. Pour accorder l’accès à un objet spécifique, par exemple une fonction, utilisez GRANT INHERITED CALLER USAGE ON ALL FUNCTIONS IN SCHEMA.
- Niveau base de données:
L’octroi des droits de l’appelant au niveau de la base de données permet uniquement à un exécutable d’accéder à la base de données et à tous les schémas de la base de données. Par exemple, l’octroi du droit de l’appelant CALLER USAGE accorde le privilège USAGE sur la base de données. Cependant, pour accorder l‘accès à un objet spécifique, vous devez utiliser la commande suivante :
GRANT INHERITED CALLER USAGE ON ALL FUNCTIONS IN DATABASE;
- Nom du compte:
L’octroi des droits de l’appelant au niveau du compte permet à un exécutable d’effectuer des opérations au niveau du compte. L’octroi du droit de l’appelant CALLER USAGE permet uniquement à l’exécutable d’accéder au compte, mais ne donne pas accès aux objets du compte.
Pour permettre l’accès à des objets spécifiques, vous devez accorder l’accès à des types spécifiques d’objets dans le compte. Par exemple, l’octroi du droit de l’appelant CREATE DATABASE permet à un exécutable de créer des bases de données dans le compte du consommateur, comme le montre l’exemple suivant :
GRANT CALLER CREATE DATABASE ON ACCOUNT TO my_app;
Droits de l’appelant au niveau du compte qui peuvent être accordés à une application¶
Les fournisseurs peuvent configurer un exécutable dans une application pour utiliser les droits de l’appelant suivants au niveau du compte :
CREATE DATABASE
EXECUTE ALERT
EXECUTE MANAGED TASK
EXECUTE TASK
READ SESSION
VIEW LINEAGE
Note
Les consommateurs doivent faire preuve de prudence lorsqu’ils accordent les droits de l’appelant au niveau du compte à une application.
Déterminer les exigences d’accès d’une application¶
Les Snowflake Native Apps offrent aux fournisseurs une flexibilité dans la manière de configurer l’accès aux données et aux exécutables gérés par l’application. Le tableau suivant fournit des indications sur le mécanisme à utiliser en fonction des exigences d’accès de l’application :
Accès requis |
Obtenir l’accès |
|---|---|
Données ou fonctions appartenant à l’application |
Utilisez les droits du propriétaire par défaut. Les fournisseurs n’ont pas besoin de demander l’accès auprès du consommateur pour créer ou accéder à des objets appartenant à l’application. |
Tables, vues ou fonctions spécifiques dans le compte de consommateur |
Demander des références auprès du consommateur |
Tables, vues, fonctions et politiques d’accès aux lignes appartenant à un autre utilisateur ou rôle. |
Utilisez les droits restreints de l’appelant, qui permettent au consommateur d’autoriser l’accès à ces objets. |
Large accès aux bases de données appartenant aux consommateurs |
Utiliser les autorisations de rôle de base de données |
Requêtes qui accèdent à une combinaison de données du consommateur et du fournisseur |
Utiliser conjointement les références et les droits du propriétaire |
Objets au niveau du compte |
Fournissez des scripts personnalisés contenant des commandes GRANT pour accorder des privilèges pour des objets spécifiques. |
Effectuez des opérations au niveau du compte, telles que la création de bases de données ou l’exécution de tâches. |
Utilisez les droits restreints de l’appelant, qui permettent au consommateur d’autoriser l’accès pour effectuer ces actions. |
Ajoutez la propriété restricted_callers_rights au fichier manifeste¶
En tant que fournisseur, si vous configurez un exécutable dans une application pour utiliser les droits restreints de l’appelant, Snowflake vous recommande d’ajouter restricted_callers_rights au fichier manifeste, comme indiqué dans l’exemple suivant :
restricted_callers_rights:
enabled: true
description: This app includes stored procedure that uses restricted caller's rights.
Même si restricted_callers_rights n’est pas requis, s’il est présent et que enabled est défini sur true,, Snowsight inclut une section nommée Restricted caller’s rights dans le listing de l’application.
Configurer une procédure ou un service pour utiliser les droits restreints de l’appelant¶
Pour créer une procédure stockée qui utilise les droits restreints de l’appelant, utilisez la clause EXECUTE AS RESTRICTED CALLER lorsque l’application crée un exécutable, comme indiqué dans l’exemple suivant :
CREATE OR REPLACE PROCEDURE CORE.HELLO()
RETURNS STRING
LANGUAGE SQL
EXECUTE AS RESTRICTED CALLER
AS
BEGIN
RETURN 'Hello Snowflake!';
END;
Pour plus d’informations, voir CREATE PROCEDURE.
Utilisation d’un service de droits restreints de l’appelant dans une application avec conteneurs¶
Pour plus d’informations sur la configuration d’un service afin d’utiliser les droits restreints de l’appelant, voir Connexion à Snowflake depuis un conteneur en utilisant les droits de l’appelant.
Dans une application avec conteneurs, un service Snowpark Container Services peut s’exécuter avec les privilèges de l’application (droits du propriétaire) ou avec les privilèges de l’appelant du service (droits restreints de l’appelant). Cependant, l’application dépend de service_owner_role, et non de service_user_role. Lors de l’octroi des droits de l’appelant, un consommateur spécifie l’application en utilisant la clause TO APPLICATION, comme indiqué dans l’exemple suivant :
GRANT CALLER USAGE ON DATABASE consumer_db TO APPLICATION hello_snowflake_app;
Cet exemple permet au service de s’exécuter avec des droits restreints de l’appelant afin d’utiliser le rôle de l’appelant pour accéder à la base de données consumer_db.
Limites relatives aux droits restreints de l’appelant dans une application¶
Les limites suivantes s’appliquent lors de l’utilisation des droits restreints de l’appelant au sein d’une application.
Limites générales relatives aux droits restreints de l’appelant¶
Pour les limites générales relatives aux droits restreints de l’appelant sur les exécutables, voir Limites d’un exécutable dont les droits de l’appelant sont restreints. Les limites qui y sont répertoriées s’appliquent également aux applications.
Limites supplémentaires pour les applications¶
Outre les limites générales relatives aux droits restreints de l’appelant, les applications sont soumises aux limites suivantes :
Les droits illimités de l’appelant ne sont pas pris en charge pour les exécutables d’une application.
Impossible d’exécuter les commandes suivantes :
SHOW ROLES
SHOW USERS
SHOW [CALLER] GRANTS
SHOW AVAILABLE LISTINGS
Impossible d’exécuter les fonctions suivantes :
ALL_USER_NAMES
GET_USERS_FOR_COLLABORATION
CURRENT_IP_ADDRESS
CURRENT_AVAILABLE_ROLES
CURRENT_SECONDARY_ROLES
SYSTEM$ALLOWLIST (ou le caractère SYSTEM$WHITELIST obsolète)
Les fonctions de référence persistante ne sont pas prises en charge.
Les chemins relatifs vers les objets d’une zone de préparation ne sont pas pris en charge.
Les exécutables avec les droits restreints de l’appelant ne peuvent pas accéder aux objets internes de l’application.
Les exécutables avec les droits du propriétaire ne peuvent pas appeler d’autres exécutables utilisant les droits illimités de l’appelant.
Bien que les exécutables avec les droits du propriétaire détenus par l’application puissent invoquer des exécutables avec les droits restreints de l’appelant, ces exécutables doivent également appartenir à l’application. Par exemple, une procédure stockée d’application avec les droits de propriétaire ne peut pas appeler la procédure stockée d’un consommateur avec les droits restreints de l’appelant.
Appel de fonctions de facturation à partir d’une procédure de droits restreints de l’appelant dans une application¶
Les fonctions de facturation telles que SYSTEM$CREATE_BILLING_EVENT ou SYSTEM$CREATE_BILLING_EVENTS ne peuvent pas être appelées à partir d’un exécutable RCR. Pour appeler ces fonctions à partir d’un exécutable RCR dans une application, incluez ces fonctions dans une procédure relative aux droits du propriétaire et appelez la procédure à partir de la procédure relative aux droits restreints de l’appelant.
Protection de la propriété intellectuelle et droits restreints de l’appelant¶
Les applications qui incluent des procédures stockées relatives aux droits du propriétaire expurgent les informations relatives à la mise en œuvre interne de l’application. Pour plus d’informations, voir Protection de la propriété intellectuelle des fournisseurs.
Les procédures stockées avec les droits restreints de l’appelant expurgent également des informations internes sur l’application. Cela s’applique en particulier aux commandes, vues et fonctions suivantes, où une grande partie des informations est expurgée :
La commande DESCRIBE PROCEDURE
Vue PROCEDURES de l’Information Schema
Vue PROCEDURES de l’Information Schema sur les comptes
La fonction GET_DDL
Toutefois, contrairement aux procédures stockées avec droits du propriétaire, les procédures utilisant des droits restreints de l’appelant n’expurgent pas les informations de l’historique des requêtes et des profils des requêtes.
Développement d’applications qui utilisent les droits restreints de l’appelant¶
En général, seuls les rôles qui se sont vu accorder le privilège MANAGE CALLER GRANTS peuvent accorder les droits de l’appelant à un exécutable. Toutefois, au cours du cycle de vie du développement d’une Snowflake Native App, les fournisseurs peuvent avoir besoin de créer et de supprimer fréquemment l’application. Les Snowflake Native Apps fournissent un mécanisme de création des droits de l’appelant pour une application en mode développement.
Les fournisseurs peuvent utiliser un rôle sans le privilège MANAGE CALLER GRANTS pour accorder les autorisations de l’appelant à une application. Toutefois, cela exige que tous les éléments suivants soient réunis :
L’application doit être créée en mode de développement.
Le rôle actuel a le rôle de propriétaire de l’application dans la hiérarchie des rôles.
Le rôle du propriétaire de l’application dispose d’un sur-ensemble d’autorisations de l’appelant qui sont accordées.
Note
Le privilège ALL CALLER PRIVILEGES est un sur-ensemble de tout ensemble de privilèges de l’appelant.
L’exigence relative au sur-ensemble ne peut pas être satisfaite par les autorisations INHERITED CALLER qui couvrent normalement tous les objets actuels et futurs d’un type particulier dans le cadre d’un conteneur spécifique. Pour plus d’informations, voir GRANT CALLER.
Pour satisfaire à cette exigence, les autorisations de l’appelant accordées doivent être explicitement couvertes par les autorisations de l’appelant accordées au rôle du propriétaire de l’application.
Autoriser les développeurs de l’application à accorder les droits de l’appelant à une application en mode de développement¶
Pour permettre à un rôle de propriétaire d’application d’accorder un ensemble d’autorisations de l’appelant à une application en mode de développement, un utilisateur avec le rôle ACCOUNTADMIN ou un rôle avec le privilège MANAGE CALLER GRANTS doit d’abord accorder les autorisations de l’appelant qui couvrent l’ensemble des autorisations au rôle de propriétaire de l’application.
L’exemple suivant montre comment accorder les privilèges requis de l’appelant pour les bases de données d’un compte :
GRANT ALL INHERITED CALLER PRIVILEGES
ON ALL DATABASES IN ACCOUNT
TO ROLE app_dev_role;
Cette commande accorde toutes les autorisations de l’appelant sur toutes les bases de données au rôle app_dev_role.
Note
Cette commande accorde uniquement les autorisations de l’appelant. Elle ne permet pas au développeur de l’application d’accéder à un objet auquel il n’est pas autorisé à accéder.
Mesures de sécurité supplémentaires pour les applications en mode de développement¶
Le fait d’accorder aux développeurs de l’application des rôles de propriétaire sans le privilège MANAGE CALLER GRANTS permet de rationaliser le processus de développement des applications, mais cela introduit également des risques potentiels pour la sécurité. Pour minimiser ces risques, Snowflake vérifie que le propriétaire de l’application continue de disposer des autorisations requises de l’appelant pour l’application. Si le propriétaire de l’application perd les autorisations requises de l’appelant, l’application les perd également.