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

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

Para autenticação Microsoft Entra ID, consulte autenticação Microsoft Entra ID.

Escolha um método de autenticação

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

Prefiro esta ordem Método Use-o quando
1 Microsoft Entra ID Estás a ligar-te ao SQL do Azure e podes usar identidade gerida, identidade de carga de trabalho ou outro fluxo do Entra sem guardar palavras-passe.
2 Autenticação integrada do Windows (SSPI) A sua aplicação corre no Windows e pode usar diretamente a identidade atual do Windows.
3 Kerberos Estás em Linux ou macOS e já tens tickets Kerberos, keytabs ou um ambiente de domínio gerido.
4 NTLM Precisas de autenticação por domínio, mas o Kerberos não está disponível nem é prático.
5 Autenticação do SQL Server Não tens uma opção de identidade integrada e tens de usar login e palavra-passe SQL.

Se mais do que um método funcionar, prefira aquele que evita segredos duradouros e corresponde ao sistema de identidade nativo da plataforma anfitriã.

Autenticação do SQL Server

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

Formato do URL

Note

Para cadeias de ligação de URL, codifique os caracteres especiais com codificação percentual no nome de utilizador ou na palavra-passe. Os nomes de utilizador da autenticação do Windows utilizam %5C como separador de domínio, como sqlserver://DOMAIN%5Cusername:password@host. Em cadeias de ligação ADO e ODBC, use a forma literal DOMAIN\username .

Especifique o nome de utilizador e a palavra-passe na URL:

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

Formato ADO

Utilize as teclas user id e password numa cadeia de ligação no estilo ADO:

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

Exemplo de código

Ligue-se à autenticação do SQL Server e verifique a ligaçã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 do Windows (SSPI)

No Windows, o driver utiliza o SSPI (Security Support Provider Interface) para autenticar utilizando as credenciais do utilizador atual do Windows. A cadeia de ligação não precisa de nome de utilizador ou palavra-passe.

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

Note

A autenticação integrada no Windows através do SSPI só funciona quando a aplicação Go corre no Windows e o utilizador 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 utilizador e palavra-passe qualificados para domínio:

Formato URL NTLM

Codifica URL a barra inversa em DOMAIN\<user> como %5C:

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

Note

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

Formato NTLM ADO

A barra diagonal no nome de utilizador sinaliza autenticação NTLM ao driver:

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

O controlador deteta a barra invertida no nome de utilizador e utiliza automaticamente o NTLM.

Autenticação Kerberos

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

Pré-requisitos

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

Método 1: ficheiro Keytab

Um ficheiro keytab contém chaves principais Kerberos encriptadas. Especifique o caminho do ficheiro keytab e o domínio do utilizador:

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 uma cache de credenciais Kerberos existente criada 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 palavra-passe diretamente na cadeia de ligação. O controlador utiliza as credenciais fornecidas para efetuar o processo de autenticação do Kerberos.

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

Parâmetros de Kerberos

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