全部產品
Search
文件中心

ApsaraDB RDS:通過SQL配置列加密規則

更新時間:Sep 12, 2024

在使用全密態功能之前,您需要配置資料保護規則。RDS MySQL支援通過設定檔的方式管理資料保護規則,本文介紹通過SQL方式配置資料保護規則的方法及相關API的使用說明。

全密態資料庫會將您配置的資料保護規則內容持久化到資料庫內的系統資料表上(簡稱全密態中繼資料表,即mysql.encdb_sensitive_rules和mysql.encdb_auth_users),僅有高許可權或者被授權使用者可以進行寫操作。

前提條件

  • RDS MySQL執行個體的大版本為MySQL 5.7且核心小版本大於等於20231031;大版本為MySQL 8.0且核心小版本大於等於20240430。

    說明

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

  • 已開通全密態功能

  • 配置資料保護規則的帳號必須是高許可權帳號。

注意事項

  • 資料保護規則一旦配置生效,在目標資料庫執行個體範圍內全域有效,不需要重複配置。

  • 建議使用不同的資料庫帳號,分別用於管理規則和線上應用,如無必要不應使線上應用具備系統管理權限。

  • 請謹慎授予對全密態中繼資料表的讀寫權限,否則使用者可能通過修改全密態中繼資料表內容而繞過全密態安全防護。

SQL API說明

  • add:新增規則

    SELECT encdb_rule_op('add',<rule object json string> or <rules list json string>);

    樣本一:新增名為newrule的規則

    SELECT encdb_rule_op('add','{"name":"newrule","enabled":true,"meta":{"databases":["test"],"tables":["test"],"columns":["a","b"]}}');

    樣本二:新增名為newrule1和newrule2的規則

    SELECT encdb_rule_op('add','[{"name":"newrule1","enabled":true,"meta":{"databases":["test"],"tables":["test"],"columns":["a","b"]}},{"name":"newrule2","enabled":true,"meta":{"databases":["test2"],"tables":["test2"],"columns":["a","b"]}}]');
  • update:更新規則

    SELECT encdb_rule_op('update',<rule object json string> or <rules list json string>);

    樣本一:更新名為newrule的規則

    SELECT encdb_rule_op('update','{"name":"newrule","enabled":true,"meta":{"databases":["test"],"tables":["test"],"columns":["a","b"]}}');

    樣本二:更新名為newrule1和newrule2的規則

    SELECT encdb_rule_op('update','[{"name":"newrule1","enabled":true,"meta":{"databases":["test"],"tables":["test"],"columns":["a","b"]}},{"name":"newrule2","enabled":true,"meta":{"databases":["test2"],"tables":["test2"],"columns":["a","b"]}}]');
    說明

    name指定的規則已存在,則對其更新;否則新增name的規則,此時update操作與add操作行為一致。

  • delete:刪除規則

    SELECT encdb_rule_op('delete',<rule name json string> or <rule name list json string>);

    樣本一:刪除名為delrule的規則

    SELECT encdb_rule_op('delete','"delrule"');

    樣本二:刪除名為delrule1和delrule1的規則

    SELECT encdb_rule_op('delete','["delrule1","delrule2"]');
    說明

    params內容總是為JSON格式,因此在刪除一條規則時,規則名需要寫成"xxx"而不直接是xxx,例如'"delrule"'而不是'delrule'

  • grant:使用者授權或撤銷授權

    說明

    使用者授權是必選操作。

    授權或撤銷授權

    SELECT encdb_rule_op('grant',<users object json string>);

    樣本一:授予appuser以及test_user使用者受限存取權限

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

    樣本二:撤銷illegal使用者的許可權

    SELECT encdb_rule_op('grant','{"noneAccess": ["illegal"]}'); 

    樣本三:授予appuser以及test_user使用者受限存取權限,撤銷illegal使用者的許可權

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

    授權或撤銷的使用者必須是在資料庫中已經存在的使用者。

    授予使用者臨時完整存取

    出於易用性考慮,為方便使用者進行臨時明文資料營運,全密態資料庫為使用者提供了授權使用者fullAccess許可權訪問的選擇,被授予該許可權的使用者將以明文方式訪問資料庫:

    • 此時資料保護規則對使用者不生效,被授權使用者可以在資料庫中直接查詢到明文

    • 出於安全性考慮,授權時間視窗應儘可能短,且非必要不建議使用者授予該許可權。使用者需要明確自身需求,選擇使用該授權操作時需要自行承擔相關風險。

    • expired參數取值需要在MySQL允許範圍內,即1970-01-02 00:00:012038-01-18 03:14:07之間。

    樣本:授予dba使用者臨時完整存取

    SELECT encdb_rule_op('grant','{"fullAccess": ["dba"], "expired": "2023-08-21 14:21:30"}');