Zeilenzugriffsrichtlinien in Streamlit in Snowflake¶
Unter diesem Thema wird die Verwendung von Kontextfunktionen und Zeilenzugriffsrichtlinien in Streamlit in Snowflake beschrieben.
Kontextfunktionen und Zeilenzugriffsrichtlinien in Streamlit in Snowflake¶
Um Kontextfunktionen, wie z. B. CURRENT_USER, und Daten aus Tabellen mit Zeilenzugriffsrichtlinien in einer Streamlit in Snowflake-App zu verwenden, muss ein Benutzer mit der Rolle ACCOUNTADMIN der Eigentümerrolle der Streamlit-App die globale READ SESSION-Berechtigung erteilen, wie im folgenden Beispiel gezeigt:
USE ROLE ACCOUNTADMIN;
GRANT READ SESSION ON ACCOUNT TO ROLE streamlit_owner_role;
Bemerkung
In einer Streamlit in Snowflake-App können Sie keine Zeilenzugriffsrichtlinien verwenden, die CURRENT_ROLE verwenden. Streamlit in Snowflake-Apps werden mit den Rechten des Eigentümers ausgeführt, so dass die Verwendung von CURRENT_ROLE innerhalb einer Streamlit-App immer die Rolle des Eigentümers der App zurückgibt. Weitere Informationen dazu finden Sie unter Erläuterungen zu Eigentümerrechten und Streamlit in Snowflake-Apps.
Beispiel: Zugriff auf Daten in einer Tabelle mit Zeilenzugriffsrichtlinie mit CURRENT_USER¶
Sie können eine Streamlit in Snowflake-App verwenden, um den Zugriff auf Zeilen in einer Tabelle zu regeln, die durch eine Zeilenzugriffsrichtlinie geschützt ist. Geben Sie die Funktion CURRENT_USER im Body der Zeilenzugriffsrichtlinie an und fügen Sie die Zeilenzugriffsrichtlinie der Tabelle hinzu.
Das folgende Beispiel zeigt, wie Sie den Zugriff auf eine Tabelle regeln, die durch eine Zeilenzugriffsrichtlinie auf Zeilen in einer Streamlit in Snowflake-App geschützt ist.
Erstellen Sie eine Tabelle, und fügen Sie Daten ein:
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');
Erstellen Sie eine Zeilenzugriffsrichtlinie:
CREATE OR REPLACE ROW ACCESS POLICY st_schema.row_access_policy AS (the_owner VARCHAR) RETURNS BOOLEAN -> the_owner = CURRENT_USER();
Fügen Sie die Zeilenzugriffsrichtlinie der Tabelle hinzu:
ALTER TABLE row_access_policy_test_table ADD ROW ACCESS POLICY st_schema.row_access_policy ON (the_owner);
Erstellen einer Streamlit-App
Weisen Sie die globale READ SESSION-Berechtigung der Rolle des Eigentümers der Streamlit-App zu:
GRANT READ SESSION ON ACCOUNT TO ROLE streamlit_owner_role;
Fügen Sie den folgenden Code in Ihre Streamlit-App ein:
# 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)