Uso de tokens de acesso programático para autenticação

Você pode usar um token de acesso programático para se autenticar nos seguintes pontos de extremidade do Snowflake:

Nota

Ainda não há suporte para o uso de tokens de acesso programático para autenticação nos pontos de extremidade do Snowpark Container Services.

Você também pode usar um token de acesso programático como substituto de uma senha da seguinte forma:

Você pode gerar tokens de acesso programático para usuários humanos (usuários com TYPE=PERSON) e usuários de serviço (usuários com TYPE=SERVICE).

Pré-requisitos

Você deve cumprir os seguintes pré-requisitos para gerar e usar tokens de acesso programático:

Requisitos da política de redes

Por padrão, o usuário deve estar sujeito a uma política de redes com uma ou mais regras de rede para gerar ou usar tokens de acesso programático:

  • Para usuários de serviço (onde TYPE=SERVICE para o usuário), você só pode gerar ou usar um token se o usuário estiver sujeito a uma política de redes.

    Esse pré-requisito limita o uso do token a solicitações de um conjunto específico de endereços ou identificadores de rede.

  • Para usuários humanos (onde TYPE=PERSON para o usuário), você pode gerar um token mesmo que o usuário não esteja sujeito a uma política de redes, mas o usuário deve estar sujeito a uma política de redes para se autenticar com esse token.

    Se um usuário humano que não estiver sujeito a uma política de redes precisar usar um token de acesso programático para autenticação, você poderá ignorar temporariamente o requisito de ter uma política de redes, mas não recomendamos isso. Consulte Geração de um token de acesso programático.

    Nota

    Os usuários não podem ignorar a própria política de redes.

A política de redes pode ser ativada para todos os usuários da conta ou para um usuário específico.

Para alterar esse requisito, crie ou modifique uma política de autenticação que especifique uma política de token de acesso programático.

Execute o comando CREATE AUTHENTICATION POLICY ou ALTER AUTHENTICATION POLICY. Na cláusula PAT_POLICY, defina NETWORK_POLICY_EVALUATION como um dos seguintes valores:

ENFORCED_REQUIRED (comportamento padrão)

O usuário deve estar sujeito a uma política de redes para gerar e usar tokens de acesso programático.

Se o usuário estiver sujeito a uma política de redes, a política de redes será aplicada durante a autenticação.

ENFORCED_NOT_REQUIRED

O usuário não precisa estar sujeito a uma política de redes para gerar e usar tokens de acesso programático.

Se o usuário estiver sujeito a uma política de redes, a política de redes será aplicada durante a autenticação.

NOT_ENFORCED

O usuário não precisa estar sujeito a uma política de redes para gerar e usar tokens de acesso programático.

Se o usuário estiver sujeito a uma política de redes, a política de redes não será aplicada durante a autenticação.

Por exemplo, para criar uma política de autenticação que remova o requisito de política de redes, mas que aplique qualquer política de redes à qual o usuário esteja sujeito:

CREATE AUTHENTICATION POLICY my_authentication_policy
  PAT_POLICY=(
    NETWORK_POLICY_EVALUATION = ENFORCED_NOT_REQUIRED
  );
Copy

Em seguida, aplica a política de autenticação a uma conta ou usuário.

Como outro exemplo, alterar uma política de autenticação existente para remover o requisito da política de redes e impedir a aplicação de qualquer política de redes à qual o usuário esteja sujeito:

ALTER AUTHENTICATION POLICY my_authentication_policy
  SET PAT_POLICY = (
    NETWORK_POLICY_EVALUATION = NOT_ENFORCED
  );
Copy

Requisitos da política de autenticação

Se houver uma política de autenticação que limite os métodos de autenticação de um usuário, o usuário não poderá gerar e usar tokens de acesso programático, a menos que a lista AUTHENTICATION_METHODS dessa política inclua 'PROGRAMMATIC_ACCESS_TOKEN'.

Por exemplo, suponha que uma política de autenticação limite os usuários ao uso dos métodos OAuth e de senha para autenticação:

CREATE AUTHENTICATION POLICY my_auth_policy
  ...
  AUTHENTICATION_METHODS = ('OAUTH', 'PASSWORD')
  ...
Copy

Os usuários não podem gerar e usar tokens de acesso programático, a menos que você adicione 'PROGRAMMATIC_ACCESS_TOKEN' à lista AUTHENTICATION_METHODS. Você pode usar o comando ALTER AUTHENTICATION POLICY para atualizar essa lista.

Por exemplo:

ALTER AUTHENTICATION POLICY my_auth_policy
  SET AUTHENTICATION_METHODS = ('OAUTH', 'PASSWORD', 'PROGRAMMATIC_ACCESS_TOKEN');
Copy

Configuração do tempo de expiração padrão e máximo

Os administradores (usuários com a função ACCOUNTADMIN) podem definir as seguintes configurações que afetam o tempo de expiração dos tokens de acesso programático:

Configuração do tempo máximo de expiração

Por padrão, você pode especificar um tempo de expiração de até 365 dias para um token. Se quiser reduzir esse tempo para um período menor, crie ou modifique uma política de autenticação que especifique uma política de token de acesso programático com um tempo máximo de expiração.

Execute o comando CREATE AUTHENTICATION POLICY ou ALTER AUTHENTICATION POLICY. Na cláusula PAT_POLICY, defina MAX_EXPIRY_IN_DAYS como um valor que varia de 1 a 365.

Por exemplo, para criar uma política de autenticação que defina o máximo para 100 dias:

CREATE AUTHENTICATION POLICY my_authentication_policy
  PAT_POLICY=(
    MAX_EXPIRY_IN_DAYS=100
  );
Copy

Em seguida, aplica a política de autenticação a uma conta ou usuário.

Como outro exemplo, para alterar uma política de autenticação existente e definir o máximo para 90 dias:

ALTER AUTHENTICATION POLICY my_authentication_policy
  SET PAT_POLICY = (
    MAX_EXPIRY_IN_DAYS=90
  );
Copy

Nota

Se houver tokens de acesso programático existentes com tempos de expiração que excedam o novo tempo máximo de expiração, as tentativas de autenticação com esses tokens falharão.

Por exemplo, suponha que você gere um token de acesso programático chamado my_token com o tempo de expiração de 7 dias. Se você alterar posteriormente o tempo máximo de expiração de todos os tokens para 2 dias, a autenticação com my_token falhará porque o tempo de expiração do token excede o novo tempo máximo de expiração.

Configuração do tempo de expiração padrão

Por padrão, um token de acesso programático expira após 15 dias. Se quiser alterar isso, crie ou modifique uma política de autenticação que especifique uma política de token de acesso programático com uma expiração padrão.

Execute o comando CREATE AUTHENTICATION POLICY ou ALTER AUTHENTICATION POLICY. Na cláusula PAT_POLICY, defina DEFAULT_EXPIRY_IN_DAYS como um valor que varia de 1 até o tempo máximo de expiração.

Por exemplo, para criar uma política de autenticação que defina o padrão como 5 dias:

CREATE AUTHENTICATION POLICY my_authentication_policy
  PAT_POLICY=(
    DEFAULT_EXPIRY_IN_DAYS=5
  );
Copy

Em seguida, aplica a política de autenticação a uma conta ou usuário.

Como outro exemplo, para alterar uma política de autenticação existente para definir o padrão para 30 dias:

ALTER AUTHENTICATION POLICY my_authentication_policy
  SET PAT_POLICY = (
    DEFAULT_EXPIRY_IN_DAYS=30
  );
Copy

Privilégios necessários para tokens de acesso programático

Para criar e gerenciar um token de acesso programático, você precisa usar uma função à qual foram concedidos os seguintes privilégios:

  • Para usuários humanos (com TYPE=PERSON), você não precisa de nenhum privilégio especial para gerar, modificar, descartar ou exibir um token de acesso programático para si mesmo.

  • Se estiver gerando, modificando, descartando ou exibindo um token de acesso programático para um usuário diferente ou um usuário de serviço (com TYPE=SERVICE), o usuário deverá usar uma função que tenha o privilégio OWNERSHIP ou MODIFY PROGRAMMATIC AUTHENTICATION METHODS nesse usuário.

    Por exemplo, suponha que você queira conceder aos usuários com a função personalizada my_service_owner_role a capacidade de gerar e gerenciar tokens de acesso programático ao usuário do serviço my_service_user. Você pode conceder o privilégio MODIFY PROGRAMMATIC AUTHENTICATION METHODS no usuário my_service_user para a função my_service_owner_role:

    GRANT MODIFY PROGRAMMATIC AUTHENTICATION METHODS ON USER my_service_user
      TO ROLE my_service_owner_role;
    
    Copy

Geração de um token de acesso programático

Você pode gerar um token de acesso programático no Snowsight ou executando comandos SQL.

  1. Faça login no Snowsight.

  2. Selecione Admin » Users & Roles.

  3. Selecione o usuário para o qual deseja gerar o token de acesso programático.

  4. Em Programmatic access tokens, selecione Generate new token.

  5. Na caixa de diálogo New programmatic access token, insira as seguintes informações:

    1. No campo Name, digite um nome para o token.

      No nome, você só pode usar letras, números e sublinhados. O nome deve começar com uma letra ou um sublinhado. As letras do nome são armazenadas e resolvidas como caracteres maiúsculos.

    2. No campo Comment, insira um comentário descritivo sobre o token.

      Após criar o token, esse comentário é exibido sob o token na seção Programmatic access tokens.

    3. Em Expires in, escolha o número de dias após os quais o token deve expirar.

    4. Se estiver gerando o token em nome de um usuário para um serviço (se o objeto USER tiver TYPE=SERVICE), ou se quiser restringir o escopo das operações que podem ser realizadas, selecione One specific role (recommended) e selecione a função que deve ser usada para avaliação de privilégios e criação de objetos.

      Quando você usa esse token para autenticação, todos os objetos que cria são de propriedade dessa função, e essa função é usada para avaliação de privilégios.

      Nota

      As funções secundárias não são usadas, mesmo que DEFAULT_SECONDARY_ROLES esteja definido como (“ALL”) para o usuário.

      Se, em vez disso, você selecionar Any of my roles, todos os objetos que criar pertencentes à sua função primária e os privilégios serão avaliados em relação às suas funções ativas.

    5. Selecione Generate.

  6. Copie ou faça o download do token de acesso programático gerado para que você possa usar o token para autenticação.

    Nota

    Depois de fechar essa caixa de mensagem, você não poderá copiar ou fazer download desse token.

O novo token está listado na seção Programmatic access tokens.

Conforme observado anteriormente, para usar um token de acesso programático, o usuário associado ao token deve estar sujeito a uma política de redes, a menos que você configure uma política de autenticação para alterar esse requisito.

Se um usuário humano que não estiver sujeito a uma política de redes precisar usar um token de acesso programático para autenticação, você poderá ignorar temporariamente o requisito de ter uma política de redes selecionando Mais opções » Bypass requirement for network policy.

Nota

Bypass requirement for network policy não permite que os usuários ignorem a política de redes em si.

Após criar um token de acesso programático, você não pode alterar a data de expiração. Você deve revogar o token e gerar um novo token com o novo tempo de expiração.

Se tiver especificado uma função para o token de acesso programático e essa função for revogada do usuário, o token de acesso programático usará a função do sistema PUBLIC.

Uso de um token de acesso programático

As seções a seguir explicam como usar um token de acesso programático como senha e para autenticação em um ponto de extremidade do Snowflake:

Uso de um token de acesso programático como senha

Para autenticar com um token de acesso programático como senha, você pode especificar o token para o valor da senha nas configurações do driver ou na chamada para se conectar ao Snowflake.

Por exemplo, se estiver usando o Snowflake Connector para Python, você pode especificar o token de acesso programático como o argumento password ao chamar o método snowflake.connector.connect.

conn = snowflake.connector.connect(
    user=USER,
    password=<programmatic_access_token>,
    account=ACCOUNT,
    warehouse=WAREHOUSE,
    database=DATABASE,
    schema=SCHEMA
)
Copy

Da mesma forma, você pode usar tokens de acesso programático no lugar de uma senha em aplicativos de terceiros (como o Tableau ou PowerBI). Cole o token de acesso programático no campo da senha.

Nota

Por padrão, o uso de tokens de acesso programático exige que uma política de redes seja ativada para um usuário ou para todos os usuários da conta. Para usar tokens de acesso programático com um aplicativo de terceiros, você deve criar uma política de redes que permita solicitações dos intervalos de endereços IP do aplicativo de terceiros.

Uso de um token de acesso programático para autenticação em um ponto de extremidade

Para autenticar com um token de acesso programático, defina os seguintes cabeçalhos HTTP na solicitação:

  • Authorization: Bearer token_secret

  • X-Snowflake-Authorization-Token-Type: PROGRAMMATIC_ACCESS_TOKEN (opcional)

Por exemplo, se estiver usando um cURL para enviar uma solicitação a um ponto de extremidade da Snowflake REST API:

curl --location 'https://myorganization-myaccount.snowflakecomputing.com/api/v2/databases' \
  --header "Authorization: Bearer <token_secret>"
Copy

Como outro exemplo, se você estiver usando cURL para enviar uma solicitação ao ponto de extremidade da Snowflake SQL API:

curl -si -X POST https://myorganization-myaccount.snowflakecomputing.com/api/v2/statements \
  --header "Content-Type: application/json" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer <token_secret>" \
  --data '{"statement": "select 1"}'
Copy

Se a solicitação falhar com um erro PAT_INVALID, o erro pode ter ocorrido por um dos seguintes motivos:

  • O usuário associado ao token de acesso programático não foi encontrado.

  • A validação falhou.

  • A função associada ao token de acesso programático não foi encontrada.

  • O usuário não está associado ao token de acesso programático especificado.

Gerenciamento de tokens de acesso programático

As seções a seguir explicam como usar, modificar, listar, girar e revogar tokens de acesso programático:

Nota

Não é possível modificar, renomear, girar ou revogar um token de acesso programático em uma sessão em que você usou um token de acesso programático para autenticação.

Listagem de tokens de acesso programático

Você pode listar o token de acesso programático de um usuário no Snowsight ou executar comandos SQL.

  1. Faça login no Snowsight.

  2. Selecione Admin » Users & Roles.

  3. Selecione o usuário que possui o token de acesso programático.

    Os tokens de acesso programático para o usuário estão listados em Programmatic access tokens.

Nota

Após sete dias, os tokens de acesso programático expirados são excluídos e não aparecem mais no Snowsight nem na saída do comando SHOW USER PROGRAMMATIC ACCESS TOKENS.

Como renomear um token de acesso programático

Você pode alterar o nome de um token de acesso programático no Snowsight ou executar comandos SQL.

  1. Faça login no Snowsight.

  2. Selecione Admin » Users & Roles.

  3. Selecione o usuário associado ao token de acesso programático.

  4. Em Programmatic access tokens, localize o token de acesso programático e selecione Mais opções » Edit.

  5. No campo Name, altere o nome do token e selecione Save.

Rotação de um token de acesso programático

Você pode girar um token de acesso programático no Snowsight ou executar comandos SQL.

A rotação de um token retorna um novo segredo de token que tem o mesmo nome e um tempo de expiração estendido. A rotação de um token também expira o segredo do token existente. Use o novo token para se autenticar no Snowflake.

  1. Faça login no Snowsight.

  2. Selecione Admin » Users & Roles.

  3. Selecione o usuário associado ao token de acesso programático.

  4. Em Programmatic access tokens, localize o token de acesso programático e selecione Mais opções » Rotate.

  5. Se quiser que o segredo do token anterior expire imediatamente, selecione Expire current secret immediately.

  6. Selecione Rotate token.

  7. Copie ou faça o download do token de acesso programático gerado para que você possa usar o token para autenticação.

    Nota

    Depois de fechar essa caixa de mensagem, você não poderá copiar ou fazer download desse token.

Revogação de um token de acesso programático

Você pode revogar um token de acesso programático no Snowsight ou executar comandos SQL.

  1. Faça login no Snowsight.

  2. Selecione Admin » Users & Roles.

  3. Selecione o usuário associado ao token de acesso programático.

  4. Em Programmatic access tokens, localize o token de acesso programático e selecione Mais opções » Delete.

Reativação de um token de acesso programático desativado

Quando você desativa o acesso de login de um usuário ou o Snowflake bloqueia o login de um usuário, os tokens de acesso programático desse usuário são automaticamente desativados.

Nota

Os tokens de acesso programático não são desativados quando um usuário é temporariamente bloqueado (por exemplo, devido a cinco ou mais tentativas com falha de autenticação).

Se você executar o comando SHOW USER PROGRAMMATIC ACCESS TOKENS, o valor na coluna status será DISABLED para tokens associados a esse usuário.

SHOW USER PROGRAMMATIC ACCESS TOKENS FOR USER example_user;
Copy
+---------------+--------------+------------------+-------------------------------+----------+---------+-------------------------------+--------------+-------------------------------------------+------------+
| name          | user_name    | role_restriction | expires_at                    | status   | comment | created_on                    | created_by   | mins_to_bypass_network_policy_requirement | rotated_to |
|---------------+--------------+------------------+-------------------------------+----------+---------+-------------------------------+--------------+-------------------------------------------+------------|
| EXAMPLE_TOKEN | EXAMPLE_USER | MY_ROLE          | 2025-04-28 12:13:46.431 -0700 | DISABLED | NULL    | 2025-04-13 12:13:46.431 -0700 | EXAMPLE_USER | NULL                                      | NULL       |
+---------------+--------------+------------------+-------------------------------+----------+---------+-------------------------------+--------------+-------------------------------------------+------------+

Se você habilitar posteriormente o acesso de login para esse usuário ou se o Snowflake desbloquear o acesso de login para esse usuário, os tokens de acesso programático para esse usuário permanecerão desativados. Para habilitar os tokens novamente, execute o comando ALTER USER … MODIFY PROGRAMMATIC ACCESS TOKEN (PAT) e defina DISABLED como FALSE. Por exemplo:

ALTER USER example_user MODIFY PROGRAMMATIC ACCESS TOKEN example_token SET DISABLED = FALSE;
Copy

Como obter informações sobre um token de acesso programático a partir do segredo

Se você precisar de informações sobre um token de acesso programático, com o segredo desse token, chame a função SYSTEM$DECODE_PAT. Você pode usar essa função se o segredo tiver sido comprometido e quiser saber o usuário associado ao token, o nome do token e o estado do token.

Por exemplo:

SELECT SYSTEM$DECODE_PAT('abC...Y5Z');
Copy
+------------------------------------------------------------------------+
| SYSTEM$DECODE_PAT('☺☺☺...☺☺☺')                                         |
|------------------------------------------------------------------------|
| {"STATE":"ACTIVE","PAT_NAME":"MY_EXAMPLE_TOKEN","USER_NAME":"MY_USER"} |
+------------------------------------------------------------------------+

Práticas recomendadas

  • Se precisar armazenar um token de acesso programático, faça-o de forma segura (por exemplo, usando uma senha ou um gerenciador de segredos).

  • Evite expor tokens de acesso programático no código.

  • Restrinja o uso do token a uma função específica ao gerar o token.

  • Revise e alterne regularmente os tokens de acesso programático. Os usuários podem definir o tempo de expiração ao gerar o token, e os administradores podem reduzir o tempo máximo de expiração de todos os tokens para incentivar a rotação de tokens.

Limitações

  • Você só pode restringir um token de acesso programático a uma função ao gerar o token. Após gerar o token, você não pode alterar ou remover a função à qual ele está restrito.

  • Você só pode definir o tempo de expiração de um token de acesso programático ao gerar o token. Após gerar o token, você não pode alterar o tempo de expiração. Você pode revogar um token de acesso programático e gerar um novo token com um tempo de expiração diferente.

  • Você só pode visualizar o segredo de um token de acesso programático quando o cria. Após criar um token de acesso programático, você só pode visualizar informações sobre o token e não o segredo do token.

  • Os administradores podem listar todos os tokens de acesso programático de um determinado usuário, mas não podem listar todos os tokens de acesso programático de uma conta.

  • Você não pode recuperar um token de acesso programático após revogá-lo.