全部产品
Search
文档中心

PolarDB:Integrasikan driver Go

更新时间:Jan 14, 2026

Anda dapat menggunakan driver client confidential alibabacloud-encdb-mysql-go-client untuk menghubungkan aplikasi Go ke confidential database, sehingga memungkinkan pemanfaatan fitur kerahasiaan penuh guna mengenkripsi kolom data dalam tabel database. Topik ini menjelaskan cara menggunakan driver Go tersebut untuk mengakses confidential database.

Driver alibabacloud-encdb-mysql-go-client secara otomatis mendekripsi ciphertext dan mengembalikan data teks biasa selama kunci pengguna yang diperlukan tersedia. Proses ini transparan bagi aplikasi Anda. Cukup dengan mengonfigurasi beberapa baris kode, Anda dapat menghubungkan aplikasi ke confidential database, sehingga mengurangi biaya penggunaan fitur kerahasiaan penuh.

Prasyarat

  • Pastikan fitur always-confidential telah diaktifkan dan aturan enkripsi telah dikonfigurasi sesuai kebutuhan. Untuk informasi selengkapnya tentang cara mengaktifkan fitur always-confidential, lihat Enable the always-confidential feature.

  • Anda memiliki informasi koneksi untuk database terenkripsi: nama domain (host), port, nama database (dbname), username, dan password.

  • Program Go telah dideploy, dan versi Go adalah 1.18 atau lebih baru.

Prosedur

Dapatkan driver Go untuk confidential database

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

Kueri data dari client confidential

Anda dapat menggunakan alibabacloud-encdb-mysql-go-client dengan cara yang sama seperti menggunakan driver MySQL Go. Pertama, konfigurasikan parameter Master Key (MEK) dan algoritma enkripsi (ENC_ALGO). PolarDB mendukung penyematan parameter dalam URL, sebagai berikut:

mek := ...
encAlgo := ...

db, err := sql.Open("encmysql", "<username>:<password>@tcp(<hostname>:<port>)/<dbname>?MEK=<mek>&ENC_ALGO=<encAlgo>")
if err != nil {
 panic(err)
}
Catatan
  • Untuk mengonfigurasi beberapa parameter dalam URL, pisahkan dengan tanda ampersand (&).

  • MEK diproses di client lokal dan dilindungi oleh Enkripsi amplop sebelum dikirim ke server, sehingga memastikan MEK tidak terekspos.

Tabel berikut menjelaskan parameter MEK dan ENC_ALGO serta memberikan contohnya.

Parameter

Deskripsi

Contoh

MEK

kunci master pelanggan (CMK). Anda menentukan kunci ini.

Metode pembuatan umum: Gunakan tool pembuat password, seperti openssl atau `openssl rand -hex 16`. Anda juga dapat menggunakan Fungsi acak dalam bahasa pemrograman atau memperoleh kunci dari Key Management Service (KMS) pihak ketiga.

Rentang nilai: String heksadesimal sepanjang 16 byte, yaitu 32 karakter.

Penting

kunci master pelanggan merupakan kredensial utama untuk mengakses data terenkripsi. Untuk alasan keamanan, confidential database tidak menyimpan atau mengelola kunci master Anda. Layanan ini juga tidak menyediakan fitur untuk menghasilkan atau backup kunci master Anda. Anda harus membuat kunci master tersebut sendiri. Jika Anda kehilangan kunci tersebut, Anda tidak akan lagi dapat mengakses data yang sudah ada. Oleh karena itu, backup kunci master pelanggan Anda secara aman.

00112233445566778899aabbccddeeff

ENC_ALGO

algoritma enkripsi yang digunakan untuk data yang dilindungi. Mendukung dua kategori utama: Standar Enkripsi Lanjutan (AES) dan algoritma kriptografi Tiongkok SM4. Algoritma spesifik meliputi:

  • SM4_128_GCM (default)

  • SM4_128_CTR

  • SM4_128_CBC

  • SM4_128_ECB (tidak direkomendasikan)

  • AES_128_GCM

  • AES_128_CTR

  • AES_128_CBC

  • AES_128_ECB (tidak direkomendasikan)

Catatan

Algoritma enkripsi AES_128_ECB dan SM4_128_ECB kurang aman. Gunakan dengan hati-hati.

SM4_128_CBC

Contoh

Contoh ini menggunakan proyek demo baru yang dibuat dengan go mod init demo untuk menunjukkan cara menggunakan alibabacloud-encdb-mysql-go-client.

package main

import (
 "database/sql"
 "fmt"
 _ "github.com/aliyun/alibabacloud-encdb-mysql-go-client"
)

func main() {
 
 db, err := sql.Open("encmysql", "<username>:<password>@tcp(<hostname>:<port>)/<dbname>?MEK=00112233445566778899aabbccddeeff&ENC_ALGO=SM4_128_CBC")
 if err != nil {
 panic(err)
 }
 _, err = db.Exec("DROP TABLE IF EXISTS test")
 if err != nil {
 panic(err)
 }
 _, err = db.Exec(`create table test(a int, b text, c float)`)
 if err != nil {
 panic(err)
 }
 _, err = db.Exec(`insert into test set a = 0, b = 'test', c = 0.0`)
 if err != nil {
 panic(err)
 }
 rows, err := db.Query("SELECT * FROM test")
 rows.Next()
 var a int
 var b string
 var c float32

 err = rows.Scan(&a, &b, &c)
 fmt.Printf("membaca data: %d %s %f\n", a, b, c)
}

Ganti informasi koneksi placeholder dalam contoh—seperti nama domain (hostname), port, nama database (dbname), username, dan password—dengan informasi aktual kluster Anda. Setelah menjalankan kode, sistem akan mengembalikan hasil yang telah didekripsi seperti berikut:

membaca data: 0 test 0.000000