通过SQL配置列加密规则

在使用全密态功能之前,您需要配置数据保护规则。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"}');