Todos los productos
Search
Centro de documentos

:Configure column encryption rules with SQL

Última actualización: Sep 03, 2026

Antes de utilizar la función de base de datos siempre confidencial en una instancia de ApsaraDB RDS for MySQL, debe configurar una regla de protección de datos. ApsaraDB RDS for MySQL permite usar un archivo de configuración para gestionar estas reglas. Este tema describe cómo configurar una regla de protección de datos mediante sentencias SQL y cómo utilizar las operaciones de API relacionadas.

La función de base de datos siempre confidencial almacena la regla de protección de datos configurada en las tablas del sistema de su instancia de RDS. Únicamente la cuenta con privilegios o los usuarios autorizados pueden escribir datos en dichas tablas, que corresponden a mysql.encdb_sensitive_rules y mysql.encdb_auth_users.

Requisitos previos

  • La instancia de RDS for MySQL ejecuta MySQL 5.7 con una versión menor del motor 20231031 o posterior, o bien MySQL 8.0 con una versión menor del motor 20240430 o posterior. Para obtener más información, consulte Update the minor engine version.

  • La función de base de datos siempre confidencial está habilitada. Para obtener más información, consulte Use the always-confidential database feature.

  • Se utiliza una cuenta con privilegios para configurar las reglas de protección de datos.

Notas de uso

  • Una vez configurada y habilitada una regla de protección de datos, esta se aplica a todas las bases de datos de la instancia de RDS, por lo que no es necesario configurarla repetidamente.

  • Se recomienda utilizar cuentas de base de datos separadas para gestionar las reglas de protección de datos y las aplicaciones en línea. No otorgue permisos de gestión a las aplicaciones en línea a menos que sea estrictamente necesario.

  • Tenga precaución al otorgar permisos de lectura y escritura sobre las tablas mysql.encdb_sensitive_rules y mysql.encdb_auth_users. La modificación de estas tablas podría permitir que atacantes eviten la protección de confidencialidad.

Operaciones en UDF de SQL

  • ADD: agrega una regla.

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

    Ejemplo 1: Agregar una regla llamada newrule.

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

    Ejemplo 2: Agregar las reglas newrule1 y 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: actualiza una regla.

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

    Ejemplo 1: Actualizar la regla llamada newrule.

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

    Ejemplo 2: Actualizar las reglas newrule1 y 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"]}}]');
    Nota

    Si la regla especificada por name ya existe, se actualiza. De lo contrario, se agrega una nueva regla para name. En este caso, la operación update es idéntica a la operación add.

  • DELETE: elimina una regla.

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

    Ejemplo 1: Eliminar la regla llamada delrule.

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

    Ejemplo 2: Eliminar las reglas delrule1 y delrule2.

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

    El valor del parámetro params debe tener formato JSON. Por lo tanto, al eliminar una sola regla, debe especificar el nombre en formato "xxx" en lugar de xxx. Por ejemplo, especifique '"delrule"' en lugar de 'delrule'.

  • GRANT: otorga o revoca permisos.

    Nota

    Debe otorgar a los usuarios los permisos necesarios.

    Otorgar o revocar permisos

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

    Ejemplo 1: Otorgar a los usuarios appuser y test_user permisos para acceder a recursos restringidos.

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

    Ejemplo 2: Revocar los permisos del usuario illegal.

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

    Ejemplo 3: Otorgar a los usuarios appuser y test_user permisos para acceder a recursos restringidos y revocar los permisos del usuario illegal.

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

    Los usuarios mencionados en esta sección deben existir en la instancia de RDS.

    Otorgar permisos de acceso total a usuarios para uso temporal

    Para facilitar el uso y el mantenimiento temporal de datos en texto plano, la función de base de datos siempre confidencial permite otorgar el permiso fullAccess a los usuarios. Un usuario con este permiso puede acceder a la base de datos en texto plano:

    • En este caso, la regla de protección de datos configurada no se aplica a dichos usuarios, quienes pueden consultar directamente los datos de la base de datos en texto plano dentro de la instancia de RDS.

    • Por motivos de seguridad, se recomienda otorgar estos permisos solo durante un periodo breve y únicamente cuando sea necesario. Antes de otorgar el permiso fullAccess, debe comprender sus requisitos empresariales y asumir la responsabilidad de los riesgos asociados.

    • El valor del parámetro **expired debe encontrarse dentro del rango admitido por MySQL, que va de **1970-01-02 00:00:01 a 2038-01-18 03:14:07.

    Ejemplo: Otorgar al usuario dba permisos de acceso total para uso temporal

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