Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A go-mssqldb meghajtó támogatja a Always Encrypted funkciót kliensoldali titkosításhoz és érzékeny adatok visszafejtéséhez. Ha engedélyezik, az illesztőprogram automatikusan dekódolja az adatokat titkosított oszlopokból, és titkosítja a titkosított oszlopokhoz küldött paraméterértékeket.
Always Encrypted engedélyezése
Állítsuk be a columnencryption kapcsolati paramétert :true
sqlserver://<user>:<password>@<server>?database=AdventureWorks2025&columnencryption=true
Legalább egy oszlop master key (CMK) szolgáltató csomagot is importálnod kell. Szolgáltató nélkül a sofőr nem fér hozzá a titkosítási kulcsokhoz.
Oszlopfőkulcs-szolgáltatók
A meghajtó három kulcsfontosságú boltszolgáltatót támogat. Importáld a szolgáltató csomagot mellékhatású importként, hogy regisztráld.
Helyi tanúsítvány (PFX)
A localcert szolgáltató a PFX (PKCS #12) fájlokból olvassa fel a privát kulcsokat a helyi fájlrendszeren. A szolgáltató neve a CMK metaadatban .pfx
import (
_ "github.com/microsoft/go-mssqldb"
_ "github.com/microsoft/go-mssqldb/aecmk/localcert"
)
A CMK konfigurálásakor az SQL Server-ben állítsuk be a kulcsutat a PFX fájl helyére:
CREATE COLUMN MASTER KEY MyCMK
WITH (
KEY_STORE_PROVIDER_NAME = 'pfx',
KEY_PATH = '/path/to/certificate.pfx'
);
Ha a PFX fájl jelszóval védett, állítsd be a jelszót környezeti változóként vagy a pfxpassword kapcsolati paraméteren keresztül.
Windows tanúsítványtároló
A MSSQL_CERTIFICATE_STORE szolgáltató a Windows Tanúsítvány Áruházban éri el a tanúsítványokat. Ez a szolgáltató csak Windows-on működik.
import (
_ "github.com/microsoft/go-mssqldb"
_ "github.com/microsoft/go-mssqldb/aecmk/localcert"
)
Megjegyzés:
Az localcert import regisztrálja a Windows Tanúsítvány Áruház szolgáltatóját is a Windows-on. Nem szükséges külön import.
A CMK kulcsút formátuma vagy CurrentUser/My/<thumbprint>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
A akv szolgáltató az oszlop master kulcsokat az Azure Key Vault-ból szerezi be.
import (
_ "github.com/microsoft/go-mssqldb"
_ "github.com/microsoft/go-mssqldb/aecmk/akv"
)
A CMK kulcs elérési útja az Azure Key Vault kulcsazonosítójának URL-címe:
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>'
);
Az Azure Key Vault szolgáltató azidentity.DefaultAzureCredential használja hitelesítésre. Konfigurálja a hitelesítéseket környezeti változók, kezelt identitás, Azure CLI vagy más, az Azure Identity könyvtár által támogatott módszerek segítségével. További információ: Microsoft Entra ID-hitelesítés.
Titkosított oszlopok lekérdezése
Ha a Always Encrypted engedélyezett és regisztrált szolgáltató van, a lekérdezések átláthatóan működnek:
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)
}
}
Pontosan egyeztess meg a paramétertípusokat
A Always Encrypted paramétertitkosítás szigorúbb, mint a hagyományos paraméterkötés. Az illezőgép az SQL Server-től titkosítási metaadatokat kér az értékek küldése előtt, így a Go paramétertípusnak szorosan egyeznie kell az SQL Server oszloptípusával.
- A Go
stringparamétert alapértelmezés szerintnvarcharformában küldi át. - Használjunk illesztő-specifikus típusokat, például
mssql.NVarCharMax,mssql.DateTime1, vagymssql.DateTimeOffsetamikor a titkosított oszlop egy specifikusabb SQL Server típust használ. - Ha a paramétertípus nem egyezik meg a titkosított oszloptípussal, a lekérdezés meghibásíthat a paraméter-titkosítás metaadat-felderítése során, és típus-eltérési hibát okozhat.
Például, ha egy titkosított oszlop nvarchar(max), akkor válassza inkább a(z) mssql.NVarCharMax elemet, amikor egy nagy karakterlánc pontos egyezésére van szükség:
_, err := db.ExecContext(ctx,
"INSERT INTO Patients (Notes) VALUES (@p1)",
sql.Named("p1", mssql.NVarCharMax("Sensitive note text")))
Általános paramétertípus-útmutatóért lásd: Data type mappings.
Limitations
- A Always Encrypted nem működik tömeges másolási műveletekkel.
- A
azuresqlmeghajtó és a Always Encrypted kombinálható, de mind aazureadkulcsszolgáltató csomagokat be kell importálni. - A titkosított
char,varcharbeillesztések és frissítések jelenleg korlátozottak. A titkosítottncharvagynvarcharoszlopokat részesítem előnyben olyan szöveges adatokhoz, amelyeknek Always Encrypted funkciót kell használnia. - A biztonságos enklávék nem támogatottak.