alibabacloud-encdb-mysql-go-client 秘匿クライアントドライバーを使用して、Go アプリケーションを秘匿データベースに接続できます。これにより、常時秘匿機能を使用して、データベーステーブルのデータ列を暗号化できます。このトピックでは、Go ドライバーを使用して秘匿データベースにアクセスする方法について説明します。
alibabacloud-encdb-mysql-go-client ドライバーは、必要なユーザーキーが提供されると、自動的に暗号文を復号化し、プレーンテキストデータを返します。このプロセスは、アプリケーションに対して透過的です。わずか数行のコードを設定するだけで、アプリケーションを秘匿データベースに接続できます。これにより、常時秘匿機能の使用コストを削減できます。
前提条件
常時秘匿機能が有効になっており、必要に応じて暗号化ルールが設定されていることを確認してください。常時秘匿機能の有効化の詳細については、「常時秘匿機能の有効化」をご参照ください。
暗号化されたデータベースの接続情報として、ドメイン名 (host)、ポート、データベース名 (dbname)、ユーザー名、パスワードが必要です。
Go プログラムがデプロイされており、Go のバージョンは 1.18 以降である必要があります。
操作手順
秘匿データベースの Go ドライバーの取得
go get github.com/aliyun/alibabacloud-encdb-mysql-go-client@latestalibabacloud-encdb-mysql-go-client ドライバーは、Go MySQL ドライバーのコミュニティ版と完全な互換性があり、標準の Go database/sql/driver インターフェイスをサポートしています。これにより、アプリケーションコードを変更することなく、ドライバーを統合できます。
このドライバーは GitHub でオープンソースとして公開されています。詳細については、https://github.com/aliyun/alibabacloud-encdb-mysql-go-client をご参照ください。
秘匿クライアントからのデータクエリ
alibabacloud-encdb-mysql-go-client は、Go MySQL ドライバーと同じ方法で使用できます。まず、マスターキー (MEK) と暗号化アルゴリズム (ENC_ALGO) のパラメーターを設定する必要があります。PolarDB は、次のように URL にパラメーターを埋め込むことをサポートしています。
mek := ...
encAlgo := ...
db, err := sql.Open("encmysql", "<username>:<password>@tcp(<hostname>:<port>)/<dbname>?MEK=<mek>&ENC_ALGO=<encAlgo>")
if err != nil {
panic(err)
}URL で複数のパラメーターを設定するには、アンパサンド (
&) で区切ります。MEK はローカルクライアントで処理され、サーバーに送信される前にエンベロープ暗号化によって保護されます。これにより、MEK が公開されることはありません。
次の表に、MEK および ENC_ALGO パラメーターの説明と例を示します。
パラメーター | 説明 | 例 |
MEK | カスタマーマスターキー (CMK)。このキーはお客様が指定します。 一般的な生成方法:`openssl` や `openssl rand -hex 16` などのパスワード生成ツールを使用します。プログラミング言語の乱数関数を使用するか、サードパーティの Key Management Service (KMS) からキーを取得することもできます。 有効値:16 バイトの 16 進数文字列 (32 文字)。 重要 カスタマーマスターキーは、暗号化されたデータにアクセスするためのルート認証情報です。セキュリティ上の理由から、秘匿データベースはマスターキーを保持または管理しません。また、マスターキーを生成またはバックアップするサービスも提供しません。マスターキーはご自身で生成する必要があります。キーを紛失すると、既存のデータにアクセスできなくなります。したがって、カスタマーマスターキーは安全にバックアップしてください。 | 00112233445566778899aabbccddeeff |
ENC_ALGO | 保護されたデータに使用される暗号化アルゴリズムです。高度暗号化標準 (AES) と中国暗号アルゴリズム
説明 AES_128_ECB および SM4_128_ECB 暗号化アルゴリズムはセキュリティが低いため、使用には注意が必要です。 | SM4_128_CBC |
例
この例では、`go mod init demo` で作成した新しいデモプロジェクトを使用して、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("read data: %d %s %f\n", a, b, c)
}例の中のプレースホルダーの接続情報 (ドメイン名 (ホスト名)、ポート、データベース名 (dbname)、ユーザー名、パスワードなど) を、ご利用のクラスターの実際の情報に置き換えてください。コードを実行すると、次のような復号化された結果が返されます。
read data: 0 test 0.000000