Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Sürücü, go-mssqldb istemci tarafı şifreleme ve hassas verilerin şifrelenmesi için Always Encrypted özelliğini destekler. Etkinleştirildiğinde, sürücü şifrelenmiş sütunlardan verileri otomatik olarak çözer ve şifrelenmiş sütunlara gönderilen parametre değerlerini şifreler.
Always Encrypted'i etkinleştir
columnencryption bağlantı parametresini true olarak ayarlayın:
sqlserver://<user>:<password>@<server>?database=AdventureWorks2025&columnencryption=true
Ayrıca en az bir sütun ana anahtarı (CMK) sağlayıcı paketini içe aktarmanız gerekir. Sağlayıcı olmadan sürücü şifreleme anahtarlarına erişemez.
Sütun ana anahtar sağlayıcıları
Sürücü, üç ana mağaza sağlayıcısını destekler. Sağlayıcı paketini yan etki olarak kaydetmek için içe aktarın.
Yerel sertifika (PFX)
Sağlayıcı, localcert yerel dosya sistemindeki PFX (PKCS #12) dosyalarından özel anahtarları okur. CMK meta verisindeki sağlayıcı adı .pfx
import (
_ "github.com/microsoft/go-mssqldb"
_ "github.com/microsoft/go-mssqldb/aecmk/localcert"
)
SQL Server'da CMK yapılandırılırken, anahtar yolunu PFX dosya konumuna ayarlayın:
CREATE COLUMN MASTER KEY MyCMK
WITH (
KEY_STORE_PROVIDER_NAME = 'pfx',
KEY_PATH = '/path/to/certificate.pfx'
);
PFX dosyası şifreyle korunuyorsa, şifreyi bir ortam değişkeni veya bağlantı parametresi aracılığıyla pfxpassword ayarlayın.
Windows Sertifika Deposu
Sağlayıcı, MSSQL_CERTIFICATE_STORE sertifikalara Windows Sertifika Mağazası'ndan erişir. Bu sağlayıcı sadece Windows'ta çalışır.
import (
_ "github.com/microsoft/go-mssqldb"
_ "github.com/microsoft/go-mssqldb/aecmk/localcert"
)
Note
localcert içe aktarma, Windows'ta Windows Certificate Store sağlayıcısını da kaydeder. Ayrı bir ithal gerekmez.
CMK anahtar yolu biçimi CurrentUser/My/<thumbprint> veya LocalMachine/My/<thumbprint> şeklindedir:
CREATE COLUMN MASTER KEY MyCMK
WITH (
KEY_STORE_PROVIDER_NAME = 'MSSQL_CERTIFICATE_STORE',
KEY_PATH = 'CurrentUser/My/<CERTIFICATE_THUMBPRINT>'
);
Azure Key Vault
Sağlayıcı, akv sütun ana anahtarlarını Azure Key Vault'tan alır.
import (
_ "github.com/microsoft/go-mssqldb"
_ "github.com/microsoft/go-mssqldb/aecmk/akv"
)
CMK anahtar yolu, Azure Key Vault anahtar tanımlayıcı URL'sidir:
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 sağlayıcısı kimlik doğrulama için kullanırazidentity.DefaultAzureCredential. Kimlik bilgilerini ortam değişkenleri, yönetilen kimlik, Azure CLI veya Azure Identity kütüphanesi tarafından desteklenen diğer yöntemlerle yapılandırmak. Daha fazla bilgi için bkz. Microsoft Entra Id kimlik doğrulaması.
Şifrelenmiş sütunları sorgulama
Her Zaman Şifreli (Always Encrypted) etkinleştirildiğinde ve bir sağlayıcı kayıtlı olduğunda, sorgular şeffaf şekilde çalışır:
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)
}
}
Parametre tiplerini tam olarak eşleştirin
Her zaman Şifreli parametre şifrelemesi, sıradan parametre bağlamasından daha katıdır. Sürücü, değerleri göndermeden önce SQL Server'dan şifreleme meta verisi ister, bu yüzden Go parametre tipi SQL Server sütun tipiyle yakından örtüşmelidir.
- Bir Go
stringparametresi, varsayılan olaraknvarcharolarak gönderilir. - Sürücüye özgü tipler gibi
mssql.NVarCharMax,mssql.DateTime1, veyamssql.DateTimeOffsetşifrelenmiş sütun daha spesifik bir SQL Server tipi kullandığında kullanın. - Parametre tipi şifrelenmiş sütun tipiyle eşleşmiyorsa, sorgu parametre şifreleme meta veri keşfi sırasında tür uyumsuzluğu hatası ile başarısız olabilir.
Örneğin, şifrelenmiş bir sütun nvarchar(max) ise, tam bir büyük dize eşleşmesine ihtiyaç duyduğunuzda mssql.NVarCharMax tercih edin:
_, err := db.ExecContext(ctx,
"INSERT INTO Patients (Notes) VALUES (@p1)",
sql.Named("p1", mssql.NVarCharMax("Sensitive note text")))
Genel parametre tipi rehberliği için bkz . Veri tipi eşlemeleri.
Sınırlamalar
- Always Encrypted, toplu kopyalama işlemleriyle çalışmaz.
-
azuresqlsürücüsü ile Always Encrypted birlikte kullanılabilir, ancak hemazureadöğesini hem de anahtar sağlayıcı paketlerini içe aktarmalısınız. - Şifreli
charvevarcharekleme ile güncellemeler şu anda sınırlıdır. Her zaman Şifreli olması gereken metin verileri için şifrelincharveyanvarcharsütunları tercih edin. - Güvenli bölgeler desteklenmiyor.