在使用全密態功能之前,您需要配置數據保護規則。RDS MySQL支持通過配置文件的方式管理數據保護規則,本文介紹通過SQL方式配置數據保護規則的方法及相關API的使用說明。
全密態數據庫會將您配置的數據保護規則內容持久化到數據庫內的系統表上(簡稱全密態元數據表,即mysql.encdb_sensitive_rules和mysql.encdb_auth_users),僅有高權限或者被授權用戶可以進行寫操作。
前提條件
注意事項
數據保護規則一旦配置生效,在目標數據庫實例范圍內全局有效,不需要重復配置。
建議使用不同的數據庫賬號,分別用于管理規則和在線應用,如無必要不應使在線應用具備管理權限。
請謹慎授予對全密態元數據表的讀寫權限,否則用戶可能通過修改全密態元數據表內容而繞過全密態安全防護。
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:01
至2038-01-18 03:14:07
之間。
示例:授予dba用戶臨時完全訪問權限
SELECT encdb_rule_op('grant','{"fullAccess": ["dba"], "expired": "2023-08-21 14:21:30"}');