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"]}}]');NotaSi la regla especificada por
nameya existe, se actualiza. De lo contrario, se agrega una nueva regla paraname. En este caso, la operaciónupdatees idéntica a la operaciónadd. -
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"]');NotaEl valor del parámetro
paramsdebe tener formato JSON. Por lo tanto, al eliminar una sola regla, debe especificar el nombre en formato"xxx"en lugar dexxx. Por ejemplo, especifique'"delrule"'en lugar de'delrule'. -
GRANT: otorga o revoca permisos.
NotaDebe 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"]}');NotaLos 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
fullAccessa 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 **
expireddebe encontrarse dentro del rango admitido por MySQL, que va de **1970-01-02 00:00:01a2038-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"}');