日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

Spark全密態計算引擎基礎版使用示例

更新時間:
重要

本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業務造成影響,請務必仔細閱讀。

云原生數據倉庫 AnalyticDB MySQL 版Spark全密態計算引擎基礎版可以加密敏感數據,并將數據以密文的形式傳輸和存儲,只有密鑰擁有者才能解密數據,避免數據泄露。本文以云數據庫RDS MySQL例,介紹使用Spark全密態計算引擎基礎版加密數據,計算和分析密態數據,解密計算結果的完整過程。

前提條件

  • 集群的產品系列為企業版、基礎版或湖倉版

  • 已創建數據庫賬號。

  • 已為RAM用戶授予AliyunADBFullAccess、AliyunADBSparkProcessingDataRole和AnalyticDB for MySQL庫表的讀寫權限。具體操作,請參見賬號授權

  • 已安裝Java 8開發環境,以運行客戶端工具。本文以操作系統為Linux的ECS實例為例。

注意事項

  • adb-crypto-tool客戶端工具僅支持加密或解密存儲在MySQLPostgreSQL數據庫中的數據。

    說明

    MySQL或PostgreSQL數據庫可以是云數據庫、自建數據庫或第三方云數據庫。

  • 全密態計算引擎尚不支持Decimal數據類型(可使用Float或Double數據類型作為替代)及嵌套數據類型。

  • 對于PostgreSQL數據庫,全密態計算引擎暫不支持自動去除Char(n)數據類型的尾部空格,建議使用Varchar(n) 類型。

數據準備

本文示例的RDS MySQL數據庫名為adb,并在該庫中創建了一張名為customer的表,示例如下:

CREATE DATABASE IF NOT EXIST adb;
CREATE TABLE IF NOT EXISTS adb.customer(
id int,
name varchar(1023),
address varchar(1023),
age int
);

customer表中插入數據,示例如下:

INSERT INTO customer (id,name,address,age) VALUES('1', 'james', 'beijing', '10');
INSERT INTO customer (id,name,address,age) VALUES('2', 'bond', 'beijing', '15');
INSERT INTO customer (id,name,address,age) VALUES('3', 'jack', 'shanghai', '20');
INSERT INTO customer (id,name,address,age) VALUES('4', 'lucy', 'hangzhou', '25');
INSERT INTO customer (id,name,address,age) VALUES('5', 'tom', 'qingdao','30');

使用流程

  1. 步驟一:安裝加解密客戶端。下載并安裝adb-crypto-tool客戶端

  2. 步驟二:加密數據并上傳。通過客戶端工具,將數據庫明文表中的數據加密成密文數據集,并上傳至OSS。

  3. 步驟三:執行密文數據的SQL計算。通過AnalyticDB for MySQL Spark全密態計算引擎的SQL窗口,執行密態數據計算,計算結果將以密文的形式存儲在OSS。

  4. 步驟四:下載密文結果數據并解密。將密文計算結果下載到本地,使用客戶端工具解密后自動上傳至數據庫明文表中。

安裝加解密客戶端

  1. 下載客戶端工具。下載鏈接為adb-crypto-tool-1.0.4.zip

  2. 解壓adb-crypto-tool-1.0.4.zip壓縮包。

    unzip adb-crypto-tool-1.0.4.zip

    解壓縮會得到以下3個文件或文件夾:

    • cryptoTool:加解密工具的入口。

      說明

      cryptoTool依賴bash環境,Windows系統可使用WSL等工具執行。

    • demo.json:示例配置文件。

    • dist:加解密工具的依賴包。

加密數據并上傳

  1. 準備加密配置文件。您可參考demo.json新建配置文件,或直接修改demo.json配置文件的tablejdbcUrlusernamepassword參數。本文示例新建配置文件encryption_config.json。示例如下:

    {
      "dataDir": "file:///tmp",
      "table": [
        "customer"
      ],
      "encAlgo": "AES_128_GCM",
      "mek": "00112233445566778899aabbccdd****",
      "jdbcUrl": "jdbc:mysql://rm-bp1487t8613zz****.mysql.rds.aliyuncs.com:3306/adb",
      "username": "demo_user",
      "password": "demo_password",
      "saveMode": "Overwrite",
      "format":"EncBlocksSource"
    }

    參數說明如下。

    參數

    描述

    dataDir

    存儲密文數據集的本地路徑。

    table

    加密的表名。本示例為customer

    encAlgo

    密文的加解密算法。當前僅支持AES_128_GCM。

    mek

    用戶主密鑰(MEK)用于加密數據密鑰(DEK)。詳情請參見密鑰介紹

    用戶主密鑰的格式為16字節的十六進制字符串。您可以通過OpenSSL工具生成密鑰。本文示例為00112233445566778899aabbccdd****

    警告
    • 用戶主密鑰是訪問加密數據的根憑據,一旦丟失密鑰,將無法再訪問已有的數據。請妥善保管用戶主密鑰。

    • 全密態計算引擎不提供用戶主密鑰的生成和備份服務,您需要按照密鑰格式輸入用戶主密鑰。

    jdbcUrl

    數據庫的連接地址和數據庫名稱。僅支持MySQLPostgreSQL數據庫。連接地址格式為:

    • MySQL數據庫:jdbc:mysql://ip:port/database_name

    • PostgreSQL數據庫:jdbc:postgresql://ip:port/database_name

    本文示例為jdbc:mysql://rm-bp1487t8613zz****.mysql.rds.aliyuncs.com:3306/adb

    userName

    數據庫賬號。

    password

    賬號密碼。

    saveMode

    如果已存在目標路徑(加密后的文件存儲路徑),引擎在生成密文數據集時將采取的模式。支持以下模式:

    • Append:追加寫。

    • ErrorIfExists:目標存在,則上報異常后退出。您可以在日志中查看具體報錯信息。

    • Ignore:目標存在,則放棄寫。您在日志中無法查看具體報錯信息。

    • Overwrite:覆蓋寫。

    format

    密文格式。當前僅支持EncBlocksSource格式。

  1. 運行客戶端工具加密指定數據庫adbcustomer表的數據。加密后的數據集會存儲在配置文件中指定的dataDir路徑下。

    ./cryptoTool encrypt encryption_config.json
  2. 將加密后的數據集所在的文件夾customer上傳到OSS空間。本文示例路徑為oss://testBucketName/adb/Spark/customer。具體操作,請參見簡單上傳

執行密文數據的SQL計算

  1. 登錄云原生數據倉庫AnalyticDB MySQL控制臺,在左上角選擇集群所在地域。在左側導航欄,單擊集群列表,在企業版、基礎版或湖倉版頁簽下,單擊目標集群ID。

  2. 在左側導航欄,單擊作業開發>SQL開發

  3. SQLConsole窗口,選擇Spark引擎和Job型資源組。

  4. 執行以下語句,進行密文數據的SQL計算。

    1. 開啟密態計算,設置用戶的主密鑰。

      --開啟密態計算。
      set spark.adb.tee.enabled=true;
      
      --設置用戶的主密鑰,需要與加密配置文件中的用戶主密鑰MEK一致。
      set spark.adb.tee.encryption.key=00112233445566778899aabbccdd****;
      
      --創建數據庫,存儲密文數據和密文計算結果。
      CREATE DATABASE IF NOT EXISTS test_db;
    2. 使用全密態引擎創建外表customerLOCATION為密文數據集文件夾所在的OSS路徑。本文示例為oss://testBucketName/adb/Spark/customer

      set spark.adb.tee.enabled=true;
      set spark.adb.tee.encryption.key=00112233445566778899aabbccdd****;
      CREATE TABLE IF NOT EXISTS test_db.customer 
      USING EncBlocksSource 
      LOCATION  'oss://testBucketName/adb/Spark/customer';
    3. 創建外表customer_output,將customer表的SQL計算結果寫入customer_output外表。customer_output外表的數據指定存儲在oss://testBucketName/adb/Spark/customer_output

      set spark.adb.tee.enabled=true;
      set spark.adb.tee.encryption.key=00112233445566778899aabbccdd****;
      CREATE TABLE IF NOT EXISTS test_db.customer_output
      USING EncBlocksSource
      LOCATION 'oss://testBucketName/adb/Spark/customer_output'
      AS
      SELECT *
      FROM test_db.customer
      WHERE id = 1;

下載密文結果并解密

  1. 從OSS路徑oss://testBucketName/adb/Spark/customer_output下載密文計算結果到本地。具體操作,請參見下載文件

  2. 準備解密配置文件。本文示例新建配置文件decryption_config.json,示例如下。

    {
      "dataDir": "file:///tmp",
      "table": [
        "customer_output"
      ],
      "encAlgo": "AES_128_GCM",
      "outTblPrefix": "abc_",
      "mek": "00112233445566778899aabbccdd****",
      "jdbcUrl": "jdbc:mysql://rm-bp1487t8613zz****.mysql.rds.aliyuncs.com:3306/adb",
      "username": "demo_user",
      "password": "demo_password",
      "saveMode": "Overwrite",
      "format":"EncBlocksSource"
    }

    參數說明如下:

    參數

    描述

    dataDir

    存儲密文數據集的本地路徑。

    table

    密文數據集的文件夾名。

    encAlgo

    密文的加解密算法。當前僅支持AES_128_GCM。

    outTblPrefix

    解密后數據庫中表名的前綴(Prefix)。數據庫中目標表名將由前綴和密文數據集文件夾名組成。

    mek

    用戶主密鑰(MEK)用于加密數據密鑰(DEK)。詳情請參見密鑰介紹

    用戶主密鑰的格式為16字節的十六進制字符串。您可以通過OpenSSL工具生成密鑰。本文示例為00112233445566778899aabbccdd****

    警告
    • 用戶主密鑰是訪問加密數據的根憑據,一旦丟失密鑰,將無法再訪問已有的數據。請妥善保管用戶主密鑰。

    • 全密態計算引擎不提供用戶主密鑰的生成和備份服務,您需要按照密鑰格式輸入用戶主密鑰。

    jdbcUrl

    數據庫的連接地址和數據庫名稱。僅支持MySQLPostgreSQL數據庫。連接地址格式為:

    • MySQL數據庫:jdbc:mysql://ip:port/database_name

    • PostgreSQL數據庫:jdbc:postgresql://ip:port/database_name

    本文示例為jdbc:mysql://rm-bp1487t8613zz****.mysql.rds.aliyuncs.com:3306/adb

    userName

    數據庫賬號。

    password

    賬號密碼。

    saveMode

    如果已存在目標數據庫(解密后的數據存儲的數據庫),引擎在生成明文數據集時將采取的模式。支持以下模式:

    • Append:追加寫。

    • ErrorIfExists:目標存在,則上報異常后退出。您可以在日志中查看具體報錯信息。

    • Ignore:目標存在,則放棄寫。您在日志中無法查看具體報錯信息。

    • Overwrite:覆蓋寫。

    format

    密文格式。當前僅支持EncBlocksSource格式。

  3. 運行客戶端解密,解密后的數據會被自動插入到RDS MySQL的adb數據庫中。寫入的數據表,表名由加密數據集所在的文件夾名稱和outTblePrefix參數決定。本文示例為adb_customer_output

    ./cryptoTool decrypt decryption_config.json
  4. 在RDS MySQL數據庫中查看解密后的數據。可看到數據明文的計算結果。

    SELECT * FROM adb_customer_output;

    返回結果:

    +--------+----------+----------+----------+
    |  id    |   name   |  address |   age    |
    +--------+----------+----------+----------+
    |   1    |  james   |  beijing |   10     |
    +--------+----------+----------+----------+