go-mssqldb no Linux e macOS

O go-mssqldb driver é uma biblioteca puramente Go e compila nativamente em Linux e macOS sem dependências externas de C. Este artigo aborda a configuração específica da plataforma para autenticação e certificados.

Installation

A instalação é a mesma em todas as plataformas:

go get github.com/microsoft/go-mssqldb

Não são necessários drivers ODBC, FreeTDS ou outras bibliotecas C.

Autenticação do SQL

A autenticação SQL funciona de forma idêntica no Linux, macOS e Windows:

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

Autenticação NTLM

A autenticação NTLM é suportada em todas as plataformas. Forneça um nome de utilizador qualificado para domínio:

Formato do URL

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

sqlserver://CONTOSO%5C<user>:<password>@<server>:1433?database=mydb

Formato ADO

A barra diagonal no nome de utilizador desencadeia a autenticação NTLM:

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

O controlador deteta a barra invertida no nome de utilizador e utiliza automaticamente o NTLM. Não é necessária qualquer configuração adicional no Linux ou macOS.

Autenticação Kerberos

A autenticação Kerberos no Linux e macOS utiliza o krb5 pacote incorporado no driver. Não existem dependências externas de bibliotecas.

Prerequisites

  1. Um ficheiro de configuração válido do Kerberos. O caminho padrão é /etc/krb5.conf:

    [libdefaults]
        default_realm = MYDOMAIN.COM
        dns_lookup_kdc = true
    
    [realms]
        MYDOMAIN.COM = {
            kdc = dc1.mydomain.com
        }
    
  2. A instância do SQL Server deve ter um Nome Principal de Serviço (SPN) registado (por exemplo, MSSQLSvc/<server>.mydomain.com:1433).

Liga-te com um keytab

Especifique o caminho do ficheiro keytab e o domínio Kerberos na cadeia de ligação:

sqlserver://<user>@MYDOMAIN.COM@<server>:1433?database=AdventureWorks2025&krb5-realm=MYDOMAIN.COM&krb5-keytabfile=/etc/<user>.keytab

Liga-te a uma cache de credenciais

Primeiro, obtenha um bilhete:

kinit <user>@MYDOMAIN.COM

Depois liga-te usando a credencial em cache:

sqlserver://<user>@MYDOMAIN.COM@<server>:1433?database=AdventureWorks2025&krb5-realm=MYDOMAIN.COM&krb5-credcachefile=/tmp/krb5cc_1000

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 - Reino de Kerberos (por exemplo, MYDOMAIN.COM).
krb5-keytabfile - Caminho para o ficheiro keytab.
krb5-credcachefile - Caminho para o ficheiro de cache de credenciais.
krb5-dnslookupkdc true Utilize registos DNS SRV para encontrar o Centro de Distribuição de Chaves (KDC).
krb5-udppreferencelimit 1 Tamanho máximo da mensagem UDP antes de mudar para TCP.

Para mais informações, consulte SQL Server e Windows authentication.

A autenticação do Windows (SSPI) não está disponível

No Linux e macOS, a autenticação integrada do Windows (SSPI / trusted_connection=yes) não está disponível. Use uma das seguintes alternativas:

Método Cadeia de ligação
NTLM sqlserver://DOMAIN%5Cuser:password@host?database=db
Kerberos (keytab) sqlserver://user@REALM@host?database=db&krb5-realm=REALM&krb5-keytabfile=/path
Kerberos (cache) sqlserver://user@REALM@host?database=db&krb5-realm=REALM&krb5-credcachefile=/path
Autenticação SQL sqlserver://user:password@host?database=db
Microsoft Entra ID sqlserver://host?database=db&fedauth=ActiveDirectoryDefault&encrypt=true&TrustServerCertificate=false (use o controlador azuresql)

Configuração do certificado

No Linux e macOS, os certificados TLS usados com os certificate parâmetros ou serverCertificate devem ser ficheiros codificados em PEM. O controlador lê-os usando diretamente o pacote crypto/tls do Go.

Repositório de confiança do sistema

O driver utiliza o armazenamento de certificados padrão do sistema operativo. No Linux, este repositório de certificados fidedignos situa-se normalmente em /etc/ssl/certs/ ou /etc/pki/tls/certs/. No macOS, utiliza-se o chaveiro do sistema.

Para adicionar um certificado CA personalizado à loja do sistema:

Ubuntu/Debian:

sudo cp myca.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates

RHEL/Fedora:

sudo cp myca.crt /etc/pki/ca-trust/source/anchors/
sudo update-ca-trust

macOS:

sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain myca.crt

Em alternativa, use o certificate parâmetro de ligação para especificar diretamente o certificado da CA sem modificar o armazenamento do sistema:

sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025&encrypt=true&certificate=/path/to/ca-cert.pem