go-mssqldb di Linux dan macOS

Driver go-mssqldb adalah perpustakaan Go murni dan dikompilasi secara native di Linux dan macOS tanpa dependensi C eksternal. Artikel ini membahas konfigurasi khusus platform untuk autentikasi dan sertifikat.

Installation

Instalasi sama di semua platform:

go get github.com/microsoft/go-mssqldb

Tidak diperlukan driver ODBC, FreeTDS, atau pustaka C lainnya.

Autentikasi SQL

Autentikasi SQL bekerja secara identik di Linux, macOS, dan Windows:

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

Otentikasi NTLM

Autentikasi NTLM didukung di semua platform. Berikan nama pengguna yang memenuhi syarat domain:

Format URL

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

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

Format ADO

Garis miring terbalik dalam nama pengguna memicu autentikasi NTLM:

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

Driver mendeteksi karakter backslash (\) dalam nama pengguna dan secara otomatis menggunakan NTLM. Tidak diperlukan konfigurasi tambahan di Linux atau macOS.

Autentikasi Kerberos

Autentikasi Kerberos di Linux dan macOS menggunakan paket yang krb5 terpasang di driver. Tidak ada dependensi perpustakaan eksternal.

Prasyarat

  1. File konfigurasi Kerberos yang valid. Jalur defaultnya adalah /etc/krb5.conf:

    [libdefaults]
        default_realm = MYDOMAIN.COM
        dns_lookup_kdc = true
    
    [realms]
        MYDOMAIN.COM = {
            kdc = dc1.mydomain.com
        }
    
  2. Instans SQL Server harus memiliki Nama Prinsipal Layanan (SPN) yang terdaftar (misalnya, MSSQLSvc/<server>.mydomain.com:1433).

Hubungkan dengan keytab

Tentukan jalur file keytab dan ranah Kerberos di string koneksi:

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

Terhubung dengan cache kredensial

Pertama, dapatkan tiket:

kinit <user>@MYDOMAIN.COM

Kemudian sambungkan dengan menggunakan kredensial yang di-cache:

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

Parameter Kerberos

Parameter Default Description
krb5-configfile /etc/krb5.conf Jalur ke file konfigurasi Kerberos.
krb5-realm - Alam Kerberos (misalnya, MYDOMAIN.COM).
krb5-keytabfile - Jalur ke file keytab.
krb5-credcachefile - Jalur ke file cache kredensial.
krb5-dnslookupkdc true Gunakan catatan DNS SRV untuk menemukan Pusat Distribusi Kunci (KDC).
krb5-udppreferencelimit 1 Ukuran pesan UDP maksimum sebelum beralih ke TCP.

Untuk informasi selengkapnya, lihat SQL Server dan Windows authentication.

Autentikasi Windows (SSPI) tidak tersedia

Di Linux dan macOS, autentikasi terintegrasi Windows (SSPI /trusted_connection=yes) tidak tersedia. Gunakan salah satu alternatif berikut:

Metode Rangkaian koneksi
MNTL 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
Autentikasi SQL sqlserver://user:password@host?database=db
Microsoft Entra ID sqlserver://host?database=db&fedauth=ActiveDirectoryDefault&encrypt=true&TrustServerCertificate=false (gunakan driver azuresql)

Konfigurasi sertifikat

Di Linux dan macOS, sertifikat TLS yang digunakan dengan certificate parameter atau serverCertificate harus berupa file yang dikodekan PEM. Driver tersebut membacanya dengan langsung menggunakan paket Go crypto/tls.

Penyimpanan sertifikat tepercaya sistem

Driver menggunakan penyimpanan sertifikat tepercaya default sistem operasi. Di Linux, penyimpanan kepercayaan ini biasanya terletak di /etc/ssl/certs/ atau /etc/pki/tls/certs/. Di macOS, gantungan kunci sistem digunakan.

Untuk menambahkan sertifikat CA kustom ke penyimpanan sistem:

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

Atau, gunakan certificate parameter koneksi untuk menentukan sertifikat CA secara langsung tanpa memodifikasi penyimpanan sistem:

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