Politiques d’accès aux lignes dans Streamlit in Snowflake¶
Cette rubrique décrit l’utilisation des fonctions de contexte et des politiques d’accès aux lignes dans Streamlit in Snowflake.
Fonctions de contexte et politiques d’accès aux lignes dans Streamlit in Snowflake¶
Pour utiliser des fonctions contextuelles, telles que CURRENT_USER, et les données des tables avec des politiques d’accès aux lignes dans une application Streamlit in Snowflake, un utilisateur avec le rôle ACCOUNTADMIN doit accorder le privilège global READ SESSION au rôle de propriétaire de l’application Streamlit, comme indiqué dans l’exemple suivant :
USE ROLE ACCOUNTADMIN;
GRANT READ SESSION ON ACCOUNT TO ROLE streamlit_owner_role;
Note
Dans une application Streamlit in Snowflake, vous ne pouvez pas utiliser de politiques d’accès aux lignes qui utilisent CURRENT_ROLE. Les applications Streamlit in Snowflake fonctionnent avec les droits du propriétaire, donc l’utilisation de CURRENT_ROLE à l’intérieur d’une application Streamlit renvoie toujours le rôle de propriétaire de l’application. Pour plus d’informations, voir Comprendre les droits du propriétaire et les applications Streamlit in Snowflake.
Exemple : accéder aux données d’une table avec une politique d’accès aux lignes à l’aide de CURRENT_USER¶
Vous pouvez utiliser une application Streamlit in Snowflake permettant de gérer l’accès aux lignes d’une table protégée par une politique d’accès aux lignes. Précisez la fonction CURRENT_USER dans le corps de la politique d’accès aux lignes et ajoutez la politique d’accès aux lignes à la table.
L’exemple suivant montre comment gérer l’accès à une table protégée par une politique d’accès aux lignes dans une application Streamlit in Snowflake.
Créer une table et insérer des données :
CREATE TABLE row_access_policy_test_table ( id INT, some_data VARCHAR(100), the_owner VARCHAR(50) ); INSERT INTO row_access_policy_test_table (id, some_data, the_owner) VALUES (4, 'Some information 4', 'ALICE'), (5, 'Some information 5', 'FRANK'), (6, 'Some information 6', 'ALICE');
Créez une politique d’accès aux lignes :
CREATE OR REPLACE ROW ACCESS POLICY st_schema.row_access_policy AS (the_owner VARCHAR) RETURNS BOOLEAN -> the_owner = CURRENT_USER();
Ajoutez la politique d’accès aux lignes à la table :
ALTER TABLE row_access_policy_test_table ADD ROW ACCESS POLICY st_schema.row_access_policy ON (the_owner);
Créez une application Streamlit.
Accordez le privilège READ SESSION global au rôle de propriétaire de l’application Streamlit :
GRANT READ SESSION ON ACCOUNT TO ROLE streamlit_owner_role;
Ajoutez le code suivant à votre application Streamlit :
# Import Python packages import streamlit as st from snowflake.snowpark.context import get_active_session st.title("CURRENT_USER() + Row Access Policy in SiS Demo :balloon:") st.write( """You can access `CURRENT_USER()` and data from tables with row access policies in Streamlit in Snowflake apps """) # Get the current credentials session = get_active_session() st.header('Demo') st.subheader('Credentials') sql = "SELECT CURRENT_USER();" df = session.sql(sql).collect() st.write(df) st.subheader('Row Access on a Table') sql = "SELECT * FROM st_db.st_schema.row_access_policy_test_table;" df = session.sql(sql).collect() st.write(df)