本文由簡體中文內容自動轉碼而成。阿里雲不保證此自動轉碼的準確性、完整性及時效性。本文内容請以簡體中文版本為準。

最佳實務

更新時間:2024-06-18 23:04
重要

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

RDS MySQL全密態資料庫能夠對資料庫查詢結果中的資料進行加密和脫敏保護,任何非授權人員均無法查看被保護資料明文內容。本文介紹如何通過全密態用戶端驅動EncJDBC快速使用並驗證RDS MySQL全密態資料庫功能。

前提條件

RDS MySQL執行個體的大版本為MySQL 5.7,且核心小版本必須大於或等於20231215。

說明

升級核心小版,請參見升級核心小版本

注意事項

  • 請妥善儲存您設定的主要金鑰MEK

  • Java版本需要在1.8及以上。

    說明

    本文中使用的Maven版本為3.9.5,使用的開發工具為IntelliJ IDEA Community Edition 2023.2.4

操作步驟

步驟一: 建立執行個體、資料庫及帳號

  1. 購買符合本文前提條件的RDS MySQL執行個體,建立方法請參見建立RDS MySQL執行個體RDS MySQL標準版(原X86)主執行個體規格列表RDS MySQL經濟版(原ARM)主執行個體規格列表

    說明

    如果您已購執行個體已滿足本文前提條件中的要求,則無需新購執行個體。

  2. 建立資料庫高許可權帳號,建立方法請參見建立帳號

  3. 建立資料庫,詳情請參見管理資料庫

步驟二: 開啟全密態功能

  1. 訪問RDS執行個體列表,在上方選擇地區,單擊剛剛建立的執行個體ID。

  2. 開通全密態功能。

    警告

    開通全密態功能會導致執行個體重啟,請在業務低峰期操作。

    在左側導覽列,單擊參數設定,在可修改參數頁簽,搜尋loose_encdb,將該參數值設定為ON,選擇生效時間後,單擊確定

步驟三: 配置資料保護規則

說明

開通全密態功能以及配置資料保護規則的帳號必須是高許可權帳號。應用程式資料庫角色建議設為普通許可權,不具備管理員權限,且不建議賦予應用程式資料庫角色高許可權。

  1. 確定被保護欄位

    使用者基於業務實際需要,確定哪些資料屬於被保護資料。本文樣本中,將通訊錄中的部門名稱(department.name)、員工姓名(users.name)和ID(users.id)確定為被保護資料。資料庫表結構如下:

    說明

    建表之前需要先執行CREATE DATABASE contact;建立contact資料庫。

    -- 部門表
    CREATE TABLE department (id INTEGER PRIMARY KEY AUTO_INCREMENT, dept_id BIGINT, name TEXT, parentId BIGINT, createDeptGroup BOOL, autoAddUser BOOL, UNIQUE(dept_id));
    -- 使用者表
    CREATE TABLE users (id varchar(255) PRIMARY KEY, dept_id BIGINT, name TEXT, avatar TEXT);
    
    -- 寫入測試資料
    INSERT INTO department(dept_id, name, parentId, createDeptGroup, autoAddUser) VALUES
     (202301,'dept1',202301,true,true), (202302,'dept2',202301,true,true), (202303,'dept3',202301,true,false);
    INSERT INTO users VALUES
     ('110110181103233433', 202301, 'user1', 'director'),
     ('350110180103038669', 202302, 'user2', 'dept2_user'), ('220110182203032387', 202302, 'user3', 'dept2_user'),
     ('410110182209237752', 202303, 'user4', 'dept3_user'), ('310140181210228325', 202303, 'user5', 'dept3_user');
  2. 配置規則

    基於選定的被保護資料,按照資料保護規則格式,編輯規則內容,並通過SQL UDF下發規則。更多規則格式介紹請參見資料保護規則簡介

    SELECT encdb_rule_op('add', '[{
                                   "name": "rule-for-contact-name",
                                   "enabled": true,
                                   "meta": {
                                     "databases": ["contact"],
                                     "tables": ["department","users"],
                                     "columns": ["name"]
                                   }
                                  }, {
                                   "name": "rule-for-contact-id",
                                   "enabled": true,
                                   "meta": {
                                     "databases": ["contact"],
                                     "tables": ["users"],
                                     "columns": ["id"]
                                   }
                                  }]');

    其中,rule-for-contact-name同時標記了部門名稱(department.name)以及員工姓名(users.name),rule-for-contact-id標記了員工ID(users.id)。

  3. 授權使用者訪問

    若希望資料庫使用者在應用用戶端側能夠訪問解密後的明文結果,需要為其授予受限存取權限(restrictedAccess)。更多授權資訊,請參見配置資料保護規則

    執行如下命令,授權應用程式資料庫角色受限存取權限:

    SELECT encdb_rule_op('grant','{"restrictedAccess": ["appuser"]}'); 
    說明

    appuser為應用程式資料庫角色。

步驟四: 用戶端接入改造

全密態資料庫提供了配套的資料庫連接驅動,無需修改業務代碼,應用用戶端側僅需進行如下兩步配置,就能夠無感訪問全密態資料庫。本步驟以EncJDBC接入為例進行說明:

  1. 將資料庫連接驅動替換成EncJDBC

  2. 更新資料庫連接URL,指定使用者密鑰MEK以及密碼編譯演算法ENC_ALGO

以Java語言為例,僅需如下兩處配置修改即可:

// 準備好網域名稱(hostname)、連接埠(port)、資料庫執行個體名(dbname)、使用者名稱(username)、密碼(password)等串連資訊
// ...
String mek="00112233445566778899aabbccddeeff";
String encAlgo="SM4_128_CTR";

// 1. 將資料庫連接驅動替換成EncJDBC
Class.forName("com.aliyun.encdb.mysql.jdbc.EncDriver");
// 2. 更新資料庫連接URL,指定使用者密鑰MEK以及密碼編譯演算法ENC_ALGO
String dbUrl = String.format("jdbc:mysql:encdb://%s:%s/%s?MEK=%s&ENC_ALGO=%s", hostname, port, dbname, mek, encAlgo);

java.sql.Connection connection = java.sql.DriverManager.getConnection(dbUrl, username, password);
// ... 發起查詢 ...

更多用戶端EncJDBC接入配置請參見EncJDBC

步驟五: 功能驗證

可以在命令列工具或者DMS控制台上,執行SQL命令驗證資料是否被加密保護:

  • 執行如下命令查詢通訊錄指定的部門資訊:

    SELECT * FROM contact.department WHERE dept_id = 202302;

    查詢結果如下:

    image.png

  • 執行如下命令查詢通訊錄指定部門的員工資訊:

    SELECT * FROM contact.users WHERE dept_id = 202302;

    查詢結果如下:

    image.png

  • 執行如下命令模糊查詢通訊錄員工資訊:

    SELECT * FROM contact.users WHERE name LIKE '%1';

    查詢結果如下:

    image.png

從全密態資料庫中查詢的結果顯示,所有被保護資料均被加密保護。

相關文檔

  • 本頁導讀 (1, M)
  • 前提條件
  • 注意事項
  • 操作步驟
  • 步驟一: 建立執行個體、資料庫及帳號
  • 步驟二: 開啟全密態功能
  • 步驟三: 配置資料保護規則
  • 步驟四: 用戶端接入改造
  • 步驟五: 功能驗證
  • 相關文檔
文檔反饋
phone 聯絡我們

立即和Alibaba Cloud在線服務人員進行交談,獲取您想了解的產品信息以及最新折扣。

alicare alicarealicarealicare