go-mssqldb Verbindungsstrings

Der Treiber go-mssqldb akzeptiert drei Verbindungszeichenfolge-Formate: URL, ADO und ODBC. Alle drei Formate unterstützen denselben Satz von Verbindungsparametern. Wählen Sie das Format, das am besten zu Ihrer Anwendung oder Ihrem Bereitstellungsmodell passt.

Tip

Verwenden Sie das URL-Format für neue Go-Anwendungen. Es integriert sich mit Gos net/url Paket für sichere Codierung und programmatische Konstruktion. Verwenden Sie das ADO-Format beim Portieren von Verbindungszeichenketten aus .NET-Anwendungen und verwenden Sie das ODBC-Format, wenn das Ausweichen von Klammern für Werte mit Semikolons oder anderen Sonderzeichen bequemer ist.

URL-Format

Das URL-Format folgt dem Schema sqlserver:// und ist das gebräuchlichste Format für Go-Anwendungen:

sqlserver://username:password@host:port?database=AdventureWorks2025&param=value

Beispiele

Verbinden Sie sich mit einer lokalen Standardinstanz über SQL-Authentifizierung:

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

Stellen Sie eine Verbindung mit einer benannten Instanz her:

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

Connect to Azure SQL-Datenbank:

sqlserver://<user>:<password>@<server>.database.windows.net?database=AdventureWorks2025&encrypt=true&TrustServerCertificate=false

Verwenden Sie Windows-Authentifizierung (nur Windows):

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

Hinweis

Im URL-Format steht der Port standardmäßig auf 1433. Um einen anderen Port zu spezifizieren, fügen Sie ihn nach dem Host hinzu: sqlserver://<server>:1434?database=AdventureWorks2025.

Sonderzeichen in Passwörtern

Im URL-Format müssen Passwörter mit Sonderzeichen prozentual codiert werden. Häufige Zeichen, die codiert werden müssen:

Character Encoded Beispielpasswort Codierte Form
@ %40 p@ssword p%40ssword
: %3A p:ssword p%3Assword
/ %2F p/ssword p%2Fssword
# %23 p#ssword p%23ssword
% %25 p%ssword p%25ssword

Verwenden url.UserPassword() Sie zur automatischen Kodierung:

u := &url.URL{
    Scheme: "sqlserver",
    User:   url.UserPassword("<user>", "p@ss:word#1"),
    Host:   "<server>:1433",
}
u.RawQuery = url.Values{"database": {"AdventureWorks2025"}}.Encode()
// Result: sqlserver://<user>:p%40ss%3Aword%231@<server>:1433?database=AdventureWorks2025

Im ADO-Format ist eine prozentuale Codierung nicht erforderlich. Wenn ein Wert Semikolons enthält, wird er in Anführungszeichen gesetzt: password="<password>". Im ODBC-Format wickelt man den Wert stattdessen in Klammern: password={<password>}.

ADO-Format

Das ADO-Format verwendet Semikolon-getrennte key=value Paare:

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

ADO-Beispiele

Verbinden Sie sich mit einer Portnummer:

server=<server>;port=1434;user id=<user>;password=<password>;database=AdventureWorks2025

Stellen Sie eine Verbindung mit einer benannten Instanz her:

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

Hinweis

Im ADO-Format sind die server Felder und port getrennte Parameter. Fügen Sie keinen Doppelpunkt-getrennten Port in den server Wert ein.

ODBC-Format

Das ODBC-Format verwendet das odbc: Präfix mit semikolon-getrennten key=value Paaren. Werte, die spezielle Zeichen enthalten, können in Klammern eingeschlossen werden:

odbc:server=<server>;user id=<user>;password={<password>};database=AdventureWorks2025

Zahnspangen lösen sich aus

Im ODBC-Format wird ein Wert eingewickelt {} , um Semikolon, Gleichzeichenzeichen und andere Sonderzeichen zu entkommen. Um eine buchstäbliche } innere Zahnspange hinzuzufügen, verdoppeln Sie sie:

odbc:password={my}}password}

Allgemeine Parameter

Die folgenden Parameter werden in allen drei Formaten geteilt:

Parameter Aliase Description
user id user SQL Server-Login-Name.
password - Passwort für den SQL Server-Anmelder.
database - Zieldatenbankname.
connection timeout - Login-Timeout in Sekunden. Der Standardtreiber ist 0, der unbegrenzt wartet. Ich bevorzuge Go-Kontexte, um Verbindungs- und Abfrage-Timeouts zu steuern.
dial timeout - Netzwerkwahl-Timeout in Sekunden. Der Standardtreiber basiert auf den registrierten Protokollen. Auf unbestimmte Zeit warten 0 .
encrypt - Verschlüsselungsmodus: strict, true/mandatory, false/optional, disable. Wenn weggelassen, lautet false/optionalder Standard . Für Azure SQL und Produktionsverbindungen setzen encrypt=true Sie explizit.
TrustServerCertificate - Zertifikatsvalidierung überspringen. Wenn encrypt angegeben ist, ist falseder Standard . Wenn encrypt weggelassen wird, ist trueder Standard . false Verwendung für Produktions- und Azure SQL-Verbindungen.
app name - Anwendungsname an den Server weitergegeben.
authenticator - Benutzerdefinierter Authenticator. Wird intern vom azuread Paket verwendet.

Für die vollständige Liste der Verbindungsoptionen siehe Verbindungsoptionen.

Aufbau von Verbindungsstrings im Code

Verwenden Sie den Type oder msdsn.Config Structurl.URL, um Verbindungsstrings programmatisch zu erstellen, anstatt rohe Strings zu verketten. Dieser Ansatz vermeidet Injektions- und Codierungsprobleme.

URL-Builder

Verwenden url.URL Sie aus der Standardbibliothek, um die Verbindungszeichenfolge sicher zu konstruieren:

import "net/url"

query := url.Values{}
query.Add("database", "AdventureWorks2025")
query.Add("encrypt", "true")
query.Add("TrustServerCertificate", "false")

u := &url.URL{
    Scheme:   "sqlserver",
    User:     url.UserPassword("<user>", "<password>"),
    Host:     "<server>.database.windows.net:1433",
    RawQuery: query.Encode(),
}
connString := u.String()

NewConnectorConfig

Verwendung NewConnectorConfig mit msdsn.Config für strukturierte Konfigurationen, besonders wenn Sie einen benutzerdefinierten Dialer einrichten müssen oder SessionInitSQL:

import (
    "database/sql"
    "github.com/microsoft/go-mssqldb"
    "github.com/microsoft/go-mssqldb/msdsn"
)

config := msdsn.Config{
    Host:     "<server>",
    Port:     1433,
    Database: "AdventureWorks2025",
}

connector := mssql.NewConnectorConfig(config)
db := sql.OpenDB(connector)