Autenticación de SQL Server y de Windows con go-mssqldb

El go-mssqldb controlador soporta autenticación SQL Server, autenticación integrada de Windows (SSPI), NTLM y Kerberos. Este artículo cubre cada método con ejemplos de cadena de conexión y ejemplos de código.

Para la autenticación de Microsoft Entra ID, véase autenticación Microsoft Entra ID.

Elección de un método de autenticación

Utiliza el método más fuerte que se adapte a tu entorno y plataforma de identidad:

Prefiero este orden Método Úselo cuando
1 Microsoft Entra ID Te conectas a Azure SQL y puedes usar la identidad gestionada, la identidad de carga de trabajo u otro flujo de Entra sin almacenar contraseñas.
2 Autenticación integrada de Windows (SSPI) Tu aplicación funciona en Windows y puede usar directamente la identidad actual de Windows.
3 Kerberos Estás en Linux o macOS y ya tienes tickets de Kerberos, keytabs o un entorno de dominio gestionado.
4 NTLM Necesitas autenticación de dominio, pero Kerberos no está disponible ni es práctico.
5 Autenticación de SQL Server No tienes una opción de identidad integrada y debes usar un usuario y contraseña SQL.

Si funciona más de un método, prefiero el que evite secretos duraderos y coincida con el sistema de identidad nativo de la plataforma anfitriona.

Autenticación de SQL Server

La autenticación de SQL Server utiliza un nombre de usuario y una contraseña almacenados en SQL Server. Proporcione los parámetros user id y password:

Formato de dirección URL

Note

En las cadenas de conexión URL, codifica en formato porcentual los caracteres especiales del nombre de usuario o la contraseña. Los nombres de usuario de autenticación de Windows usan %5C como separador de dominio, como sqlserver://DOMAIN%5Cusername:password@host. En cadenas de conexión ADO y ODBC, se utiliza la forma literal DOMAIN\username .

Especifica el nombre de usuario y la contraseña en la URL:

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

Formato ADO

Utiliza las claves user id y password en una cadena de conexión de estilo ADO:

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

Ejemplo de código

Conéctate con la autenticación de SQL Server y verifica la conexión:

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)
    }
}

Autenticación integrada de Windows (SSPI)

En Windows, el controlador utiliza SSPI (Interfaz de Proveedor de Soporte de Seguridad) para autenticarse utilizando las credenciales del usuario actual de Windows. La cadena de conexión no necesita nombre de usuario ni contraseña.

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

Note

La autenticación integrada de Windows a través de SSPI solo funciona cuando la aplicación Go se ejecuta en Windows y el usuario actual tiene acceso a la instancia de SQL Server.

Autenticación NTLM

La autenticación NTLM funciona en todas las plataformas (Windows, Linux y macOS). Proporciona un nombre de usuario y contraseña cualificados para el dominio:

Formato URL NTLM

Codifica en URL la barra inversa en DOMAIN\<user> como %5C:

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

Note

En formato de URL, debes codificar en URL la barra inversa de DOMAIN\<user> como %5C.

Formato ADO NTLM

La barra inversa en el nombre de usuario indica al controlador la autenticación NTLM:

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

El controlador detecta la barra inversa en el nombre de usuario y utiliza NTLM automáticamente.

Autenticación de Kerberos

La autenticación Kerberos funciona en Linux y macOS cuando el sistema tiene una configuración válida de Kerberos. El controlador utiliza el krb5 paquete para la autenticación Kerberos. Hay tres métodos para obtener credenciales.

Prerequisites

  • Un archivo válido krb5.conf (ruta por defecto: /etc/krb5.conf).
  • El SQL Server debe tener un Nombre Principal de Servicio (SPN) registrado.

Método 1: Archivo Keytab

Un archivo keytab contiene claves principales de Kerberos cifradas. Especifica la ruta del archivo keytab y el ámbito del usuario:

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

Método 2: Caché de credenciales

Utiliza una caché de credenciales de Kerberos existente creada por kinit.

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

Método 3: Credenciales en bruto

Proporciona la contraseña directamente en la cadena de conexión. El controlador utiliza las credenciales proporcionadas para realizar el intercambio de autenticación Kerberos.

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

Parámetros de Kerberos

Parámetro Predeterminado Descripción
krb5-configfile /etc/krb5.conf Ruta hacia el archivo de configuración de Kerberos.
krb5-realm - Nombre del reino de Kerberos, como MYDOMAIN.COM.
krb5-keytabfile - Ruta hacia el archivo keytab.
krb5-credcachefile - Ruta hacia el archivo de caché de credenciales.
krb5-dnslookupkdc true Utiliza los registros DNS SRV para localizar el KDC.
krb5-udppreferencelimit 1 Tamaño máximo del mensaje antes de cambiar de UDP a TCP.
ServerSPN - Anula el SPN generado automáticamente.