Restriction des droits de l’appelant et Streamlit in Snowflake¶
Par défaut, toutes les applications Streamlit in Snowflake doivent s’exécuter avec les privilèges du propriétaire, et non les privilèges de l’appelant. Le développeur de l’application Streamlit peut définir si une application de runtime de conteneur s’exécute avec les droits du propriétaire ou les droits restreints de l’appelant. Les droits restreints de l’appelant ne sont pas pris en charge dans les environnements d’exécution de l’entrepôt.
La restriction des droits de l’appelant permet à une application Streamlit de s’exécuter avec les droits de l’appelant, mais restreint les privilèges de l’appelant avec lesquels l’application s’exécute. Avec des droits restreints de l’appelant, une application Streamlit ne peut pas s’exécuter avec un privilège spécifique, à moins qu’un administrateur ne l’autorise expressément. Les administrateurs utilisent les droits de l’appelant pour définir les privilèges de l’appelant avec lesquels une application peut s’exécuter. De cette manière, les applications Streamlit n’accèdent qu’aux données (pour le compte du visualiseur) auxquelles elles sont autorisées à accéder.
Pour plus d’informations, voir Restriction des droits de l’appelant.
Autorisations requises de l’appelant¶
Pour accéder à des tables, des procédures stockées ou des entrepôts au nom du visualiseur, le développeur de l’application Streamlit doit disposer des droits de l’appelant accordés par un utilisateur disposant du privilège MANAGE CALLER GRANTS.
Exemple de flux de travail¶
L’administrateur accorde le privilège MANAGE CALLER GRANTS au rôle
data_science_manager:GRANT MANAGE CALLER GRANTS ON ACCOUNT TO ROLE data_science_manager;
Un utilisateur avec le rôle
data_science_manageraccorde les privilèges suivants au rôlestreamlit_app_developer:Accordez les privilèges de sélection de l’appelant au rôle
streamlit_app_developerafin que les applications Streamlit appartenant à ce rôle accédant à la tablestreamlit_db.streamlit_schema.streamlit_tablepuissent fonctionner avec le privilège SELECT sur cette table :GRANT CALLER SELECT ON TABLE streamlit_db.streamlit_schema.streamlit_table TO ROLE streamlit_app_developer;
Accordez les privilèges d’utilisation de l’appelant au rôle
streamlit_app_developerpour utiliser l’entrepôtstreamlit_wh:GRANT CALLER USAGE ON WAREHOUSE streamlit_wh TO ROLE streamlit_app_developer;
Pour plus d’informations sur les droits de l’appelant, consultez À propos des autorisations accordées aux appelants et GRANT CALLER.
Cas d’utilisation pour les droits restreints de l’appelant dans Streamlit in Snowflake¶
La restriction des droits de l’appelant dans Streamlit in Snowflake vous permet de contrôler :
Les pages d’une application Streamlit qui sont disponibles
Les données qui sont disponibles dans l’application Streamlit
Les données avec des politiques d’accès aux lignes auxquelles le CURRENT_ROLE peut accéder
Les entrepôts accessibles
Les procédures stockées pouvant être appelées dans une application Streamlit
Restriction des droits de l’appelant dans les environnements d’exécution de conteneurs¶
Dans les environnements d’exécution de conteneurs, vous pouvez combiner les droits du propriétaire et les droits restreints de l’appelant dans la même application.
Pour créer une connexion qui utilise les droits du propriétaire, utilisez
st.connection("snowflake").Pour créer une connexion qui utilise les droits restreints de l’appelant, utilisez
st.connection("snowflake-callers-rights").
Pour plus d’informations, consultez st.connection et SnowflakeConnection dans la documentation Streamlit.
L’exemple suivant montre comment créer une connexion de droits de l’appelant :
import streamlit as st
conn = st.connection("snowflake-callers-rights")
df = conn.query("SELECT CURRENT_USER()")
st.write(f"Running as: {df[0][0]}")
Conseils et limitations concernant l’utilisation des droits restreints de l’appelant dans les runtimes de conteneurs¶
Le jeton fourni dans l’en-tête
Sf-Context-Current-User-Tokenn’est valide que pendant deux minutes et est créé au début de la session de l’application. Créez les connexions de droits de l’appelant en haut du script de votre application et non derrière les blocs ou les pages if-else.Les connexions de droits restreints de l’appelant utilisent le rôle par défaut du visualiseur et non le rôle qu’il a sélectionné dans Snowsight.
Vous pouvez utiliser à la fois les connexions de droits restreints de l’appelant et les connexions de droits du propriétaire dans la même application en créant plusieurs connexions.
Les connexions de droits restreints de l’appelant ne fonctionnent que lorsque votre application utilise un runtime de conteneur. Si vous essayez d’utiliser une connexion de droits restreints de l’appelant dans un environnement de développement local ou dans un environnement d’exécution d’entrepôt, vous obtiendrez une erreur.
Les droits restreints de l’appelant ne prennent pas en charge les rôles secondaires.
Important
Les connexions de droits restreints de l’appelant sont à l’échelle de la session. Si vous devez mettre en cache des données renvoyées par une connexion de droits restreints de l’appelant, vous devez utiliser la définition de session dans le décorateur de cache. Cela empêche le partage de données entre des sessions. Pour utiliser l’étendue de la session avec la mise en cache, définissez scope="session" dans le décorateur de mise en cache. Pour plus d’informations, consultez st.cache_data dans la documentation Streamlit.