全部产品
Search
文档中心

Data Security Center:Driver Golang

更新时间:Jul 06, 2025

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.

Peringatan

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 MEK dan 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@latest

2. Konfigurasikan parameter MEK dan hubungkan ke database

Catatan
  • Jika Anda mendapatkan driver dengan mengonfigurasi URL, Anda dapat menggunakan ampersand (&) untuk menggabungkan beberapa parameter.

  • Parameter MEK dan parameter lainnya dikonfigurasi di sisi klien dan ditransmisikan ke sisi server menggunakan Enkripsi amplop. Selama proses ini, kerahasiaan nilai parameter MEK harus 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.

image