Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Drivrutinen go-mssqldb stöder Always Encrypted för klientbaserad kryptering och dekryptering av känslig data. När den är aktiverad dekrypterar drivrutinen automatiskt data från krypterade kolumner och krypterar parametervärden som skickas till krypterade kolumner.
Aktivera Alltid krypterat
Sätt anslutningsparametern columnencryption till true:
sqlserver://<user>:<password>@<server>?database=AdventureWorks2025&columnencryption=true
Du behöver också importera minst ett leverantörspaket för kolumnhuvudnyckel (CMK). Utan en leverantör kan drivrutinen inte komma åt krypteringsnycklarna.
Leverantörer av huvudnycklar för kolumner
Drivrutinen stödjer tre nyckellagerleverantörer. Importera leverantörspaketet som en bieffektsimport för att registrera det.
Lokalt certifikat (PFX)
Leverantören localcert läser privata nycklar från PFX (PKCS #12)-filer på det lokala filsystemet. Leverantörens namn i CMK-metadata är pfx.
import (
_ "github.com/microsoft/go-mssqldb"
_ "github.com/microsoft/go-mssqldb/aecmk/localcert"
)
När du konfigurerar CMK i SQL Server, ställ in nyckelvägen till PFX-filens plats:
CREATE COLUMN MASTER KEY MyCMK
WITH (
KEY_STORE_PROVIDER_NAME = 'pfx',
KEY_PATH = '/path/to/certificate.pfx'
);
Om PFX-filen är lösenordsskyddad, sätt lösenordet som en miljövariabel eller via anslutningsparametern pfxpassword .
Windows certifikatlager
Leverantören MSSQL_CERTIFICATE_STORE får tillgång till certifikat i Windows Certificate Store. Denna leverantör fungerar endast på Windows.
import (
_ "github.com/microsoft/go-mssqldb"
_ "github.com/microsoft/go-mssqldb/aecmk/localcert"
)
Note
Importen localcert registrerar också Windows Certificate Store-leverantören på Windows. Ingen separat import behövs.
CMK-nyckelvägsformatet är CurrentUser/My/<thumbprint> eller LocalMachine/My/<thumbprint>:
CREATE COLUMN MASTER KEY MyCMK
WITH (
KEY_STORE_PROVIDER_NAME = 'MSSQL_CERTIFICATE_STORE',
KEY_PATH = 'CurrentUser/My/<CERTIFICATE_THUMBPRINT>'
);
Azure 密钥保管库
Leverantören akv hämtar kolumnens masternycklar från Azure Key Vault.
import (
_ "github.com/microsoft/go-mssqldb"
_ "github.com/microsoft/go-mssqldb/aecmk/akv"
)
CMK-nyckelsökvägen är Azure Key Vault-nyckelidentifierarens URL:
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>'
);
Azure Key Vault-leverantören använder azidentity.DefaultAzureCredential för autentisering. Konfigurera legitimationer via miljövariabler, hanterad identitet, Azure CLI eller andra metoder som stöds av Azure Identity-biblioteket. Mer information finns i Microsoft Entra ID-autentisering.
Sök krypterade kolumner
Med Always Encrypted aktiverat och en leverantör registrerad fungerar förfrågningar transparent:
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)
}
}
Matcha parametertyper exakt
Alltid krypterad parameterkryptering är striktare än vanlig parameterbindning. Drivrutinen ber SQL Server om krypteringsmetadata innan värden skickas, så Go-parametertypen måste matcha SQL Server-kolumntypen noggrant.
- En parameter i Go
stringskickas som standard somnvarchar. - Använd drivrutinsspecifika typer såsom
mssql.NVarCharMax,mssql.DateTime1, ellermssql.DateTimeOffsetnär den krypterade kolumnen använder en mer specifik SQL Server-typ. - Om parametertypen inte matchar den krypterade kolumntypen kan frågan misslyckas vid metadataupptäckt vid parameterkryptering med ett typfel.
Till exempel, om en krypterad kolumn är nvarchar(max), föredrar mssql.NVarCharMax när du behöver en exakt matchning med stora strängar:
_, err := db.ExecContext(ctx,
"INSERT INTO Patients (Notes) VALUES (@p1)",
sql.Named("p1", mssql.NVarCharMax("Sensitive note text")))
För allmän vägledning om parametertyper, se Datatypmappningar.
Limitations
- Always Encrypted fungerar inte med masskopieringsoperationer.
- Drivrutinen
azuresqloch Always Encrypted kan kombineras, men du måste importera både paketenazureadoch nyckelleverantörspaketen. - Krypterade
charochvarcharinlägg och uppdateringar är för närvarande begränsade. Föredra krypteradencharellernvarcharkolumner för textdata som måste använda Always Encrypted. - Säkra enklaver stöds inte.