Sessões do Snowflake e políticas de sessão

Este tópico descreve as sessões do Snowflake e as políticas de sessão e fornece instruções para configurar as políticas de sessão em nível de conta ou de usuário.

Neste tópico:

Sessões do Snowflake

Uma sessão começa quando um usuário se conecta ao Snowflake e se autentica com sucesso usando um cliente programático do Snowflake, a Snowsight ou a Classic Console. Uma sessão é independente da sessão de um provedor de identidade (isto é, IdP). Se a sessão Snowflake expirar mas a sessão do IdP permanecer ativa, um usuário pode entrar no Snowflake sem fornecer novamente suas credenciais de login (ou seja, autenticação silenciosa).

A sessão é mantida indefinidamente com a atividade contínua do usuário. Após um período de inatividade na sessão, conhecido como tempo limite de sessão ociosa, o usuário deve se autenticar novamente no Snowflake. O tempo limite de sessão ociosa tem um valor máximo de quatro horas e uma política de sessão pode modificar o período de tempo limite da sessão ociosa. O tempo limite de sessão ociosa se aplica aos seguinte elementos:

O Snowflake recomenda reutilizar as sessões existentes quando possível e fechar a conexão com o Snowflake quando uma sessão não for mais necessária.

Sessões do Snowsight

Snowflake cria uma nova sessão para cada planilha no Snowsight. Uma sessão de planilha impõe a política de sessão que se aplica ao usuário que cria a planilha.

Cuidado

As consultas ativas não são canceladas quando a sessão termina e o usuário é desconectado, mesmo que o parâmetro ABORT_DETACHED_QUERY esteja definido como verdadeiro.

Sessões do console clássico

Na guia Worksheets Worksheet tab, o Snowflake cria uma nova sessão toda vez que uma nova planilha é criada. Cada planilha é limitada a um máximo de 4 horas de comportamento ocioso, e o tempo ocioso de cada planilha é rastreado separadamente.

Quando uma planilha é fechada, a sessão do usuário para a planilha é encerrada.

Depois que o limite de 4 horas expira para qualquer planilha aberta, o Snowflake faz o logout do usuário da interface da Web.

Nota

Observe que comportamentos passivos, tais como rolar pelo conjunto de resultados da consulta ou ordenar um conjunto de dados, não reinicializam o controlador de tempo limite de sessão ociosa.

Para evitar o encerramento precoce da sessão e a desconexão da Classic Console, salve todas as instruções SQL necessárias em um arquivo local e feche as planilhas abertas que não estejam em uso.

Políticas de sessão

Uma política de sessão define o tempo limite de sessão ociosa em minutos e oferece a opção de ignorar o valor padrão de tempo limite de inatividade de 4 horas.

A política de sessão pode ser definida para uma conta ou usuário com períodos de tempo limite de inatividade configuráveis para atender às exigências de conformidade. Se um usuário está associado tanto a uma conta quanto a uma política de sessão no nível de usuário, a política de sessão no nível de usuário tem precedência. Após a política da sessão ser definida por conta ou usuário, Snowflake aplica a política da sessão.

Há duas propriedades que regem o comportamento da política da sessão:

  • SESSION_IDLE_TIMEOUT_MINS para clientes programáticos e do Snowflake.

  • SESSION_UI_IDLE_TIMEOUT_MINS para Classic Console e Snowsight.

O período de tempo limite começa com uma autenticação bem sucedida no Snowflake. Se uma política de sessão não for definida, o Snowflake usa um valor padrão de 240 minutos (ou seja, 4 horas). O valor mínimo de tempo ocioso configurável para uma política de sessão é de 5 minutos. Quando a sessão expirar, o usuário deve autenticar-se novamente no Snowflake. No entanto, o Snowflake não impõe nenhuma configuração definida pelo Ponto de extremidade de logout personalizado.

Para obter mais informações, consulte:

Considerações

  • Se um cliente oferece suporte à opção CLIENT_SESSION_KEEP_ALIVE e a opção está definida para TRUE, o cliente preserva a sessão do Snowflake indefinidamente enquanto a conexão com o Snowflake estiver ativa. Caso contrário, se a opção for definida para FALSE, a sessão termina após 4 horas. Quando possível, evite usar esta opção, pois isso pode resultar em muitas sessões abertas e aumentar a demanda de recursos, levando a uma degradação do desempenho.

  • Você pode usar o parâmetro CLIENT_SESSION_KEEP_ALIVE_HEARTBEAT_FREQUENCY para especificar o número de segundos entre as tentativas do cliente de atualizar o token da sessão. A sessão da interface da Web pode ser atualizada à medida que objetos Snowflake continuam a ser usados, como a execução de instruções DDL e DML. O Snowflake verifica esse comportamento a cada 30 segundos.

  • Criar uma nova planilha ou abrir uma planilha existente continua a utilizar a sessão de usuário estabelecida, mas o tempo limite de sessão ociosa é redefinido para 0.

  • Rastreamento do uso da política de sessão:

    • Consulte a exibição SESSION_POLICIES do Account Usage para retornar uma linha para cada política de sessão em sua conta Snowflake.

    • Use a função de tabela do Information Schema POLICY_REFERENCES para retornar uma linha para cada usuário que é atribuído à política de senhas especificada e uma linha para a política de senhas atribuída à conta Snowflake.

      Atualmente, apenas a seguinte sintaxe é suportada para as políticas da sessão:

      POLICY_REFERENCES( POLICY_NAME => '<session_policy_name>' )
      
      Copy

      Em que session_policy_name é o nome completo e qualificado da política de sessão.

      Por exemplo, execute a seguinte consulta para retornar uma linha para cada usuário ao qual é atribuída a política de sessão chamada session_policy_prod_1, que é armazenada no banco de dados chamado my_db e o esquema chamado my_schema:

      SELECT *
      FROM TABLE(
        MY_DB.INFORMATION_SCHEMA.POLICY_REFERENCES(
          POLICY_NAME => 'my_db.my_schema.session_policy_prod_1'
        )
      );
      
      Copy

Limitações

Concessões futuras

Concessões futuras de privilégios em políticas de sessão não são suportadas.

Como alternativa, conceda o privilégio APPLYSESSION POLICY a uma função personalizada para permitir que esta função aplique políticas de sessão em um usuário ou conta Snowflake.

Como implementar uma política de sessão

Os seguintes passos são um guia representativo para implementar uma política de sessão.

Esses passos pressupõem uma abordagem de gerenciamento centralizado no qual uma função personalizada chamada policy_admin possui a política da sessão (ou seja, tem o privilégio OWNERSHIP da política da sessão) e é responsável por definir a política de sessão de uma conta ou usuário (ou seja, tem o privilégio APPLY SESSION POLICY sobre ACCOUNT ou o privilégio APPLY SESSION POLICY ON USER).

Nota

Para definir uma política em uma conta, a função personalizada policy_admin deve ter as seguintes permissões:

  • USAGE no banco de dados e no esquema que contém a política de sessão.

  • CREATE SESSION POLICY no esquema que contém a política de sessão.

Siga os passos a seguir para implementar uma política de sessão.

Passo 1: Criar a função personalizada POLICY_ADMIN

Crie uma função personalizada que permita aos usuários criar e gerenciar políticas de sessão. Ao longo deste tópico, a função personalizada de exemplo é denominada policy_admin, embora a função possa ter qualquer nome apropriado.

Se a função personalizada já existir, continue para o próximo passo.

Caso contrário, crie a função personalizada POLICY_ADMIN.

USE ROLE USERADMIN;

CREATE ROLE policy_admin;
Copy

Passo 2: Conceder privilégios à função personalizada POLICY_ADMIN

Se a função personalizada POLICY_ADMIN ainda não tiver os seguintes privilégios, conceda-os como mostrado abaixo:

  • USAGE no banco de dados e no esquema que conterá a política de sessão.

  • CREATE SESSION POLICY no esquema que conterá a política de sessão.

  • APPLY SESSION POLICY na conta.

  • APPLY SESSION POLICY em cada usuário, se você planeja definir políticas de sessão em nível de usuário.

USE ROLE SECURITYADMIN;

GRANT USAGE ON DATABASE mydb TO ROLE policy_admin;

GRANT USAGE, CREATE SESSION POLICY ON SCHEMA mydb.policies TO ROLE policy_admin;

GRANT APPLY SESSION POLICY ON ACCOUNT TO ROLE policy_admin;
Copy

Se for associar uma política de sessão a um usuário individual:

GRANT APPLY SESSION POLICY ON USER jsmith TO ROLE policy_admin;
Copy

Para obter mais informações, consulte Resumo de comandos DDL, operações e privilégios.

Passo 3: Criar uma nova política de sessão

Usando a função personalizada POLICY_ADMIN, crie uma nova política de sessão onde o valor do tempo limite ocioso para clientes programáticos, clientes Snowflake, e a interface da Web é de 60 minutos cada. Para obter mais informações, consulte CREATE SESSION POLICY.

USE ROLE POLICY_ADMIN;

CREATE SESSION POLICY mydb.policies.session_policy_prod_1
  SESSION_IDLE_TIMEOUT_MINS = 60
  SESSION_UI_IDLE_TIMEOUT_MINS = 60
  COMMENT = 'Session policy for the prod_1 environment'
;
Copy

Onde:

mydb.policies.session_policy_prod_1

O nome completo e qualificado da política de sessão.

session_idle_timeout_mins = 60

O tempo limite ocioso em minutos para clientes Snowflake e clientes programáticos.

session_ui_idle_timeout_mins = 30

O período de tempo ocioso em minutos para a interface da Web do Snowflake.

comment = 'Session policy for the prod_1 environment'

Um comentário especificando o objetivo da política de sessão.

Passo 4: Definir a política de sessão para uma conta ou usuário

Usando a função personalizada POLICY_ADMIN, defina a política para uma conta com o comando ALTER ACCOUNT, ou para um usuário (por exemplo, nome de usuário jsmith) com o comando ALTER USER.

USE ROLE policy_admin;

ALTER ACCOUNT SET SESSION POLICY mydb.policies.session_policy_prod_1;

ALTER USER jsmith SET SESSION POLICY my_database.my_schema.session_policy_prod_1_jsmith;
Copy

Importante

Para substituir uma política de sessão que já está definida para uma conta ou usuário, primeiro desative a política de sessão e depois defina a nova política de sessão para a conta ou usuário. Por exemplo:

ALTER ACCOUNT UNSET session policy;

ALTER ACCOUNT SET SESSION POLICY mydb.policies.session_policy_prod_2;
Copy

Etapa 5: Replicar a política de sessão a uma conta de destino

Uma política de sessão e suas referências (ou seja, atribuições a um usuário ou à conta) podem ser replicadas da conta de origem para a conta de destino usando replicação de banco de dados e replicação de conta. Para obter mais detalhes, consulte:

Gerenciamento de políticas de sessão

Referência dos privilégios da política de sessão

O Snowflake oferece suporte aos seguintes privilégios de política de sessão para determinar se um usuário pode criar, definir e ser proprietário de políticas de sessão.

Observe que operar em qualquer objeto de um esquema também requer o privilégio USAGE no banco de dados e esquema principais.

Privilégio

Uso

CREATE

Permite a criação de uma nova política de sessão em um esquema.

APPLY SESSION POLICY

Permite aplicar uma política de sessão em nível de conta ou de usuário.

OWNERSHIP

Concede total controle sobre a política da sessão. Necessário para alterar a maioria das propriedades de uma política de sessão.

Resumo de comandos DDL, operações e privilégios

A seguinte tabela resume a relação entre as operações DDL da política de sessão e seus privilégios necessários.

Operação

Privilégio necessário

Criar política de sessão

Uma função com o privilégio CREATE SESSION POLICY no esquema.

Alterar política de sessão

Uma função com o privilégio OWNERSHIP na política de sessão.

Descartar política de sessão

Uma função com o privilégio OWNERSHIP na política de sessão.

Descrever política de sessão

Uma função com o privilégio OWNERSHIP na política de sessão ou . o privilégio APPLY SESSION POLICY na conta.

Mostrar as políticas de sessão

Uma função com o privilégio OWNERSHIP na política de sessão ou . o privilégio APPLY SESSION POLICY na conta.

Definir e remover definição da política de sessão

Para contas, uma função com o privilégio APPLY SESSION POLICY na conta e o privilégio OWNERSHIP na política da sessão, ou uma função com o privilégio APPLY SESSION POLICY na conta e o privilégio APPLY ON SESSION POLICY em uma política específica da sessão.

Para os usuários, uma função com o privilégio APPLY SESSION POLICY em USER <nome_usuário>.

Referência DDL da política de sessão

O Snowflake fornece os seguintes comandos DDL para gerenciar os objetos da política de sessão:

Para definir ou remover a definição de uma política de sessão na conta, execute o comando ALTER ACCOUNT como mostrado abaixo.

ALTER ACCOUNT SET SESSION POLICY mydb.policies.session_policy_prod_1;
Copy
ALTER ACCOUNT UNSET SESSION POLICY;
Copy

Para definir ou remover a definição de uma política de sessão em nível de usuário, execute o comando ALTER USER como mostrado abaixo.

ALTER USER jsmith SET SESSION POLICY mydb.policies.session_policy_prod_1_jsmith;
Copy
ALTER USER jsmith UNSET SESSION POLICY;
Copy

Solução de problemas das políticas de sessão

  • Se uma política de sessão for atribuída a uma conta ou a um usuário e o banco de dados ou esquema que contém a política de sessão for descartado, e depois uma nova política de sessão for atribuída à conta ou ao usuário, o usuário não estará sujeito ao(s) valor(es) de tempo de limite de sessão ociosa da nova política de sessão.

    A solução é remover a definição da política de sessão original da conta usando um comando ALTER ACCOUNT ou do usuário usando um comando ALTER USER, como mostrado neste tópico.

  • A tabela a seguir resume algumas mensagens de erro que podem ocorrer com as políticas de sessão.

    Comportamento

    Mensagem de erro

    Ação de solução de problemas

    Não é possível criar uma política de sessão.

    Não é possível executar CREATE SESSION POLICY. Esta sessão não dispõe de um banco de dados atual. Chame “USE DATABASE” ou use um nome qualificado.

    Especifique um banco de dados antes de executar CREATE SESSION POLICY ou de usar o nome do objeto totalmente qualificado na instrução CREATE SESSION POLICY.

    Não é possível criar uma política de sessão.

    Erro de controle de acesso SQL: privilégios insuficientes para operar no esquema “<schema_name>”.

    Verifique se a função que está executando a instrução CREATE SESSION POLICY tem o privilégio CREATE SESSION POLICY no SCHEMA.

    Não é possível criar uma política de sessão.

    Erro de compilação SQL: o banco de dados “<database_name>” não existe ou não está autorizado.

    Verifique se o banco de dados existe e se a função que está executando a instrução CREATE SESSION POLICY tem o privilégio USAGE no esquema em que a política da sessão deve existir.

    Não é possível executar uma instrução descritiva.

    Erro de compilação SQL: o esquema ‘<nome_do_esquema>’ não existe ou não é autorizado.

    Verifique se a função que está executando a instrução DESC SESSION POLICY tem o privilégio OWNERSHIP na política da sessão ou o privilégio APPLY na política de sessão.

    Não é possível descartar uma política de sessão.

    Erro de compilação SQL: a política de sessão “<policy_name>” não existe ou não é autorizada.

    Verifique se a função que está executando a instrução DROP SESSION POLICY tem o privilégio OWNERSHIP para a política da sessão.

    Não é possível descartar uma política de sessão.

    Não é possível descartar a política de sessão <policy_name> porque ela está vinculada a uma conta.

    Remova a definição da política de sessão da conta com uma instrução ALTER ACCOUNT e tente executar a instrução de descarte novamente.

    Não é possível definir uma política de sessão para uma conta.

    A política de sessão “<policy_name> já está vinculada à conta <account_name>.

    Uma conta só pode ter uma política de sessão ativa. Determine qual política de sessão deve ser definida para a conta. . Se necessário, remova a definição da política de sessão atual da conta com um comando ALTER ACCOUNT. Em seguida, defina a outra política de sessão para a conta com outro comando ALTER ACCOUNT.

    Não é possível definir um valor de tempo limite.

    Erro de compilação SQL: valor inválido “<integer>” para propriedade “session_idle_timeout_mins”.

    O valor de tempo limite da sessão, em minutos, deve ser um número inteiro entre 5 e 240. . Escolha um número inteiro válido para o tempo limite da sessão e execute novamente a instrução CREATE ou ALTER SESSION POLICY.

    Não é possível atualizar uma política de sessão existente.

    Erro de compilação SQL: a política de sessão “<policy_name>” não existe ou não é autorizada.

    Verifique o nome da política de sessão, a sintaxe do comando ALTER SESSION POLICY e os privilégios para operar na política, no banco de dados e no esquema da sessão.