Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Ovladač go-mssqldb podporuje Always Encrypted pro šifrování na straně klienta a dešifrování citlivých dat. Po zapnutí ovladač automaticky dešifruje data ze zašifrovaných sloupců a šifruje hodnoty parametrů odeslané do šifrovaných sloupců.
Povolit Always Encrypted
Nastavte columnencryption parametr spojení na true:
sqlserver://<user>:<password>@<server>?database=AdventureWorks2025&columnencryption=true
Také musíte importovat alespoň jeden balíček pro poskytovatele sloupcového hlavního klíče (CMK). Bez poskytovatele ovladač nemůže získat přístup ke šifrovacím klíčům.
Poskytovatelé hlavních klíčů sloupců
Ovladač podporuje tři klíčové poskytovatele obchodů. Importujte balíček poskytovatele jako vedlejší efekt importu pro registraci.
Místní certifikát (PFX)
Poskytovatel localcert čte soukromé klíče ze souborů PFX (PKCS #12) v lokálním souborovém systému. Název poskytovatele v metadatech CMK je .pfx
import (
_ "github.com/microsoft/go-mssqldb"
_ "github.com/microsoft/go-mssqldb/aecmk/localcert"
)
Při konfiguraci CMK v SQL Server nastavte cestu klíče na umístění souboru PFX:
CREATE COLUMN MASTER KEY MyCMK
WITH (
KEY_STORE_PROVIDER_NAME = 'pfx',
KEY_PATH = '/path/to/certificate.pfx'
);
Pokud je soubor PFX chráněn heslem, nastavte heslo jako proměnnou prostředí nebo pomocí parametru připojení pfxpassword.
úložiště certifikátů Windows
Poskytovatel MSSQL_CERTIFICATE_STORE přistupuje k certifikátům ve Windows Certificate Store. Tento poskytovatel funguje pouze na Windows.
import (
_ "github.com/microsoft/go-mssqldb"
_ "github.com/microsoft/go-mssqldb/aecmk/localcert"
)
Note
Import localcert také registruje poskytovatele Windows Certificate Store na Windows. Není potřeba žádný samostatný import.
Formát cesty klíče CMK je CurrentUser/My/<thumbprint> nebo LocalMachine/My/<thumbprint>:
CREATE COLUMN MASTER KEY MyCMK
WITH (
KEY_STORE_PROVIDER_NAME = 'MSSQL_CERTIFICATE_STORE',
KEY_PATH = 'CurrentUser/My/<CERTIFICATE_THUMBPRINT>'
);
Azure Key Vault
Poskytovatel akv získává hlavní klíče sloupců z Azure Key Vault.
import (
_ "github.com/microsoft/go-mssqldb"
_ "github.com/microsoft/go-mssqldb/aecmk/akv"
)
Cesta ke klíči CMK je adresa URL identifikátoru klíče Azure Key Vault:
CREATE COLUMN MASTER KEY MyCMK
WITH (
KEY_STORE_PROVIDER_NAME = 'AZURE_KEY_VAULT',
KEY_PATH = 'https://<VAULT_NAME>.vault.azure.net/keys/<KEY_NAME>/<KEY_VERSION>'
);
Poskytovatel Azure Key Vault používá azidentity.DefaultAzureCredential pro autentizaci. Konfigurujte přihlasovací údaje pomocí proměnných prostředí, spravované identity, Azure CLI nebo jiných metod podporovaných knihovnou Azure Identity. Další informace naleznete v tématu Ověřování Pomocí entra ID společnosti Microsoft.
Dotazujte se na šifrované sloupce
S aktivovaným Always Encrypted a registrací poskytovatele fungují dotazy transparentně:
import (
"context"
"database/sql"
"fmt"
"log"
_ "github.com/microsoft/go-mssqldb"
_ "github.com/microsoft/go-mssqldb/aecmk/localcert"
)
func main() {
db, err := sql.Open("sqlserver",
"sqlserver://<user>:<password>@<server>?database=AdventureWorks2025&columnencryption=true")
if err != nil {
log.Fatal(err)
}
defer db.Close()
ctx := context.Background()
// Reads automatically decrypt encrypted columns
var ssn string
err = db.QueryRowContext(ctx,
"SELECT SSN FROM Patients WHERE Id = @p1",
sql.Named("p1", 1)).Scan(&ssn)
if err != nil {
log.Fatal(err)
}
fmt.Println("SSN:", ssn)
// Parameters are automatically encrypted for encrypted columns
_, err = db.ExecContext(ctx,
"INSERT INTO Patients (Name, SSN) VALUES (@p1, @p2)",
sql.Named("p1", "Alice"),
sql.Named("p2", "123-45-6789"))
if err != nil {
log.Fatal(err)
}
}
Přesně zrovnat typy parametrů
Šifrování parametrů Always Encrypted je přísnější než běžné vázání parametrů. Ovladač žádá SQL Server o šifrovací metadata před odesláním hodnot, takže typ parametru Go musí přesně odpovídat typu sloupce SQL Server.
- Parametr Go
stringse ve výchozím nastavení odesílá jakonvarchar. - Použijte specifické typy pro ovladače, například
mssql.NVarCharMax,mssql.DateTime1, nebomssql.DateTimeOffsetkdyž šifrovaný sloupec používá konkrétnější typ SQL Server. - Pokud typ parametru neodpovídá typu šifrovaného sloupce, může dotaz během zjišťování metadat šifrování parametrů selhat s chybou neshody typů.
Například pokud je sloupec zašifrovaný jako nvarchar(max), preferujte mssql.NVarCharMax, když potřebujete přesnou shodu s dlouhým řetězcem:
_, err := db.ExecContext(ctx,
"INSERT INTO Patients (Notes) VALUES (@p1)",
sql.Named("p1", mssql.NVarCharMax("Sensitive note text")))
Obecné pokyny k typům parametrů najdete v tématu Mapování datových typů.
Omezení
- Always Encrypted nefunguje s hromadnými kopírováními.
- Ovladač
azuresqla Always Encrypted lze kombinovat, ale musíte importovat balíčekazureadi balíčky poskytovatele klíčů. - Šifrování,
charvarcharvkládání a aktualizace jsou v současnosti omezené. Preferujte šifrovanéncharnebonvarcharsloupce pro textová data, která musí používat Always Encrypted. - Zabezpečené enklávy nejsou podporovány.