Tüm Ürünler
Search
Belge Merkezi

Database Autonomy Service:Sütun şifreleme için Go sürücüsünü entegre etme

Son Güncelleme:Oct 15, 2026

alibabacloud-encdb-mysql-go-client , istemci tarafında sütun şifrelemesi sağlayan bir Go sürücüsüdür. Sorgu sonuçlarını yakalar ve şifreli metni otomatik olarak çözer; böylece uygulamanız SQL sorgularınızı değiştirmeden hassas sütunları düz metin olarak okuyabilir. Şifre çözme işlemini etkinleştirmek için bağlantı URL'sinde ana şifreleme anahtarınızı (MEK) belirtin.

Önkoşullar

  • Şifreleme gerektiren sütunları bulmak için bir hassas veri algılama taraması çalıştırdınız.

  • Hedef veritabanı için sütun şifrelemeyi yapılandırdınız ve veritabanı hesabının iznini Ciphertext Permission (JDBC Decryption) olarak ayarladınız. Ayrıntılı talimatlar için bkz. sütun şifreleme.

  • Örnek için bağlantı ayrıntıları: ana bilgisayar adı, bağlantı noktası, veritabanı adı, kullanıcı adı ve parola.

MEK'yi yapılandırma

Anahtar, sunucu ve istemcinin aynı anahtarı paylaşmasını sağlayan güvenli bir asimetrik şifreleme protokolü aracılığıyla istemciden veritabanı sunucusuna iletilir; bu sayede veriler simetrik şifreleme yoluyla güvenli bir şekilde aktarılır.

Değer aralığı: Tam olarak 32 karakter uzunluğunda, 16 baytlık onaltılık bir dize.

Önemli uyarı: MEK'nizi kaybederseniz, bu ilke altında şifrelenen tüm geçmiş sorgu sonuçları kalıcı olarak çözülemez hale gelir.

MEK oluşturmak için anahtar oluşturma araçlarını veya çeşitli programlama dillerindeki rastgele işlevleri kullanabilirsiniz. Örneğin:

  • Linux: openssl rand -hex 16 komutunu çalıştırın.

  • Windows: OpenSSL tool yükleyin ve kullanın.

Kullanım notları

  • MEK değerini saklamalı ve gizli tutmalısınız.

  • Go sürümü 1,18 veya üzeri olmalıdır.

İstemci entegrasyonu

1. Sürücüyü edinin

alibabacloud-encdb-mysql-go-client , topluluk tarafından geliştirilen Go MySQL Driver ve standart Go database/sql/driver arabirimiyle tam uyumludur; bu sayede kod değişikliği yapmadan uygulamanıza entegre edilebilir.

Sürücü GitHub'da açık kaynaklıdır. Daha fazla bilgi için bkz. alibabacloud-encdb-mysql-go-client.

Sürücüyü edinmek için aşağıdaki komutu çalıştırın:

go get github.com/aliyun/alibabacloud-encdb-mysql-go-client@latest

2. MEK'yi yapılandırın ve bağlanın

Not
  • URL'de birden çok parametreyi birleştirmek için ampersan (&) kullanabilirsiniz.

  • İstemci, MEK değerini yerel olarak işler ve zarf şifreleme kullanarak sunucuya güvenli bir şekilde gönderir; bu sayede MEK sızdırılmaz.

Örnek kod:

// Replace the placeholders with your actual endpoint (hostname), port number (port), database name (dbname), username, and password.
db, err := sql.Open("encmysql", "<username>:<password>@tcp(<hostname>:<port>)/<dbname>?MEK=00112233445566778899aabbccddeeff")
if err != nil {
    panic(err)
}

3. Düz metin verilerini sorgulayın

Örnek kod:

// Send a query.	
rows, err := db.Query("SELECT * FROM sddp_test_mask")
if err != nil {
    log.Fatalf("Failed to query data: %v", err)
}
// Make sure to close the result set after use.
defer rows.Close() 
// Define variables to store the data for each row.
var id int
var name string
var password string
var age int
// Iterate over each row of data.
for rows.Next() {
    // Scan the data of the current row into variables.
    err := rows.Scan(&id, &name, &password, &age)
    if err != nil {
        log.Fatalf("Failed to scan row: %v", err)
    }
    // Print the data of the current row.
    fmt.Printf("read data: id=%d, name=%s, password=%s, age=%d\n", id, name, password, age)
}

Tam kod örneği

Aşağıdaki örnekte, PolarDB for MySQL veritabanındaki şifrelenmiş sütunlardan düz metin verilerini sorgulamak için Ciphertext Permission (JDBC Decryption) iznine sahip bir veritabanı hesabı kullanılmaktadır.

Bu örnekte kullanılan veritabanı yapılandırması, Sütun şifreleme konusunun PolarDB for MySQL veritabanı için sütun şifreleme örneği bölümünde ayrıntılı olarak açıklanmıştır.

package main
import (
    "database/sql"
    "fmt"
    "log"
    _ "github.com/aliyun/alibabacloud-encdb-mysql-go-client"
)
func main() {
    // Replace the placeholders with your actual endpoint (hostname), port number (port), database name (dbname), username, and password.
    db, err := sql.Open("encmysql", "sddp_02:He******4@tcp(polar***.rwlb.rds.aliyuncs.com:3306)/sddp_test?MEK=00112233445566778899aabbccddeeff")
    if err != nil {
        panic(err)
    }
    rows, err := db.Query("SELECT * FROM user3 LIMIT 3")
    if err != nil {
        log.Fatalf("Failed to query data: %v", err)
    }
    // Make sure to close the result set after use.
    defer rows.Close() 
    // Define variables to store the data for each row.
    var id int
    var name string
    var password string
    var age int
    // Iterate over each row of data.
    for rows.Next() {
        // Scan the data of the current row into variables.
        err := rows.Scan(&id, &name, &password, &age)
        if err != nil {
            log.Fatalf("Failed to scan row: %v", err)
        }
        // Print the data of the current row.
        fmt.Printf("read data: id=%d, name=%s, password=%s, age=%d\n", id, name, password, age)
    }
}

Kodu çalıştırdıktan sonra, şifresi çözülmüş çıktı aşağıdakine benzer:

read data: id=1, name=2clxxx, password=xxx, age=3
read data: id=2, name=RZlxxx6Z=, password=)xxxv9>, age=4
read data: id=3, name=!xxxrm, password=kxxxS, age=5