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;
Copy

참고

Streamlit in Snowflake 앱에서는 CURRENT_ROLE을 사용하는 행 액세스 정책을 사용할 수 없습니다. Streamlit in Snowflake 앱은 소유자 권한으로 실행되므로 Streamlit 앱 내에서 CURRENT_ROLE을 사용하면 항상 앱 소유자 역할이 반환됩니다. 자세한 내용은 소유자 권리 및 Streamlit in Snowflake 앱 이해하기 섹션을 참조하십시오.

예제: 행 액세스 정책이 적용된 테이블의 데이터에 CURRENT_USER를 사용하여 액세스하기

행 액세스 정책으로 보호되는 테이블의 행에 대한 액세스를 관리하기 위해 Streamlit in Snowflake 앱을 사용할 수 있습니다. 행 액세스 정책 본문에 CURRENT_USER 함수를 지정하고 행 액세스 정책을 테이블에 추가합니다.

다음 예제는 Streamlit in Snowflake 앱에서 행 액세스 정책으로 보호되는 테이블에 대한 액세스를 제어하는 방법을 보여줍니다.

  1. 테이블을 만들고 데이터를 삽입합니다.

    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');
    
    Copy
  2. 행 액세스 정책을 생성합니다.

    CREATE OR REPLACE ROW ACCESS POLICY st_schema.row_access_policy
    AS (the_owner VARCHAR) RETURNS BOOLEAN ->
        the_owner = CURRENT_USER();
    
    Copy
  3. 테이블에 행 액세스 정책을 추가합니다.

    ALTER TABLE row_access_policy_test_table ADD ROW ACCESS POLICY st_schema.row_access_policy ON (the_owner);
    
    Copy
  4. Streamlit 앱을 만듭니다.

  5. Streamlit 앱 소유자 역할에 전역 READ SESSION 권한을 부여합니다.

    GRANT READ SESSION ON ACCOUNT TO ROLE streamlit_owner_role;
    
    Copy
  6. 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)
    
    Copy