Jika Anda mengenkripsi kolom data sensitif dari tabel dalam instance ApsaraDB RDS for MySQL atau kluster PolarDB for MySQL dan ingin menggunakan aplikasi Go untuk mengakses data teks biasa dari kolom terenkripsi tersebut, Anda dapat menggunakan alibabacloud-encdb-mysql-go-client untuk terhubung ke database tempat tabel tersebut berada. Topik ini menjelaskan cara menggunakan alibabacloud-encdb-mysql-go-client untuk terhubung ke database dan mengakses data teks biasa di kolom terenkripsi.
Informasi latar belakang
Alibaba Cloud menyediakan driver klien selalu rahasia alibabacloud-encdb-mysql-go-client untuk bahasa pemrograman Go. Anda hanya perlu menggunakan driver ini untuk terhubung ke database di sisi klien dan menentukan kunci enkripsi utama (MEK) dalam URL koneksi database untuk mengakses database terenkripsi. Driver ini secara otomatis mendekripsi data teks sandi dan mengembalikan data teks biasa.
MEK adalah kredensial utama yang Anda gunakan untuk mengotorisasi klien agar dapat mengakses data terenkripsi. Untuk memastikan keamanan, fitur database selalu rahasia tidak menghasilkan, menyimpan, atau mencadangkan MEK Anda. Anda harus secara manual menghasilkan MEK dan memastikan bahwa MEK disimpan dengan aman. Untuk memastikan keamanan database yang memiliki fitur database selalu rahasia diaktifkan, Anda harus menyimpan dan mengelola MEK dengan cara yang aman. Kami merekomendasikan agar Anda mencadangkan MEK Anda.
Prasyarat
Fitur enkripsi kolom diaktifkan untuk database yang diperlukan, dan izin ciphertext permission (JDBC decryption) diberikan kepada akun database. Untuk informasi lebih lanjut, lihat Konfigurasikan enkripsi kolom untuk database.
Informasi koneksi tentang database terenkripsi diperoleh, termasuk Titik akhir, nomor port, nama database, dan akun database.
Catatan penggunaan
Anda harus menyimpan
MEKdan menjaga kerahasiaannya.Versi Go harus 1.18 atau yang lebih baru.
Prosedur
1. Dapatkan driver
alibabacloud-encdb-mysql-go-client sepenuhnya kompatibel dengan Go-MySQL-Driver untuk Edisi Komunitas MySQL dan mendukung operasi database/sql/driver standar Go. Dalam hal ini, koneksi database dapat dibuat tanpa perlu memodifikasi kode.
Kode sumber terbuka driver tersedia di GitHub. Untuk informasi lebih lanjut, lihat alibabacloud-encdb-mysql-go-client.
Jalankan perintah berikut untuk mendapatkan driver:
go get github.com/aliyun/alibabacloud-encdb-mysql-go-client@latest2. Konfigurasikan parameter MEK dan hubungkan ke database
Jika Anda mendapatkan driver dengan mengonfigurasi URL, Anda dapat menggunakan ampersand (
&) untuk menggabungkan beberapa parameter.Parameter
MEKdan parameter lainnya dikonfigurasi di sisi klien dan ditransmisikan ke sisi server menggunakan Enkripsi amplop. Selama proses ini, kerahasiaan nilai parameterMEKharus dipastikan.
Contoh kode:
// Perbarui informasi koneksi seperti endpoint (hostname), nomor port (port), nama instance (dbname), nama pengguna (username), dan kata sandi (password) berdasarkan skenario aktual.
db, err := sql.Open("encmysql", "<username>:<password>@tcp(<hostname>:<port>)/<dbname>?MEK=00112233445566778899aabbccddeeff")
if err != nil {
panic(err)
}3. Kueri data teks biasa dari kolom terenkripsi
Contoh kode:
// Mulai kueri.
rows, err := db.Query("SELECT * FROM sddp_test_mask")
if err != nil {
log.Fatalf("Gagal mengkueri data: %v", err)
}
// Pastikan set hasil kueri ditutup setelah digunakan.
defer rows.Close()
// Definisikan variabel untuk menyimpan data untuk setiap baris.
var id int
var name string
var password string
var age int
// Lintasi setiap baris.
for rows.Next() {
// Ekstrak data dari baris saat ini dan tetapkan data ke variabel yang ditentukan.
err := rows.Scan(&id, &name, &password, &age)
if err != nil {
log.Fatalf("Gagal memindai baris: %v", err)
}
// Tampilkan data dari baris saat ini.
fmt.Printf("membaca data: id=%d, name=%s, password=%s, age=%d\n", id, name, password, age)
}Kode contoh lengkap
Sebagai contoh, Anda menggunakan akun database yang memiliki izin ciphertext permission (JDBC decryption) untuk melihat data teks biasa dari kolom terenkripsi dalam database PolarDB for MySQL.
Untuk informasi lebih lanjut tentang konfigurasi database dalam kode contoh berikut, lihat Enkripsi kolom dalam database PolarDB for MySQL di bagian Enkripsi kolom.
package main
import (
"database/sql"
"fmt"
"log"
_ "github.com/aliyun/alibabacloud-encdb-mysql-go-client"
)
func main() {
// Perbarui informasi koneksi seperti endpoint (hostname), nomor port (port), nama instance (dbname), nama pengguna (username), dan kata sandi (password) berdasarkan skenario aktual.
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("Gagal mengkueri data: %v", err)
}
// Pastikan set hasil kueri ditutup setelah digunakan.
defer rows.Close()
// Definisikan variabel untuk menyimpan data untuk setiap baris.
var id int
var name string
var password string
var age int
// Lintasi setiap baris.
for rows.Next() {
// Ekstrak data dari baris saat ini dan tetapkan data ke variabel yang ditentukan.
err := rows.Scan(&id, &name, &password, &age)
if err != nil {
log.Fatalf("Gagal memindai baris: %v", err)
}
// Tampilkan data dari baris saat ini.
fmt.Printf("membaca data: id=%d, name=%s, password=%s, age=%d\n", id, name, password, age)
}
}Setelah kode sebelumnya dipanggil, hasil dekripsi serupa dengan informasi berikut dikembalikan.
