文档

配置数据保护规则

更新时间:

在使用全密态功能之前,您需要配置数据保护规则。RDS MySQL支持通过配置文件的方式管理数据保护规则,本文介绍配置数据保护规则的方法及相关API的使用说明。

全密态数据库会将您配置的数据保护规则内容持久化到数据库内的系统表上(简称全密态元数据表,即mysql.encdb_sensitive_rules和mysql.encdb_auth_users),仅有高权限或者被授权用户可以进行写操作。

前提条件

  • RDS MySQL实例的大版本为MySQL 5.7,且内核小版本必须大于或等于20231031。

    说明

    升级内核小版,请参见升级内核小版本

  • 已开通全密态功能

  • 配置数据保护规则的账号必须是高权限账号。

注意事项

  • 数据保护规则一旦配置生效,在目标数据库实例范围内全局有效,不需要重复配置。

  • 建议使用不同的数据库账号,分别用于管理规则和在线应用,如无必要不应使在线应用具备管理权限。

  • 请谨慎授予对全密态元数据表的读写权限,否则用户可能通过修改全密态元数据表内容而绕过全密态安全防护。

配置文件方式

全密态数据库支持通过配置文件的方式管理数据保护规则,具体配置规则请参见数据保护规则简介

您可以通过两种方式配置数据保护规则:

  • 在RDS实例中通过SQL UDF函数配置:

    为了方便管理员进行规则配置,全密态数据库提供了一组SQL UDF函数用于管理数据保护规则。SQL UDF函数要求用户对全密态元数据表具备读写权限。高权限或者被授权用户可以使用如下SQL UDF对数据保护规则进行管理:

    SELECT encdb_rule_op(command text, params text);
    • command:即操作类型,目前支持addupdatedeletegrant操作。

    • params:即操作的规则内容,内容格式请参见数据保护规则简介

  • 在应用程序中配置:

    将配置规则保存为配置文件encRule.json,在项目中设置一个名为encRuleJsonFile的属性项,将值设置为encRule.json文件路径即可。您可以通过以下方式放置配置文件:

    • 方式一:在Properties属性中动态配置encRuleJsonFile参数(缺省时默认配置文件名为encRule.json),代码如下所示:

      // ...
      String ruleFilaPath = ...;
      Properties props = new Properties();
      // ...
      props.setProperty("encRuleJsonFile", ruleFilaPath);
      // ...
      java.sql.Connection connection = java.sql.DriverManager.getConnection(dbUrl, props);
      // ...
    • 方式二:将配置文件放入项目中的resources目录下,无需在业务代码中做额外配置,此时配置文件名使用缺省文件名encRule.json,如下图所示:

      image.png

    • 方式三:将文件放入项目根目录,即程序的运行时目录,无需在业务代码中做额外配置,此时配置文件名使用缺省文件名encRule.json

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"]}}]');
    说明

    params内容格式请参见数据保护规则简介

  • 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"]}}]');
    说明
    • params内容格式请参见数据保护规则简介

    • 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内容格式请参见数据保护规则简介

    • 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"]}'); 
    说明
    • params内容格式请参见数据保护规则简介

    • 授权或撤销的用户必须是在数据库中已经存在的用户。

    授予用户临时完全访问权限

    出于易用性考虑,为方便用户进行临时明文数据运维,全密态数据库为用户提供了授权用户fullAccess权限访问的选择,被授予该权限的用户将以明文方式访问数据库:

    • 此时数据保护规则对用户不生效,被授权用户可以在数据库中直接查询到明文

    • 出于安全性考虑,授权时间窗口应尽可能短,且非必要不建议用户授予该权限。用户需要明确自身需求,选择使用该授权操作时需要自行承担相关风险。

    示例:授予dba用户临时完全访问权限

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

相关文档

数据保护规则简介