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

最佳實踐

重要

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

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

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

相關文檔