Direitos restritos do autor da chamada e do Streamlit in Snowflake

Por padrão, todos os apps Streamlit in Snowflake :doc:` são executados com os privilégios do proprietário </developer-guide/streamlit/object-management/owners-rights>`, não com os privilégios do autor da chamada. O desenvolvedor do app Streamlit pode definir se um app de tempo de execução de contêiner é executado com direitos do proprietário ou direitos restritos do autor da chamada. Direitos restritos do autor da chamada não são compatíveis em tempos de execução de warehouse.

Os direitos restritos do autor da chamada permitem que um app Streamlit seja executado com direitos de autor da chamada, mas restrigem quais privilégios do autor da chamada o app pode usar. Com os direitos restritos do autor da chamada, não é possível executar um app Streamlit com um privilégio específico, a menos que um administrador permita isso expressamente. Os administradores usam concessões de autor da chamada para definir quais privilégios de autor da chamada um app pode usar. Dessa forma, os apps Streamlit acessam apenas os dados (em nome do visualizador) aos quais estão autorizados.

Para obter mais informações, consulte Direitos restritos do chamador.

Concessões do autor da chamada necessárias

Para acessar quaisquer tabelas, procedimentos armazenados ou warehouses em nome do visualizador, o desenvolvedor do app Streamlit deve ter as concessões de autor da chamada concedidas por um usuário com o privilégio MANAGE CALLER GRANTS.

Exemplo de fluxo de trabalho

  1. O administrador concede o privilégio MANAGE CALLER GRANTS à função data_science_manager:

    GRANT MANAGE CALLER GRANTS ON ACCOUNT TO ROLE data_science_manager;
    
    Copy
  2. Um usuário com a função data_science_manager concede os seguintes privilégios à função streamlit_app_developer:

    • Privilégios de seleção do autor da chamada à função streamlit_app_developer para que os apps Streamlit pertencentes a essa função que acessam a tabela streamlit_db.streamlit_schema.streamlit_table possam ser executados com o privilégio SELECT nessa tabela:

      GRANT CALLER SELECT ON TABLE streamlit_db.streamlit_schema.streamlit_table TO ROLE streamlit_app_developer;
      
      Copy
    • Privilégios de uso do autor da chamada à função streamlit_app_developer para usar o warehouse streamlit_wh:

      GRANT CALLER USAGE ON WAREHOUSE streamlit_wh TO ROLE streamlit_app_developer;
      
      Copy

Para obter mais informações sobre concessões do autor da chamada, consulte Sobre as concessões do chamador e GRANT CALLER.

Casos de uso para direitos restritos do autor da chamada no Streamlit in Snowflake

Os direitos restritos do autor da chamada em Streamlit in Snowflake permitem controlar o seguinte:

  • Quais páginas de um app Streamlit estão disponíveis

  • Quais dados no app Streamlit estão disponíveis

  • Quais dados com políticas de acesso a linhas o CURRENT_ROLE pode acessar

  • Quais warehouses são acessíveis

  • Quais procedimentos armazenados podem ser chamados em um app Streamlit

Direitos restritos do autor da chamada em tempos de execução de contêiner

Em tempos de execução de contêiner, você pode combinar direitos de proprietário e direitos restritos do autor da chamada no mesmo app.

  • Para criar uma conexão que utiliza direitos de proprietário, use st.connection("snowflake").

  • Para criar uma conexão que utiliza direitos restritos do autor da chamada, use st.connection("snowflake-callers-rights").

Para obter mais informações, consulte st.connection e SnowflakeConnection na documentação do Streamlit.

O exemplo a seguir mostra como criar uma conexão com direitos de autor da chamada:

import streamlit as st

conn = st.connection("snowflake-callers-rights")
df = conn.query("SELECT CURRENT_USER()")
st.write(f"Running as: {df[0][0]}")
Copy

Dicas e limitações para usar direitos de autor da chamada restritos em ambientes de execução de contêiner

  • O token fornecido no cabeçalho Sf-Context-Current-User-Token é válido por apenas dois minutos e é criado no início da sessão do app. Crie quaisquer conexões com direitos de autor da chamada no início do script do seu app e não dentro de páginas ou blocos if-else.

  • As conexões com direitos de autor da chamada restritos usam a função padrão do visualizador e não a função que ele selecionou no Snowsight.

  • Ao criar várias conexões, você pode usar conexões com direitos de autor da chamada restritos e conexões com direitos de proprietário regulares no mesmo app.

  • As conexões com direitos de autor da chamada restritos funcionam apenas quando seu app está usando um ambiente de execução de contêiner. Se você tentar usar uma conexão com direitos de autor da chamada restritos em um ambiente de desenvolvimento local ou em um ambiente de tempo de execução de warehouse, você receberá um erro.

  • Os direitos restritos do autor da chamada não são compatíveis com funções secundárias.

Importante

As conexões de direitos restritos do autor da chamada têm escopo de sessão. Se você precisar armazenar em cache os dados retornados de uma conexão com direitos restritos do autor da chamada, deverá usar o escopo de sessão no decorador de cache. Isso impede que os dados sejam compartilhados entre sessões. Para usar o escopo de sessão com o cache, defina scope="session" no decorador de cache. Para obter mais informações, consulte st.cache_data na documentação do Streamlit.