go-mssqldb ile SQL Server ve Windows kimlik doğrulaması

Sürücü, go-mssqldb SQL Server kimlik doğrulaması, Windows entegre kimlik doğrulama (SSPI), NTLM ve Kerberos'u destekler. Bu makale, her yöntemi bağlantı dizesi örnekleri ve kod örnekleriyle ele almaktadır.

Microsoft Entra ID kimlik doğrulaması hakkında bilgi için bkz. Microsoft Entra ID kimlik doğrulaması.

Kimlik doğrulama yöntemi seçme

Çevrenize ve kimlik platformunuza en uygun en güçlü yöntemi kullanın:

Bu sırayı tercih ederim Method Şu durumlarda kullanın:
1 Microsoft Entra Kimliği Azure SQL'e bağlanıyorsunuz ve şifre kaydetmeden yönetilen kimlik, iş yükü kimliği veya başka bir Entra akışı kullanabiliyorsunuz.
2 Windows entegre kimlik doğrulama (SSPI) Uygulamanız Windows'ta çalışıyor ve mevcut Windows kimliğini doğrudan kullanabilir.
3 Kerberos Linux veya macOS kullanıyorsun ve zaten Kerberos biletleri, keytab'lar veya yönetilen bir alan alanı ortamın var.
4 NTLM Alan kimliğine ihtiyacınız var ama Kerberos mevcut değil ve pratik değil.
5 SQL Server kimlik doğrulaması Entegre bir kimlik seçeneğiniz yok ve SQL giriş ve şifre kullanmak zorundasınız.

Birden fazla yöntem işe yarıyorsa, uzun ömürlü sırlardan kaçınan ve ana platformun yerel kimlik sistemiyle eşleşen olanı tercih edin.

SQL Server kimlik doğrulaması

SQL Server doğrulaması, SQL Server'da saklanan bir giriş adı ve şifre kullanır. user id ve password parametrelerini belirtin:

URL biçimi

Note

URL bağlantı dizelerinde, kullanıcı adı veya paroladaki özel karakterlere yüzde kodlaması uygulayın. Windows kimlik doğrulama kullanıcı adları, etki alanı ayırıcısı olarak %5C kullanır; örneğin sqlserver://DOMAIN%5Cusername:password@host. ADO ve ODBC bağlantı dizilerinde literal DOMAIN\username biçim kullanılır.

URL'de kullanıcı adını ve şifreyi belirtin:

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

ADO formatı

ADO tarzı bir bağlantı dizesi'te user id ve password tuşlarını kullanın:

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

Kod örneği

SQL Server doğrulama ile bağlanın ve bağlantıyı doğrulayı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)
    }
}

Windows entegre kimlik doğrulama (SSPI)

Windows'ta sürücü, mevcut Windows kullanıcısının kimlik bilgilerini kullanarak doğrulama yapmak için SSPI (Güvenlik Destek Sağlayıcı Arayüzü) kullanır. Bağlantı dizesi, kullanıcı adı veya parola gerektirmez.

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

Note

SSPI ile Windows entegre kimlik doğrulaması yalnızca Go uygulaması Windows'ta çalıştığında ve mevcut kullanıcı SQL Server örneğine erişebildiğinde çalışır.

NTLM kimlik doğrulaması

NTLM doğrulaması tüm platformlarda (Windows, Linux ve macOS) çalışır. Alan adı nitelikli bir kullanıcı adı ve şifre verin:

NTLM URL formatı

DOMAIN\<user> içindeki ters eğik çizgiyi %5C olarak URL kodlayın:

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

Note

URL biçiminde, DOMAIN\<user> içindeki ters eğik çizgiyi %5C olarak URL kodlamalısınız.

NTLM ADO formatı

Kullanıcı adındaki ters eğik çizgi, sürücüye NTLM doğrulamasını işaret eder:

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

Sürücü, kullanıcı adındaki ters çizgiyi algılar ve otomatik olarak NTLM kullanır.

Kerberos kimlik doğrulama

Kerberos doğrulaması, sistem geçerli bir Kerberos yapılandırmasına sahip olduğunda Linux ve macOS'ta çalışır. Sürücü, paketi krb5 Kerberos kimlik doğrulaması için kullanır. Kimlik bilgilerini sağlamanın üç yolu vardır.

Prerequisites

  • Geçerli krb5.conf bir dosya (varsayılan yol: /etc/krb5.conf).
  • SQL Server'ın kayıtlı bir Hizmet Ana Adı (SPN) olması gerekir.

Yöntem 1: Keytab dosyası

Bir keytab dosyası, şifrelenmiş Kerberos ana anahtarlarını içerir. Keytab dosya yolunu ve kullanıcının alemini belirtin:

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

Yöntem 2: Kimlik Kaydı Önbelleği

kinit tarafından oluşturulmuş mevcut bir Kerberos kimlik bilgisi önbelleğini kullanın.

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

Yöntem 3: Ham kimlik bilgileri

Şifreyi doğrudan bağlantı dizesi'e girin. Sürücü, Kerberos kimlik doğrulama değişimini gerçekleştirmek için verilen kimlik bilgilerini kullanır.

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

Kerberos parametreleri

Parametre Default Description
krb5-configfile /etc/krb5.conf Kerberos yapılandırma dosyasına giden yol.
krb5-realm - Kerberos alem adı, örneğin MYDOMAIN.COM.
krb5-keytabfile - Keytab dosyasına giden yol.
krb5-credcachefile - Kimlik bilgisi önbellek dosyasına giden yol.
krb5-dnslookupkdc true KDC'yi bulmak için DNS SRV kayıtlarını kullanın.
krb5-udppreferencelimit 1 UDP'den TCP'ye geçmeden önce maksimum mesaj boyutu.
ServerSPN - Otomatik olarak oluşturulan SPN'yi geçersiz kılın.