Stringhe di connessione go-mssqldb

Il go-mssqldb driver accetta tre formati di stringa di connessione: URL, ADO e ODBC. Tutti e tre i formati supportano lo stesso insieme di parametri di connessione. Scegli il formato che si adatta meglio alla tua applicazione o al modello di distribuzione.

Tip

Usa il formato URL per le nuove applicazioni Go. Si integra con il pacchetto di net/url Go per una codifica sicura e una costruzione programmatica. Utilizzare il formato ADO quando si portano stringhe di connessione da applicazioni .NET, e utilizzare il formato ODBC quando la fuga di brace è più comoda per valori che contengono punti e virgola o altri caratteri speciali.

Formato di URL

Il formato URL segue lo sqlserver:// schema ed è il formato più comune per le applicazioni Go:

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

Examples

Connettiti a un'istanza predefinita locale con autenticazione SQL:

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

Connettiti a un'istanza denominata:

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

Connettiti a database SQL di Azure:

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

Usa autenticazione di Windows (solo Windows):

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

Note

Nel formato URL, la porta è predefinita su 1433. Per specificare una porta diversa, includila dopo l'host: sqlserver://<server>:1434?database=AdventureWorks2025.

Caratteri speciali nelle password

Nel formato URL, le password con caratteri speciali devono essere codificate per percentuale. Caratteri comuni che richiedono codifica:

Character Encoded Esempio di password Forma codificata
@ %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

Usare url.UserPassword() per gestire automaticamente la codifica:

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

Nel formato ADO, la codifica percentuale non è necessaria. Se un valore contiene punti e virgola, si avvolga tra virgolette doppie: password="<password>". In formato ODBC, avvolgi il valore tra parentesi: password={<password>}.

Formato ADO

Il formato ADO utilizza coppie separate key=value a punto e virgola:

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

Esempi ADO

Collegati con un numero di porta:

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

Connettiti a un'istanza denominata:

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

Note

Nel formato ADO, i server campi e port sono parametri separati. Non includere una porta separata da due punti nel server valore.

Sinonimi di parole chiave ADO.NET

Con la versione v1.11.0 e successive, il formato ADO accetta anche le grafie alternative delle parole chiave che Microsoft. Data.SqlClient utilizza, che permette di riutilizzare una stringa di connessione scritta per un'applicazione .NET. Le parole chiave non sono indistinte a maiuscole.

Parola chiave ADO.NET parametro go-mssqldb
Addr, Address, Network AddressData Source server
User, UID user id
PWD password
Initial Catalog database
App, Application Name app name
Connect Timeout, Timeout connection timeout
Application Intent applicationintent
Failover Partner failoverpartner
Failover Partner SPN failoverpartnerspn
Trust Server Certificate trustservercertificate
Multi Subnet Failover multisubnetfailover
Host Name In Certificate hostnameincertificate
Server SPN serverspn
Server Certificate servercertificate
WSID workstation id
Column Encryption Setting columnencryption

La seguente stringa di connessione usa solo sinonimi:

Data Source=<server>;Initial Catalog=AdventureWorks2025;UID=<user>;PWD=<password>;Connect Timeout=30

Questi sinonimi si applicano solo al formato ADO. I formati URL e ODBC accettano i nomi dei parametri driver nella colonna di destra.

Formato ODBC

Il formato ODBC utilizza il odbc: prefisso con coppie separate key=value a punto e virgola. I valori che contengono caratteri speciali possono essere racchiusi tra parentesi:

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

Apparecchi che si staccano

In formato ODBC, si avvolge un valore {} per evitare punti e virgola, segni uguali e altri caratteri speciali. Per includere letteralmente un } apparecchio interno, raddoppialo:

odbc:password={my}}password}

Parametri comuni

I seguenti parametri sono condivisi tra tutti e tre i formati. Il driver risolve gli alias solo nelle stringhe di connessione in formato ADO . Le stringhe di connessione in formato URL e ODBC corrispondono esattamente ai nomi dei parametri, tranne per la maiuscolagem.

Parametro Aliases Descrizione
user id user Nome di accesso SQL Server.
password - Password per l'accesso SQL Server.
database - Nome del database di destinazione.
connection timeout - Timeout in pochi secondi per lo scambio di accesso. Il driver predefinito è 0, che non applica timeout allo scambio di accesso. La connessione di rete iniziale è limitata separatamente da dial timeout. Preferisco usare i contesti Go per controllare la connessione e i timeout delle query. Per database SQL di Azure serverless con auto-pausa attivata, la prima connessione a un database in pausa fallisce con l'errore 40613 mentre il database riprende. Aggiungi una logica di ritentativi invece di un timeout più lungo. I database generalmente riprendono in meno di un minuto. Per ulteriori informazioni, vedi Pausa automatica e ripresa automatica.
dial timeout - Timeout della chiamata di rete in pochi secondi. Il driver predefinito è di 15 secondi per protocollo registrato. L'impostazione 0 applica lo stesso valore predefinito invece di aspettare all'infinito.
encrypt - Modalità di crittografia: strict, true/mandatory, false/optional, disable. Quando viene omesso, il valore predefinito è false/optional. Per Azure SQL e connessioni di produzione, imposta encrypt=true esplicitamente.
TrustServerCertificate - Saltare la validazione dei certificati. Quando encrypt è specificato, il valore predefinito è false. Quando encrypt è omesso, il valore predefinito è true. Usa false per connessioni di produzione e Azure SQL.
app name - Il nome dell'applicazione è passato al server.
authenticator - Autenticatore personalizzato. Usata internamente dal azuread pacchetto.

Per l'elenco completo delle opzioni di connessione, vedi Opzioni di connessione.

Compila stringhe di connessione nel codice

Usa il url.URL tipo o msdsn.Config la struct per costruire stringhe di connessione in modo programmatico invece di concatenare stringhe grezze. Questo approccio evita problemi di iniezione e codifica.

Costruttore di URL

Usa url.URL dalla libreria standard per costruire la stringa di connessione in sicurezza:

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

Usa NewConnectorConfig con msdsn.Config per una configurazione strutturata, specialmente quando devi impostare un dialer personalizzato, SessionInitSQL, o impostazioni TLS esplicite come TrustServerCertificate:

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

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

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

Se dipendi ancora dal mssql comportamento obsoleto dei nomi driver che riscrive ? i segnaposto, usa NewConnectorWithProcessQueryText invece di NewConnectorConfig quando costruisci il connettore.