SQL Server e autenticação do Windows com go-mssqldb

O go-mssqldb driver suporta autenticação SQL Server, autenticação integrada do Windows (SSPI), NTLM e Kerberos. Este artigo aborda cada método com exemplos de cadeia de conexão e exemplos de código.

Para autenticação do Microsoft Entra ID, veja autenticação do Microsoft Entra ID.

Escolher um método de autenticação

Use o método mais forte que se encaixe no seu ambiente e plataforma de identidade:

Prefiro essa ordem Método Use-o quando
1 Microsoft Entra ID Você está conectando ao SQL do Azure e pode usar identidade gerenciada, identidade de carga de trabalho ou outro fluxo do Entra sem armazenar senhas.
2 Autenticação integrada ao Windows (SSPI) Seu aplicativo roda no Windows e pode usar a identidade atual do Windows diretamente.
3 Kerberos Você está no Linux ou macOS e já tem tickets do Kerberos, keytabs ou um ambiente de domínio gerenciado.
4 NTLM Você precisa de autenticação de domínio, mas o Kerberos não está disponível nem é prático.
5 Autenticação do SQL Server Você não tem uma opção de identidade integrada e deve usar login e senha SQL.

Se mais de um método funciona, prefira aquele que evita segredos duradouros e corresponde ao sistema de identidade nativo da plataforma hospedeira.

Autenticação do SQL Server

A autenticação do SQL Server utiliza um nome de login e senha armazenados no SQL Server. Forneça os parâmetros user id e password:

Formato de URL

Note

Para strings de conexão de URL, codifique os caracteres especiais em porcentagem no nome de usuário ou senha. Os nomes de usuário da autenticação do Windows usam %5C como separador de domínio, como sqlserver://DOMAIN%5Cusername:password@host. Em cadeias de conexão ADO e ODBC, use a forma literal DOMAIN\username .

Especifique o nome de usuário e a senha na URL:

sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025&encrypt=true

Formato ADO

Use as chaves user id e password em uma cadeia de conexão no estilo ADO:

server=<server>;user id=<user>;password=<password>;database=AdventureWorks2025;Encrypt=true

Exemplo de código

Conecte-se com autenticação do SQL Server e verifique a conexão:

package main

import (
    "database/sql"
    "log"

    _ "github.com/microsoft/go-mssqldb"
)

func main() {
    db, err := sql.Open("sqlserver",
        "sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025&encrypt=true")
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()

    if err = db.Ping(); err != nil {
        log.Fatal(err)
    }
}

Autenticação integrada ao Windows (SSPI)

No Windows, o driver usa SSPI (Security Support Provider Interface) para autenticar usando as credenciais do usuário atual do Windows. A cadeia de conexão não precisa de nome de usuário ou senha.

sqlserver://<server>?database=AdventureWorks2025&trusted_connection=yes&encrypt=true

Note

A autenticação integrada ao Windows via SSPI funciona apenas quando o aplicativo Go roda no Windows e o usuário atual tem acesso à instância do SQL Server.

Autenticação NTLM

A autenticação NTLM funciona em todas as plataformas (Windows, Linux e macOS). Forneça um nome de usuário e senha qualificados para domínio:

Formato URL NTLM

Codifique a barra invertida em DOMAIN\<user> como %5C:

sqlserver://DOMAIN%5C<user>:<password>@<server>?database=AdventureWorks2025&encrypt=true

Note

No formato de URL, você deve codificar a barra invertida em DOMAIN\<user> como %5C.

Formato NTLM ADO

A barra invertida no nome de usuário sinaliza a autenticação NTLM para o driver:

server=<server>;user id=DOMAIN\<user>;password=<password>;database=AdventureWorks2025;Encrypt=true

O driver detecta a barra invertida no nome de usuário e usa NTLM automaticamente.

Autenticação do Kerberos

A autenticação Kerberos funciona no Linux e macOS quando o sistema possui uma configuração válida de Kerberos. O driver usa o krb5 pacote para autenticação Kerberos. Existem três métodos para fornecer credenciais.

Pré-requisitos

  • Um arquivo válido krb5.conf (caminho padrão: /etc/krb5.conf).
  • O SQL Server deve ter um Nome Principal de Serviço (SPN) registrado.

Método 1: Arquivo Keytab

Um arquivo keytab contém chaves principais Kerberos criptografadas. Especifique o caminho do arquivo keytab e o domínio do usuário:

sqlserver://<user>@MYREALM@<server>:1433?database=AdventureWorks2025&krb5-realm=MYREALM&krb5-keytabfile=/path/to/user.keytab&encrypt=true

Método 2: Cache de credenciais

Use um cache de credenciais Kerberos existente criado por kinit.

sqlserver://<user>@MYREALM@<server>:1433?database=AdventureWorks2025&krb5-realm=MYREALM&krb5-credcachefile=/tmp/krb5cc_1000&encrypt=true

Método 3: Credenciais brutas

Forneça a senha diretamente na string de conexão. O driver usa as credenciais fornecidas para realizar a troca de autenticação Kerberos.

sqlserver://<user>@MYREALM:<password>@<server>:1433?database=AdventureWorks2025&krb5-realm=MYREALM&encrypt=true

Parâmetros de Kerberos

Parâmetro Padrão Description
krb5-configfile /etc/krb5.conf Caminho para o arquivo de configuração Kerberos.
krb5-realm - Nome do reino de Kerberos, como MYDOMAIN.COM.
krb5-keytabfile - Caminho para o arquivo keytab.
krb5-credcachefile - Caminho para o arquivo de cache de credenciais.
krb5-dnslookupkdc true Use os registros DNS SRV para localizar o KDC.
krb5-udppreferencelimit 1 Tamanho máximo da mensagem antes de trocar de UDP para TCP.
ServerSPN - Sobrescreva o SPN gerado automaticamente.