Autentikasi SQL Server dan Windows dengan go-mssqldb

Driver mendukung go-mssqldb autentikasi SQL Server, autentikasi terintegrasi Windows (SSPI), NTLM, dan Kerberos. Artikel ini membahas setiap metode dengan contoh string koneksi dan sampel kode.

Untuk autentikasi Microsoft Entra ID, lihat autentikasi Microsoft Entra ID.

Pilih metode autentikasi

Gunakan metode terkuat yang sesuai dengan lingkungan dan platform identitas Anda:

Lebih suka pesanan ini Metode Gunakan saat
1 Microsoft Entra ID Anda tersambung ke Azure SQL dan dapat menggunakan identitas terkelola, identitas beban kerja, atau alur Entra lainnya tanpa menyimpan kata sandi.
2 Autentikasi terintegrasi Windows (SSPI) Aplikasi Anda berjalan di Windows dan dapat menggunakan identitas Windows saat ini secara langsung.
3 Kerberos Anda menggunakan Linux atau macOS dan sudah memiliki tiket Kerberos, keytab, atau lingkungan domain terkelola.
4 MNTL Anda memerlukan autentikasi domain tetapi Kerberos tidak tersedia atau praktis.
5 autentikasi SQL Server Anda tidak memiliki opsi identitas terintegrasi dan harus menggunakan login dan kata sandi SQL.

Jika lebih dari satu metode berhasil, pilih metode yang menghindari rahasia berumur panjang dan cocok dengan sistem identitas asli platform host.

autentikasi SQL Server

Autentikasi SQL Server menggunakan nama login dan kata sandi yang disimpan di SQL Server. Berikan parameter user id dan password :

Format URL

Note

Untuk string koneksi URL, kodekan karakter khusus secara persen dalam nama pengguna atau sandi. Nama pengguna Windows authentication digunakan %5C untuk pemisah domain, seperti sqlserver://DOMAIN%5Cusername:password@host. Dalam string koneksi ADO dan ODBC, gunakan bentuk literal DOMAIN\username .

Tentukan nama pengguna dan kata sandi di URL:

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

Format ADO

Gunakan tombol user id dan password dalam string koneksi bergaya ADO:

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

Contoh kode

Hubungkan dengan autentikasi SQL Server dan verifikasi koneksi:

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

Autentikasi terintegrasi Windows (SSPI)

Di Windows, driver menggunakan SSPI (Security Support Provider Interface) untuk mengautentikasi dengan menggunakan kredensial pengguna Windows saat ini. string koneksi tidak memerlukan nama pengguna atau kata sandi.

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

Note

Autentikasi terintegrasi Windows melalui SSPI hanya berfungsi ketika aplikasi Go berjalan di Windows dan pengguna saat ini memiliki akses ke instans SQL Server.

Otentikasi NTLM

Autentikasi NTLM berfungsi di semua platform (Windows, Linux, dan macOS). Berikan nama pengguna dan sandi yang memenuhi syarat domain:

Format URL NTLM

Kodekan URL untuk backslash di DOMAIN\<user> sebagai %5C:

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

Note

Dalam format URL, Anda harus mengodekan garis miring terbalik dalam DOMAIN\<user> sebagai %5C.

Format NTLM ADO

Garis miring terbalik dalam nama pengguna menandakan autentikasi NTLM bagi driver:

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

Driver mendeteksi karakter backslash (\) dalam nama pengguna dan secara otomatis menggunakan NTLM.

Autentikasi Kerberos

Autentikasi Kerberos berfungsi di Linux dan macOS saat sistem memiliki konfigurasi Kerberos yang valid. Driver menggunakan paket krb5 untuk autentikasi Kerberos. Ada tiga metode untuk memberikan kredensial.

Prasyarat

  • Berkas krb5.conf yang valid (jalur bawaan: /etc/krb5.conf).
  • SQL Server harus memiliki Nama Prinsipal Layanan (SPN) terdaftar.

Metode 1: Berkas keytab

File keytab berisi kunci utama Kerberos terenkripsi. Tentukan jalur file keytab dan ranah pengguna:

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

Metode 2: Cache kredensial

Gunakan cache kredensial Kerberos yang ada yang dibuat oleh kinit.

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

Metode 3: Kredensial mentah

Berikan kata sandi langsung di string koneksi. Driver menggunakan kredensial yang disediakan untuk melakukan pertukaran autentikasi Kerberos.

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

Parameter Kerberos

Parameter Default Description
krb5-configfile /etc/krb5.conf Jalur ke file konfigurasi Kerberos.
krb5-realm - Nama alam Kerberos, seperti MYDOMAIN.COM.
krb5-keytabfile - Jalur ke file keytab.
krb5-credcachefile - Jalur ke file cache kredensial.
krb5-dnslookupkdc true Gunakan catatan DNS SRV untuk menemukan KDC.
krb5-udppreferencelimit 1 Ukuran pesan maksimum sebelum beralih dari UDP ke TCP.
ServerSPN - Ganti SPN yang dibuat secara otomatis.