Usa la auditoría de la base de datos de MySQL

En este tema, se describe cómo habilitar y usar el complemento de auditoría de Cloud SQL para MySQL. Para obtener una descripción general, consulta Auditoría de bases de datos de MySQL. Para obtener más información sobre los complementos de MySQL, consulta Carga el complemento de MySQL.

Antes de comenzar

Registros de auditoría de acceso a los datos

Habilita y configura los registros de auditoría de acceso a los datos. Consulta Configura registros de auditoría de acceso a los datos.

Privilegios necesarios para los usuarios de auditoría

Debes tener privilegios EXECUTE en los procedimientos almacenados de auditoría para ejecutarlos. Si un administrador necesita cambiar los privilegios de acceso de un auditor a los procedimientos almacenados de auditoría, debe usar el comando GRANT o REVOKE en el cliente mysql. Para obtener detalles sobre los privilegios de usuario, consulta Privilegios de usuario de MySQL. Por ejemplo, si un administrador quisiera otorgar acceso a un auditor llamado user para administrar las reglas de auditoría, podría otorgar los privilegios mediante la siguiente sentencia:

CREATE USER 'user'@'%' IDENTIFIED BY 'password';
GRANT EXECUTE ON PROCEDURE mysql.cloudsql_list_audit_rule TO 'user'@'%';

Si ese administrador luego quiere revocar el acceso del auditor, podría revocar los privilegios mediante la siguiente sentencia:

REVOKE ALL ON PROCEDURE mysql.cloudql_list_audit_rule FROM 'user'@'%';

De forma predeterminada, los usuarios creados con Cloud SQL (excepto los usuarios de IAM) son administradores que tienen todos los privilegios, excepto FILE y SUPER, incluidos todos los privilegios de los procedimientos almacenados de auditoría. Los usuarios de la base de datos de IAM, de forma predeterminada, no tienen privilegios.

Habilita el complemento de auditoría de Cloud SQL para MySQL

El complemento de auditoría de Cloud SQL para MySQL (cloudsql_mysql_audit) controla el comportamiento de auditoría de una instancia de base de datos determinada. Para usar el complemento, primero debes habilitarlo en la instancia de Cloud SQL.

Para habilitar el complemento cloudsql_mysql_audit, usa una de las siguientes opciones:

  • --cloudsql_mysql_audit=ON

    Indica al servidor que habilite el complemento. Si el complemento no se inicializa, el servidor se ejecuta con el complemento inhabilitado.

  • --cloudsql_mysql_audit=FORCE

    Indica al servidor que habilite el complemento, pero si la inicialización del complemento falla, el servidor no se inicia. En otras palabras, esta opción fuerza la ejecución del servidor con el complemento habilitado, de lo contrario, el servidor no se ejecuta.

  • --cloudsql_mysql_audit=FORCE_PLUS_PERMANENT

    Es similar a FORCE, pero también evita que el complemento se descargue en el entorno de ejecución. Si un usuario intenta descargar el complemento con UNINSTALL PLUGIN, se produce un error.

Los estados de activación del complemento son visibles en la columna PLUGIN_STATUS de la tabla INFORMATION_SCHEMA.PLUGINS.

Console

  1. En la consola de Google Cloud, ve a la página Instancias de Cloud SQL.

    Ir a Instancias de Cloud SQL

  2. Abre la instancia y haz clic en Editar.
  3. Desplázate hacia abajo hasta la sección Marcas.
  4. Para configurar una marca que no se configuró antes en la instancia, haz clic en Agregar marca, eligecloudsql_mysql_audit en el menú desplegable y configura su valor comoON.
  5. Haz clic en Guardar para guardar los cambios.
  6. Confirma tus cambios en Marcas en la página Descripción general.

gcloud

Reemplaza lo siguiente:

  • INSTANCE_NAME: El nombre de la instancia en la que configuras la marca.
gcloud sql instances patch INSTANCE_NAME \
           --database-flags cloudsql_mysql_audit=ON

Este comando reemplaza todas las marcas de bases de datos establecidas con anterioridad. Para conservarlas y agregar nuevas, incluye los valores de todas las marcas que desees configurar en la instancia. Cualquier marca que no esté incluida de forma explícita se establecerá con su valor predeterminado. Para marcas que no tomen un valor, especifica el nombre de la marca seguido por un signo igual (=).

REST v1beta4

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • project-id: el ID del proyecto
  • instance-id: El ID de la instancia

Método HTTP y URL:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id

Cuerpo JSON de la solicitud:

{
  "settings":
  {
    "databaseFlags":
    [
      {
        "name": "cloudsql_mysql_audit",
        "value": "ON"
      }
    ]
  }
}

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

REST v1

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • project-id: el ID del proyecto
  • instance-id: El ID de la instancia

Método HTTP y URL:

PATCH https://sqladmin.googleapis.com/sql/v1/projects/project-id/instances/instance-id

Cuerpo JSON de la solicitud:

{
  "settings":
  {
    "databaseFlags":
    [
      {
        "name": "cloudsql_mysql_audit",
        "value": "ON"
      }
    ]
  }
}

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

Configuración del complemento de auditoría de Cloud SQL para MySQL

Puedes ajustar el comportamiento del complemento de auditoría de Cloud SQL para MySQL mediante las siguientes marcas. Todas las marcas se pueden modificar sin reiniciar la base de datos. Para aprender a administrar las marcas, consulta Configura marcas de bases de datos.

  • cloudsql_mysql_audit_data_masking_regex

    Una expresión regular usada para el enmascaramiento de datos que cumpla con las expresiones regulares compatibles con Perl (PCRE).

    De forma predeterminada, en el registro de auditoría de salida, las contraseñas de usuario (<psw>) se sustituyen por una máscara de contraseña de ***.

    La regex se aplica solo a las sentencias con un tipo de comando especificado mediante cloudsql_mysql_audit_data_masking_cmds. Cuando uses gcloud, debes usar un archivo de marca para configurar valores con caracteres especiales complejos.

    Valores predeterminados para esta marca:

    
    identified(?:/\*.*?\*/|\s)*?by(?:/\*.*?\*/|\s)*?(?:password)?(?:/\*.*?\*/|
    \s)*?['|"](?<psw>.*?)(?<!\\)['|"]|password(?:/\*.*?\*/|\s)*?\((?:/\*.*?\*/|
    \s)*?['|"](?<psw>.*?)(?<!\\)['|"](?:/\*.*?\*/|\s)*?\)|password(?:/\*.*?\*/|
    \s)*?(?:for(?:/\*.*?\*/|\s)*?\S+?)?(?:/\*.*?\*/|\s)*?=(?:/\*.*?\*/|\s)*?[
    '|"](?<psw>.*?)(?<!\\)['|"]|password(?:/\*.*?\*/|\s)*?['|"](?<psw>.*?)
    (?<!\\)['|"]
    
    

    Consulta los siguientes ejemplos.

    • Sin cloudsql_mysql_audit_data_masking_regex, una entrada del registro de auditoría que describe un comando de creación de usuario aparecerá de la siguiente manera:

      {..."cmd":"create_user","query":"create user user1@'localhost' identified
      by 'pw'"}
      
    • Con el valor predeterminado de cloudsql_mysql_audit_data_masking_regex, el mismo registro de auditoría se cambia de la siguiente manera:

      {..."cmd":"create_user","query":"create user user1@'localhost' identified by
      '***'"}
      
    • Si configuras cloudsql_mysql_audit_data_masking_regex como (?<psw>.*), Cloud SQL puede filtrar todo el contenido de la consulta.

      {..."cmd":"create_user","query":"***"}
      
  • cloudsql_mysql_audit_data_masking_cmds

    Lista de comandos separados por comas a los que se aplica la regex de enmascaramiento de datos (cloudsql_mysql_audit_data_masking_regex). Configura una string vacía ("") para detener el filtrado. Cuando uses gcloud, debes usar un archivo de marca para configurar una lista separada por comas. El valor predeterminado incluye comandos de MySQL con la siguiente cláusula de contraseña:

    create_user,alter_user,grant,update
    
  • cloudsql_mysql_audit_max_query_length

    Controla la longitud máxima de la consulta que se registrará en el registro de auditoría. Si no necesitas ver los detalles de la consulta, puedes usar 0, lo que significa que la consulta no se registra en el registro de auditoría. Esto ahorra espacio de almacenamiento para el registro, lo que da como resultado un costo menor. -1 significa que no hay limitaciones. El valor predeterminado es -1.

  • cloudsql_mysql_audit_log_write_period

    El período de escritura de registros, en el que el subproceso de escritor escribe el contenido del búfer en el disco después de alcanzar la cantidad de milisegundos que se configuró para esta opción de marca o cuando el búfer está lleno. Si configuras esta opción de marca como 0, el subproceso de usuario se verá forzado a esperar a una notificación del subproceso de escritor que indique que se completó la operación de escritura. El valor predeterminado es 500 (milisegundos).

Console

  1. En la consola de Google Cloud, ve a la página Instancias de Cloud SQL.

    Ir a Instancias de Cloud SQL

  2. Abre la instancia y haz clic en Editar.
  3. Desplázate hacia abajo hasta la sección Marcas.
  4. Para configurar una marca que no se ha configurado antes en la instancia, haz clic en Agregar marca, elige una marca de base de datos de la lista anterior en el menú desplegable y configura su valor.
  5. Haz clic en Guardar para guardar los cambios.
  6. Confirma tus cambios en Marcas en la página Descripción general.

gcloud

Reemplaza lo siguiente:

  • INSTANCE_NAME: El nombre de la instancia en la que configuras la marca.
  • FLAG_NAME: El nombre de la marca de configuración.
  • FLAG_VALUE: El valor que se usará para la marca.

        gcloud sql instances patch INSTANCE_NAME /
                   --database-flags FLAG_NAME=FLAG_VALUE
    

REST v1beta4

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • project-id: el ID del proyecto
  • instance-id: El ID de la instancia

Método HTTP y URL:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id

Cuerpo JSON de la solicitud:

{
  "settings":
  {
    "databaseFlags":
    [
      {
        "name": "flag_name",
        "value": "flag_value"
      }
    ]
  }
}

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

REST v1

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • project-id: el ID del proyecto
  • instance-id: El ID de la instancia

Método HTTP y URL:

PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id

Cuerpo JSON de la solicitud:

{
  "settings":
  {
    "databaseFlags":
    [
      {
        "name": "flag_name",
        "value": "flag_value"
      }
    ]
  }
}

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

Configura la auditoría de base de datos

Administra reglas de auditoría

Cloud SQL usa un conjunto de procedimientos almacenados para administrar las reglas de auditoría del complemento de auditoría de Cloud SQL para MySQL. Existen cuatro procedimientos almacenados que puedes usar para crear, enumerar, actualizar y borrar reglas de auditoría.

Cada procedimiento almacenado muestra dos variables: @outval y @outmsg. Estas variables indican el código de estado y el mensaje de error del procedimiento almacenado, respectivamente. Puedes usar un asterisco (*) como comodín para buscar nombres de usuarios, hosts, bases de datos y tablas. Usa el asterisco como sufijo, prefijo o ambos. Además, puedes usar el carácter comodín % solo para los hosts. Puedes usar el acento grave (`) para indicar que una string debe usarse de forma literal. Por ejemplo, `ta*ble` coincide de forma literal.

Para que los nuevos cambios se apliquen, debes ejecutar los procedimientos almacenados con el parámetro de entrada reload_mode=1 o llamar a mysql.cloudsql_reload_audit_rule(1) a fin de que se apliquen los cambios.

Crea reglas de auditoría

Puedes usar mysql.cloudsql_create_audit_rule para crear una regla de auditoría nueva.

Para crear la regla de auditoría y volver a cargarla en una llamada, usa la siguiente sentencia:

CALL mysql.cloudsql_create_audit_rule('user@host','db','obj','ops','op_result',1, @outval,@outmsg);
SELECT @outval, @outmsg;

Para crear la regla y volver a cargarla en una llamada separada, usa la siguiente sentencia:

CALL mysql.cloudsql_create_audit_rule('user@host','db','obj','ops','op_result',0, @outval,@outmsg);
SELECT @outval, @outmsg;
CALL mysql.cloudsql_reload_audit_rule(1);

El comando anterior te permite crear varias reglas y, luego, volver a cargar todos los cambios al mismo tiempo.

En las siguientes tablas, se muestran los parámetros de entrada y salida del comando anterior.

Parámetros de entrada
Name Tipo Descripción Ejemplo
user@host o user@ip string La lista separada por comas de los usuarios de la base de datos que se auditarán. Usa el formato user@host o user@ip.

user1@localhost,
user1@*,
user1@%,
user@ip
db string La lista separada por comas de las bases de datos que se auditarán. db1,db2,db3*
obj string La lista separada por comas de los objetos de la base de datos que se auditarán. table1,table2,table3*
ops string La lista separada por comas de las acciones de la base de datos que se auditarán. select,delete,insert
op_result string Éxito de auditoría (S), fallido (U) o ambos (B) operaciones exitosas y fallidas. S,U o B
reload_mode Entero 0 para no volver a cargar la regla y 1 para volverla a cargar. 0 o 1
Los parámetros de resultado
Name Tipo Descripción Ejemplo
@outval int El código de estado del procedimiento almacenado. 0 para el éxito y 1 para la falla.
@outmsg string El mensaje de error del procedimiento almacenado.

Las reglas de auditoría tienen las siguientes limitaciones:

Limitaciones
Longitud de user, db, obj y ops. El tamaño máximo es de 2,048 caracteres.
Cantidad de combinaciones de user, db, obj y ops. Un máximo de 1,000 combinaciones. Por ejemplo, una regla de auditoría que audita user1,user2, db1, db2, table1,table2 y select,delete genera 2 combinaciones de 2 x 2 x 2 = 16.

Muestra lista de reglas de auditoría

Los auditores pueden usar mysql.cloudsql_list_audit_rule para mostrar una lista de las reglas de auditoría existentes.

Para mostrar una lista de las reglas de auditoría 1 y 2, usa los siguientes comandos:

CALL mysql.cloudsql_list_audit_rule('1,2',@outval,@outmsg);
SELECT @outval, @outmsg;

Para mostrar una lista de todas las reglas de auditoría, haz lo siguiente:

CALL mysql.cloudsql_list_audit_rule('*',@outval,@outmsg);
SELECT @outval, @outmsg;

En las siguientes tablas, se muestran los parámetros de entrada y salida del comando anterior.

Parámetros de entrada
Name Tipo Descripción Ejemplo
rule_id string La lista separada por comas de los ID de reglas que se deben quitar. 1,2,3
Los parámetros de resultado
Name Tipo Descripción Ejemplo
@outval int El código de estado del procedimiento almacenado. 0 para el éxito y 1 para la falla.
@outmsg string El mensaje de error del procedimiento almacenado.

Actualiza reglas de auditoría

Puedes usar mysql.cloudsql_update_audit_rule para actualizar una regla de auditoría existente.

Para actualizar la regla de auditoría y volver a cargarla en una llamada, usa la siguiente sentencia:

CALL mysql.cloudsql_update_audit_rule(1,'user@host','db','obj','ops','op_result',1,@outval,@outmsg);
SELECT @outval, @outmsg;

Te recomendamos actualizar varias reglas de auditoría en una sesión antes de volver a cargarlas. Puedes usar el siguiente procedimiento almacenado para actualizar las reglas en un paso y, luego, volver a cargar esas reglas en un paso posterior.

CALL mysql.cloudsql_update_audit_rule(1,'user@host','db','obj','ops','op_result',0,@outval,@outmsg);
SELECT @outval, @outmsg;
CALL mysql.cloudsql_reload_audit_rule(1);

En las siguientes tablas, se muestran los parámetros de entrada y salida del comando anterior.

Parámetros de entrada
Name Tipo Descripción Ejemplo
rule_id int El ID de la regla que se actualizará. 5
user@host string La lista separada por comas de los usuarios de la base de datos que se auditarán. Usa el formato usuario@host.

user1@localhost,user1@*
user1@%
db string La lista separada por comas de las bases de datos que se auditarán. db1,db2,db3*
obj string La lista separada por comas de los objetos de la base de datos que se auditarán. table1,table2,table3*
ops string La lista separada por comas de las acciones de la base de datos que se auditarán. SELECT,DELETE,INSERT
op_result string Éxito de auditoría (S), fallido (U) o ambas (B) operaciones exitosas y fallidas. S,U o B
reload_mode Entero 0 para no volver a cargar la regla y 1 para volverla a cargar. 0 o 1
Los parámetros de resultado
Name Tipo Descripción Ejemplo
@outval int El código de estado del procedimiento almacenado. 0 para el éxito y 1 para la falla.
@outmsg string El mensaje de error del procedimiento almacenado.

Las reglas de auditoría tienen las siguientes limitaciones:

Limitaciones
Longitud de user, db, obj y ops. El tamaño máximo es de 2,048 caracteres.
Cantidad de combinaciones de user, db, obj y ops. Un máximo de 1,000 combinaciones. Por ejemplo, una regla de auditoría que audita user1,user2, db1, db2, table1,table2 y select,delete genera 2 combinaciones de 2 x 2 x 2 = 16.

Borra reglas de auditoría

Puedes usar mysql.cloudsql_delete_audit_rule para borrar una regla de auditoría existente.

Para borrar la regla de auditoría y volver a cargarla en una llamada, usa la siguiente sentencia:

CALL mysql.cloudsql_delete_audit_rule('1,2',1,@outval,@outmsg);
SELECT @outval, @outmsg;

Para borrar la regla y volver a cargarla en una llamada separada, usa la siguiente instrucción:

CALL mysql.cloudsql_delete_audit_rule('1,2',0,@outval,@outmsg);
SELECT @outval, @outmsg;
CALL cloudsql_reload_audit_rule(1);

El comando anterior te permite borrar varias reglas y, luego, volver a cargar todos los cambios al mismo tiempo.

En las siguientes tablas, se muestran los parámetros de entrada y salida del comando anterior.

Parámetros de entrada
Name Tipo Descripción Ejemplo
rule_id string La lista separada por comas de los ID de reglas que se deben quitar. 1,2,3
reload_mode Entero 0 para no volver a cargar la regla y 1 para volverla a cargar. 0 o 1
Los parámetros de resultado
Name Tipo Descripción Ejemplo
@outval int El código de estado del procedimiento almacenado. 0 para el éxito y 1 para la falla.
@outmsg string El mensaje de error del procedimiento almacenado.

Grupos de operaciones

El complemento de auditoría de Cloud SQL para MySQL admite el uso de grupos de operaciones en definiciones de reglas para auditar grupos de actividades. Puedes usar los siguientes grupos de operaciones para simplificar la creación de reglas de auditoría.

Grupos de operaciones Operaciones incluidas
dql select
dml delete,delete_multi, insert, insert_select, load, replace, replace_select, truncate, update, update_multi,
ddl alter_db, alter_event, alter_function, alter_procedure, alter_table, alter_user, create_db, create_event, create_function, create_index, create_procedure, create_table, create_trigger, create_user, create_udf, create_view, drop_db, drop_event, drop_function, drop_index, drop_procedure, drop_table, drop_trigger, drop_user, drop_view, rename_table, rename_user
dcl grant, revoke, revoke_all
show show_binlog_events, show_create_func, show_create_proc, show_procedure_code, show_create_event, show_create_trigger, show_events, show_function_code, show_grants, show_relaylog_events, show_triggers,
call call_procedure

Visualiza los registros de auditoría de la base de datos de Cloud SQL

Visualiza los registros de auditoría de base de datos en Cloud Logging

Para ver los registros de auditoría de base de datos, primero asegúrate de haber habilitado los registros de auditoría de acceso a los datos en tu proyecto. Los registros de auditoría de MySQL generados para una instancia determinada se envían a Cloud Logging como registros de auditoría de acceso a los datos. Puedes ver los registros de auditoría de base de datos de MySQL generados mediante la aplicación Explorador de registros.

En el Explorador de registros, puedes ver los registros de auditoría de MySQL mediante la siguiente consulta para mostrar todos los registros de auditoría de base de datos de MySQL de un proyecto de Cloud SQL determinado a través de la interfaz de filtro avanzado.

Reemplaza lo siguiente:

  • PROJECT_NAME: Es el nombre del proyecto del que deseas obtener registros de auditoría.
    resource.type="cloudsql_database"
    logName="projects/PROJECT_NAME/logs/cloudaudit.googleapis.com%2Fdata_access"
    protoPayload.request.@type="type.googleapis.com/google.cloud.sql.audit.v1.MysqlAuditEntry"

Como alternativa, puedes seleccionar el filtro de registro cloudaudit.googleapis.com/data_access.

Formato de registro de auditoría

Un registro de auditoría tiene los siguientes campos.

Nombre del campo Descripción
msgType Una string para representar el tipo de mensaje de registro de auditoría. El único valor de msgType es activity.
status El estado de la operación, success o unsuccessful.
date Una marca de tiempo que indica cuándo se generó el evento de auditoría.
threadId El ID del subproceso de MySQL
queryId El ID de la consulta de MySQL.
user Una string que representa el nombre de usuario que envió el cliente. Puede variar del valor de privUser.
privUser Una string que representa el usuario con el que el servidor autenticó al cliente. Este es el nombre de usuario que el servidor usa para la verificación de privilegios. Puede diferir del valor del usuario.
gcpIamAccount Una string que representa la cuenta de servicio o la cuenta de IAM de GCP.
ip Una string que representa la dirección IP de cliente.
host Una string que representa el nombre de host del cliente.
errCode El código de error de MySQL de una operación que no se realizó correctamente. Consulta la Referencia de mensajes de error de servidor MySQL.
cmd Una string que indica la instrucción de SQL (tipo de operación) que se usará. Por ejemplo: INSERT, UPDATE o DELETE.
objects Los objetos de auditoría. Por lo general, es una tabla. En este campo, se incluye la siguiente información sobre el objeto:

db Una string que representa el nombre predeterminado de la base de datos.
name Una string que representa el nombre del objeto. Por lo general, es el nombre de la tabla.
objType Una string que representa el tipo de objeto. Por lo general, TABLE.
query Una instrucción de SQL (ejecutada directamente).
chunkCount Cantidad total de fragmentos si el tamaño de la consulta del registro de auditoría es mayor que cloudsql_mysql_audit_event_split_threshold (90,000).
chunkIndex Índice del fragmento. chunk_index comienza en 1.
@type El tipo siempre es type.googleapis.com/google.cloud.sql.audit.v1.MysqlAuditEntry.

A continuación, se muestra un ejemplo de una entrada de registro de auditoría.

{
"msgType":"activity",
"status":"unsuccessful",
"date":"2021-11-11T06:16:16.163603Z",
"threadId":"750",
"queryId":"26763",
"user":"root",
"priv_user":"root",
"ip":"",
"host":"localhost",
"errCode":"1146",
"cmd":"select",
"objects":[{"db":"test","name":"t4","obj_type":"TABLE"}],
"query":"select * from test.t4",
"chunkCount":2,
"chunkIndex":2,
"@type":"type.googleapis.com/google.cloud.sql.audit.v1.MysqlAuditEntry"
}

Inhabilita la auditoría de bases de datos

Para inhabilitar el complemento de auditoría de Cloud SQL para MySQL, puedes establecer la marca de base de datos cloudsql_mysql_audit en OFF o quitar la marca.

Console

  1. En la consola de Google Cloud, ve a la página Instancias de Cloud SQL.

    Ir a Instancias de Cloud SQL

  2. Abre la instancia y haz clic en Editar.
  3. Desplázate hacia abajo hasta la sección Marcas.
  4. Para configurar una marca que no se configuró antes en la instancia, haz clic en Agregar marca, elige cloudsql_mysql_audit en el menú desplegable y configura su valor comoOFF.
  5. Haz clic en Guardar para guardar los cambios.
  6. Confirma tus cambios en Marcas en la página Descripción general.

gcloud

Reemplaza lo siguiente:

  • INSTANCE_NAME: El nombre de la instancia en la que configuras la marca.

    gcloud sql instances patch INSTANCE_NAME \
               --database-flags cloudsql_mysql_audit=OFF
    

REST v1beta4

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • project-id: el ID del proyecto
  • instance-id: El ID de la instancia

Método HTTP y URL:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id

Cuerpo JSON de la solicitud:

{
  "settings":
  {
    "databaseFlags":
    [
      {
        "name": "cloudsql_mysql_audit",
        "value": "OFF"
      }
    ]
  }
}

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

REST v1

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • project-id: el ID del proyecto
  • instance-id: El ID de la instancia

Método HTTP y URL:

PATCH https://sqladmin.googleapis.com/sql/v1/projects/project-id/instances/instance-id

Cuerpo JSON de la solicitud:

{
  "settings":
  {
    "databaseFlags":
    [
      {
        "name": "cloudsql_mysql_audit",
        "value": "OFF"
      }
    ]
  }
}

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

Ejemplos de reglas de auditoría

  1. Audita todas las actividades de todos los usuarios:

    CALL mysql.cloudsql_create_audit_rule('*','*','*','*','B',1,@outval,@outmsg);
    
  2. Audita todas las actividades de un solo usuario user1:

    CALL mysql.cloudsql_create_audit_rule('user1@*','*','*','*','B',1,@outval,@outmsg);
    
  3. Audita todas las actividades de todos los usuarios que comiencen con user:

    CALL mysql.cloudsql_create_audit_rule('user*@*','*','*','*','B',1, @outval,@outmsg);
    
  4. Audita todas las operaciones DML para todos los usuarios:

    CALL mysql.cloudsql_create_audit_rule('*','*','*','dml','B',1,@outval,@outmsg);
    
  5. Audita la operación de selección de una base de datos especial db1:

    CALL mysql.cloudsql_create_audit_rule('*','db1','*','select','B',1,@outval,@outmsg);
    
  6. Audita todas las actividades de una base de datos con el carácter especial db~1:

    CALL mysql.cloudsql_create_audit_rule('*','`db~1`','*','*','B',1,@outval,@outmsg);
    
  7. Audita las operaciones de selección y eliminación de la tabla db1.table1:

    CALL mysql.cloudsql_create_audit_rule('*','db1','table1','select,delete','B',1,@outval,@outmsg);
    
  8. Audita todas las operaciones exitosas:

    CALL mysql.cloudsql_create_audit_rule('*','*','*','*','S',1,@outval,@outmsg);
    
  9. No audites todas las actividades de todos los usuarios que comiencen con user:

    CALL mysql.cloudsql_create_audit_rule('user*@*','*','*','*','E',1, @outval,@outmsg);
    

Solución de problemas

Problema Soluciona problemas
No puedo ver cloudsql_mysql_audit cuando invoco el comando:

SHOW (global) variables
cloudsql_mysql_audit es el nombre del complemento. Para verificar si está activo, usa el siguiente comando:

SHOW PLUGINS

Y verifica la entrada status.
¿Por qué no puedo ver los registros de auditoría de MySQL después de habilitar cloudsql_mysql_audit? Debes habilitar los registros de auditoría de acceso a los datos (como se describe en Configura registros de auditoría de acceso a los datos). Además, se necesitan reglas de auditoría a fin de que el complemento de auditoría de Cloud SQL para MySQL audite los registros de auditoría deseados. Usa procedimientos almacenados con “reload_mode=1” para crear reglas de auditoría, o bien ejecuta el siguiente comando o reinicia la base de datos a fin de que funcionen las reglas de auditoría recién agregadas:

CALL mysql.cloudsql_reload_audit_rule(1)
Veo el siguiente error cuando actualizo la marca de base de datos:

Error 1193: Variable del sistema desconocida “cloudsql_mysql_audit_xxx”
Las marcas cloudsql_mysql_audit_xxx solo funcionan cuando el complemento de auditoría está activo. Quita las marcas cloudsql_mysql_audit_xxx existentes de la instancia y, luego, activa el complemento con el siguiente comando antes de actualizar las marcas cloudsql_mysql_audit_xxx:

cloudsql_mysql_audit=ON
Puedo ver los registros de auditoría generados aunque no haya establecido ninguna regla de auditoría. Los cambios en las tablas de reglas de auditoría (mysql.audit_log_rules y mysql.audit_log_rules_expanded) y los procedimientos almacenados de auditoría (mysql.cloudsql_xxxx_audit_rule) se registran de forma predeterminada.
Después de realizar cambios en la instancia principal, no puedo ver los registros de auditoría en las instancias de réplica. Los subprocesos de replicación y los de recuperación ante fallas no se registran. Cloud SQL audita las actividades en la instancia principal, pero no en la instancia de réplica.
Intenté usar el siguiente comando para configurar valores de una lista separada por comas, pero no funciona.

gcloud instances patch --database-flags
Si especificas una lista de valores de marcas separados por comas mediante comandos gcloud, usa el argumento --flags-file. Primero, debes crear un archivo con la siguiente información:

--database-flags:
general_log: OFF
cloudsql_mysql_audit_max_query_length: '20'
cloudsql_mysql_audit_data_masking_cmds: select,update

Luego, ejecuta el siguiente comando:

gcloud sql instances patch --flags-file=flagfile
El siguiente comando muestra un error:

CALL mysql.cloudsql_create_canonical_rules
Es intencionado. mysql.cloudsql_create_canonical_rules solo debe llamarlo internamente mysql.cloudsql_create_audit_rule y mysql.cloudsql_update_audit_rule.
¿Qué operaciones puedo auditar? Las operaciones admitidas se muestran en la Lista completa de operaciones admitidas. Algunas operaciones, como las siguientes, no se auditan, ya que no afectan la base de datos:

USE db_name


o

SHOW VARIABLES


Además, en algunos casos, las funciones no se pueden auditar como un objeto (funciones no admitidas).
Quiero auditar todas las operaciones de una tabla específica, por lo que creé la siguiente regla de auditoría:

mysql.cloudsql_create_audit_rule("user@*","db", "table","*","B",1,@1,@2);
Sin embargo, puedo ver registros de auditoría que no están relacionados con esta tabla, como disconnect y connect.
Algunas operaciones, como la desconexión o la conexión, se consideran globales. Ignoran los campos db y object de entrada.
Cuando creo, actualizo o borro una regla de auditoría con procedimientos almacenados, veo el siguiente error.

El servidor MySQL se ejecuta con la opción read-only, por lo que no puede ejecutar esta sentencia.
Cloud SQL no puede cambiar los procedimientos almacenados en una instancia de solo lectura. Si la instancia es la principal, quita las marcas read_only. Si la instancia es de réplica, realiza los cambios en su instancia principal. Después de que se replican los cambios de las reglas en la instancia de réplica, ejecuta el siguiente comando en ella para volver a cargar las reglas en la réplica:
CALL mysql.cloudsql_reload_audit_rule(1)
Cuando creo, actualizo o borro una regla de auditoría, veo el siguiente error, aunque el cambio se haya realizado correctamente.

0 rows affected
La respuesta 0 rows affected es para la última sentencia ejecutada en el procedimiento almacenado, no para las tablas. Para ver si se cambió la regla de auditoría, usa el siguiente comando:

mysql.cloudsql_list_audit_rule
No puedo configurar cloudsql_mysql_audit_data_masking_cmds ni cloudsql_mysql_audit_data_masking_regexp con gcloud. gcloud requiere el uso del argumento --flags-file para establecer valores de marcas complejos (las marcas que incluyen caracteres especiales).
Creé un procedimiento almacenado con la sentencia CREATE USER, pero la contraseña no está enmascarada. De forma predeterminada, el enmascaramiento solo funciona para cmds (operaciones), como las siguientes:

CREATE_USER, ALTER_USER GRANT, UPDATE.

Para filtrar la contraseña mientras creas el procedimiento almacenado, agrega create_procedure a cloudsql_mysql_audit_data_masking_cmds.
Recibo un error de tiempo de espera de bloqueo excedido cuando intento crear, actualizar o borrar reglas de auditoría. Por lo general, este error se produce cuando dos o más sesiones intentan modificar las reglas de auditoría al mismo tiempo. Si esto sucede con frecuencia, aumenta el valor de la variable innodb_lock_wait_timeout. Se puede aumentar de forma global (con la marca de base de datos) o solo para la sesión, por ejemplo, con el siguiente comando:
SET innodb_lock_wait_timeout=120

¿Qué sigue?