Beschränkte Aufruferrechte und Streamlit in Snowflake¶
Standardmäßig werden alle Streamlit in Snowflake-Apps mit den Berechtigungen des Eigentümers ausgeführt, nicht mit den Berechtigungen des Aufrufers. Der Entwickler der Streamlit-App kann festlegen, ob eine Container-Laufzeit-App mit Eigentümerrechten oder mit eingeschränkten Aufruferrechten ausgeführt wird. Eingeschränkte Aufruferrechte werden in Warehouse-Laufzeitumgebungen nicht unterstützt.
Beschränkte Aufruferrechte erlauben einer Streamlit-App, mit den Aufruferrechten ausgeführt zu werden, schränken aber ein, mit welchen Aufruferrechten die App ausgeführt werden kann. Bei eingeschränkten Aufruferrechten kann eine Streamlit-App nur dann mit einer bestimmten Berechtigung ausgeführt werden, wenn dies ausdrücklich von einem Administrator zugelassen wird. Administratoren verwenden Aufruferrechte, um festzulegen, mit welchen Aufruferrechten eine App ausgeführt werden kann. Auf diese Weise greifen Streamlit-Apps nur auf Daten zu (im Namen des Betrachters), für die sie eine Zugriffsberechtigung haben.
Weitere Informationen dazu finden Sie unter Beschränkte Aufruferrechte.
Erforderliche Aufruferrechte¶
Um im Namen des Betrachters auf Tabellen, gespeicherte Prozeduren oder Warehouses zugreifen zu können, müssen dem Streamlit-App-Entwickler die Aufruferrechte von einem Benutzenden mit der MANAGE CALLER GRANTS-Berechtigung gewährt werden.
Beispiel-Workflow¶
Der Administrator gewährt dieMANAGE CALLER GRANTS-Berechtigung der Rolle
data_science_manager:GRANT MANAGE CALLER GRANTS ON ACCOUNT TO ROLE data_science_manager;
Ein Benutzender mit der Rolle
data_science_managergewährt der Rollestreamlit_app_developerdie folgenden Berechtigungen:Aufrufer-Auswahlberechtigungen für die Rolle
streamlit_app_developer, damit Streamlit-Apps, deren Eigentümer diese Rolle ist, die auf die Tabellestreamlit_db.streamlit_schema.streamlit_tablezugreifen kann, mit der SELECT-Berechtigung für diese Tabelle ausgeführt werden können:GRANT CALLER SELECT ON TABLE streamlit_db.streamlit_schema.streamlit_table TO ROLE streamlit_app_developer;
Aufrufer-Nutzungsberechtigungen für die Rolle
streamlit_app_developer, damit sie das Warehousestreamlit_whverwenden kann:GRANT CALLER USAGE ON WAREHOUSE streamlit_wh TO ROLE streamlit_app_developer;
Weitere Informationen über Aufruferrechte finden Sie unter:ref:label-restricted-callers-rights-about-grants und:doc:/sql-reference/sql/grant-caller.
Anwendungsfälle für eingeschränkte Aufruferrechte in Streamlit in Snowflake¶
Mit eingeschränkten Aufruferrechten in Streamlit in Snowflake können Sie Folgendes steuern:
Welche Seiten einer Streamlit-App verfügbar sind
Welche Daten in der Streamlit-App verfügbar sind
Auf welche Daten mit Zeilenzugriffsrichtlinien die CURRENT_ROLE zugreifen kann
Auf welche Warehouses Zugriff besteht
Welche gespeicherten Prozeduren in einer Streamlit-App aufgerufen werden können
Eingeschränkte Aufruferrechte in Container-Laufzeitumgebungen¶
In Container-Laufzeitumgebungen können Sie Eigentümerrechte und eingeschränkte Aufruferrechte in derselben App kombinieren.
Um eine Verbindung zu erstellen, die Eigentümerrechte nutzt, verwenden Sie
st.connection("snowflake").Um eine Verbindung zu erstellen, die eingeschränkte Aufruferrechte verwendet, verwenden Sie
st.connection("snowflake-callers-rights").
Weitere Informationen finden Sie in der Streamlit-Dokumentation unter st.connection und SnowflakeConnection.
Das folgende Beispiel zeigt, wie Sie eine Verbindung mit Aufruferrechten erstellen:
import streamlit as st
conn = st.connection("snowflake-callers-rights")
df = conn.query("SELECT CURRENT_USER()")
st.write(f"Running as: {df[0][0]}")
Tipps und Einschränkungen zur Verwendung eingeschränkter Aufruferrechte in Container-Laufzeitumgebungen¶
Das im
Sf-Context-Current-User-Token-Header angegebene Token ist nur zwei Minuten lang gültig und wird zu Beginn der App-Sitzung erstellt. Erstellen Sie Verbindungen mit Aufruferrechten oben in Ihrem App-Skript und nicht hinter „if-else“-Blöcken oder -Seiten.Verbindungen mit eingeschränkten Aufruferrechten verwenden die Betrachter-Standardrolle und nicht die Rolle, die in Snowsight ausgewählt wurde.
Sie können in derselben App sowohl Verbindungen mit eingeschränkten Aufruferrechten als auch Verbindungen mit regulären Eigentümerrechten verwenden, indem Sie mehrere Verbindungen erstellen.
Verbindungen mit eingeschränkten Aufruferrechten funktionieren nur, wenn Ihre App eine Container-Laufzeitumgebung verwendet. Wenn Sie versuchen, eine Verbindung mit eingeschränkten Aufruferrechten in einer lokalen Entwicklungsumgebung oder in einer Warehouse-Laufzeitumgebung zu verwenden, tritt ein Fehler auf.
Beschränkte Aufruferrechte unterstützen keine Sekundärrollen.
Wichtig
Verbindungen mit eingeschränkten Aufruferrechten sind sitzungsbezogen. Wenn Sie Daten zwischenspeichern müssen, die von einer Verbindung mit eingeschränkten Aufruferrechten zurückgegeben werden, müssen Sie im Cache-Decorator den Sitzungsbereich verwenden. Dadurch wird verhindert, dass Daten gemeinsam von Sitzungen verwendet werden. Um den Sitzungsbereich mit Caching zu verwenden, legen Sie im Caching-Decorator scope="session" fest. Weitere Informationen finden Sie in der Streamlit-Dokumentation unter st.cache_data.