Streamlit in Snowflake 의 행 액세스 정책¶
이 항목에서는 Streamlit in Snowflake 에서 컨텍스트 함수와 행 액세스 정책을 사용하는 방법에 대해 설명합니다.
Streamlit in Snowflake 의 컨텍스트 함수 및 행 액세스 정책¶
Streamlit in Snowflake 앱에서 CURRENT_USER 와 같은 컨텍스트 함수 와 행 액세스 정책 이 적용된 테이블의 데이터를 사용하려면 다음 예제와 같이 ACCOUNTADMIN 역할이 있는 사용자가 Streamlit 앱 소유자 역할에 전역 READ SESSION 권한을 부여해야 합니다.
USE ROLE ACCOUNTADMIN;
GRANT READ SESSION ON ACCOUNT TO ROLE streamlit_owner_role;
참고
Streamlit in Snowflake 앱에서는 CURRENT_ROLE을 사용하는 행 액세스 정책을 사용할 수 없습니다. Streamlit in Snowflake 앱은 소유자 권한으로 실행되므로 Streamlit 앱 내에서 CURRENT_ROLE을 사용하면 항상 앱 소유자 역할이 반환됩니다. 자세한 내용은 소유자 권리 및 Streamlit in Snowflake 앱 이해하기 섹션을 참조하십시오.
예제: 행 액세스 정책이 적용된 테이블의 데이터에 CURRENT_USER를 사용하여 액세스하기¶
행 액세스 정책으로 보호되는 테이블의 행에 대한 액세스를 관리하기 위해 Streamlit in Snowflake 앱을 사용할 수 있습니다. 행 액세스 정책 본문에 CURRENT_USER 함수를 지정하고 행 액세스 정책을 테이블에 추가합니다.
다음 예제는 Streamlit in Snowflake 앱에서 행 액세스 정책으로 보호되는 테이블에 대한 액세스를 제어하는 방법을 보여줍니다.
테이블을 만들고 데이터를 삽입합니다.
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');
행 액세스 정책을 생성합니다.
CREATE OR REPLACE ROW ACCESS POLICY st_schema.row_access_policy AS (the_owner VARCHAR) RETURNS BOOLEAN -> the_owner = CURRENT_USER();
테이블에 행 액세스 정책을 추가합니다.
ALTER TABLE row_access_policy_test_table ADD ROW ACCESS POLICY st_schema.row_access_policy ON (the_owner);
Streamlit 앱을 만듭니다.
Streamlit 앱 소유자 역할에 전역 READ SESSION 권한을 부여합니다.
GRANT READ SESSION ON ACCOUNT TO ROLE streamlit_owner_role;
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)