Usar la auditoría de bases de datos 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 MySQL. Para obtener más información sobre los complementos de MySQL, consulta Carga de complementos de MySQL.

Antes de empezar

Registros de auditoría de acceso a los datos

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

Privilegios necesarios para los usuarios de auditoría

Debes tener privilegios de 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 información sobre los privilegios de usuario, consulta Privilegios de usuario de MySQL. Por ejemplo, si un administrador quiere conceder acceso a un auditor llamado user para gestionar las reglas de auditoría, puede conceder los privilegios con la siguiente instrucción:

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

Si ese administrador quisiera revocar el acceso al auditor más adelante, podría revocar los privilegios con la siguiente instrucción:

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

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

Habilitar 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. Es decir, esta opción obliga al servidor a ejecutarse con el complemento habilitado o no ejecutarse.

  • --cloudsql_mysql_audit=FORCE_PLUS_PERMANENT

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

Los estados de activación de los complementos se pueden ver en la columna PLUGIN_STATUS de la tabla INFORMATION_SCHEMA.PLUGINS.

Consola

  1. En la Google Cloud consola, 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 la sección de marcas.
  4. Para definir una marca que no se haya definido en la instancia anteriormente, haga clic en Añadir marca, elija cloudsql_mysql_audit en el menú desplegable y defina su valor como ON.
  5. Haz clic en Guardar para guardar los cambios.
  6. Confirma los cambios en Flags (Banderas) en la página Overview (Resumen).

gcloud

Haz los cambios siguientes:

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

Este comando sobrescribe todas las marcas de la base de datos definidas anteriormente. Para mantenerlos y añadir otros, incluya los valores de todas las marcas que quiera definir en la instancia. Las marcas que no se incluyan específicamente se definirán con su valor predeterminado. En el caso de las marcas que no aceptan ningún valor, especifica el nombre de la marca seguido de un signo igual (=).

REST v1beta4

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • project-id: el ID del proyecto
  • instance-id: el ID de 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, despliega una de estas opciones:

Deberías recibir una respuesta JSON similar a la siguiente:

REST v1

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • project-id: el ID del proyecto
  • instance-id: el ID de 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, despliega una de estas opciones:

Deberías recibir una respuesta JSON similar a la siguiente:

Ajustes 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 marcas que se indican a continuación. Todas las marcas se pueden modificar sin reiniciar la base de datos. Para saber cómo gestionar las marcas, consulta Configurar marcas de bases de datos.

  • cloudsql_mysql_audit_data_masking_regex

    Expresión regular que se usa para enmascarar datos y que cumple las normas de las expresiones regulares compatibles con Perl (PCREs).

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

    La expresión regular solo se aplica a las instrucciones con un tipo de comando especificado mediante cloudsql_mysql_audit_data_masking_cmds. Cuando se usa gcloud, se debe usar un archivo de marca para definir valores con caracteres especiales complejos.

    Valores predeterminados de 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 ejemplos siguientes.

    • Sin el cloudsql_mysql_audit_data_masking_regex, una entrada del registro de auditoría que describa un comando de creación de usuario tendría el siguiente aspecto:

      {..."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 cambiaría a:

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

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

    Lista separada por comas de los comandos a los que se aplica la expresión regular de enmascaramiento de datos (cloudsql_mysql_audit_data_masking_regex). Define una cadena vacía ("") para detener el filtrado. Cuando se usa gcloud, debe usar un archivo de marcas para definir 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 va a 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. De esta forma, se ahorra espacio de almacenamiento para el registro, lo que reduce los costes. -1 significa que no hay limitación. El valor predeterminado es -1.

  • cloudsql_mysql_audit_log_write_period

    El periodo de escritura de registros durante el cual el subproceso de escritura escribe el contenido del búfer en el disco después de alcanzar el número de milisegundos que hayas definido para esta opción de marca o cuando el búfer esté lleno. Si asignas el valor 0 a esta opción de marca, el subproceso del usuario se verá obligado a esperar una notificación del subproceso de escritura que indique que la escritura se ha completado. El valor predeterminado es 500 (milisegundos).

Consola

  1. En la Google Cloud consola, 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 la sección de marcas.
  4. Para definir una marca que no se haya definido en la instancia anteriormente, haz clic en Añadir marca, elige una marca de base de datos de la lista anterior en el menú desplegable y define su valor.
  5. Haz clic en Guardar para guardar los cambios.
  6. Confirma los cambios en Flags (Banderas) en la página Overview (Resumen).

gcloud

Haz los cambios siguientes:

  • INSTANCE_NAME: el nombre de la instancia en la que vas a definir la marca.
  • FLAG_NAME: el nombre de la marca de configuración.
  • FLAG_VALUE: el valor que se va a usar en el indicador.

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

REST v1beta4

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • project-id: el ID del proyecto
  • instance-id: el ID de 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, despliega una de estas opciones:

Deberías recibir una respuesta JSON similar a la siguiente:

REST v1

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • project-id: el ID del proyecto
  • instance-id: el ID de 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, despliega una de estas opciones:

Deberías recibir una respuesta JSON similar a la siguiente:

Configurar la auditoría de bases de datos

Gestionar reglas de auditoría

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

Cada procedimiento almacenado devuelve 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 hosts. Puedes usar la comilla inversa (`) para indicar que una cadena se debe usar literalmente. Por ejemplo, `ta*ble` coincide literalmente.

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

Crear reglas de auditoría

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

Para crear la regla de auditoría y volver a cargarla en una sola llamada, usa la siguiente instrucción:

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 independiente, usa la siguiente instrucción:

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, después, volver a cargar todos los cambios al mismo tiempo.

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

Parámetros de entrada
Nombre Tipo Descripción Ejemplo
user@host o user@ip cadena Lista separada por comas de los usuarios de la base de datos que se van a auditar. Usa el formato user@host o user@ip.

user1@localhost,
user1@*,
user1@%,
user@ip
db cadena Lista de bases de datos separadas por comas que se van a auditar. db1,db2,db3*
obj cadena Lista separada por comas de los objetos de base de datos que se van a auditar. table1,table2,table3*
ops cadena Lista separada por comas de las acciones de la base de datos que se van a auditar. select,delete,insert
op_result cadena Auditoría correcta (S), incorrecta (U) o ambas (B). S, U o B
reload_mode Entero 0 para no volver a cargar la regla y 1 para volver a cargarla. 0 o 1
Parámetros de salida
Nombre Tipo Descripción Ejemplo
@outval int El código de estado del procedimiento almacenado. 0 si se completa correctamente y 1 si se produce un error.
@outmsg cadena 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 2048 caracteres.
Número de combinaciones de user, db, obj y ops. Máximo de 1000 combinaciones. Por ejemplo, una regla de auditoría que audite user1,user2, db1, db2, table1,table2 y select,delete genera 2 x 2 x 2 x 2 = 16 combinaciones.

Mostrar reglas de auditoría

Los auditores pueden usar mysql.cloudsql_list_audit_rule para enumerar las reglas de auditoría.

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

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

Para obtener 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 tablas siguientes se muestran los parámetros de entrada y salida del comando anterior.

Parámetros de entrada
Nombre Tipo Descripción Ejemplo
rule_id cadena Lista separada por comas de los IDs de las reglas que se van a eliminar. 1,2,3
Parámetros de salida
Nombre Tipo Descripción Ejemplo
@outval int El código de estado del procedimiento almacenado. 0 si se completa correctamente y 1 si se produce un error.
@outmsg cadena El mensaje de error del procedimiento almacenado.

Actualizar reglas de auditoría

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

Para actualizar la regla de auditoría y volver a cargarla en una sola llamada, utiliza la siguiente instrucción:

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

Puede que quieras actualizar varias reglas de auditoría en una sesión antes de volver a cargar las reglas. Puede usar el siguiente procedimiento almacenado para actualizar las reglas en un paso y, a continuación, 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 tablas siguientes se muestran los parámetros de entrada y salida del comando anterior.

Parámetros de entrada
Nombre Tipo Descripción Ejemplo
rule_id int ID de la regla que se va a actualizar. 5
user@host cadena Lista separada por comas de los usuarios de la base de datos que se van a auditar. Usa el formato usuario@host.

user1@localhost,user1@*
user1@%
db cadena Lista de bases de datos separadas por comas que se van a auditar. db1,db2,db3*
obj cadena Lista separada por comas de los objetos de base de datos que se van a auditar. table1,table2,table3*
ops cadena Lista separada por comas de las acciones de la base de datos que se van a auditar. SELECT,DELETE,INSERT
op_result cadena Auditoría correcta (S), incorrecta (U) o ambas (B). S, U o B
reload_mode Entero 0 para no volver a cargar la regla y 1 para volver a cargarla. 0 o 1
Parámetros de salida
Nombre Tipo Descripción Ejemplo
@outval int El código de estado del procedimiento almacenado. 0 si se completa correctamente y 1 si se produce un error.
@outmsg cadena 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 2048 caracteres.
Número de combinaciones de user, db, obj y ops. Máximo de 1000 combinaciones. Por ejemplo, una regla de auditoría que audite user1,user2, db1, db2, table1,table2 y select,delete genera 2 x 2 x 2 x 2 = 16 combinaciones.

Eliminar reglas de auditoría

Puedes usar el mysql.cloudsql_delete_audit_rule para eliminar una regla de auditoría.

Para eliminar la regla de auditoría y volver a cargarla en una sola llamada, utiliza la siguiente instrucción:

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

Para eliminar la regla y volver a cargarla en una llamada independiente, 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 eliminar varias reglas y, a continuación, volver a cargar todos los cambios al mismo tiempo.

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

Parámetros de entrada
Nombre Tipo Descripción Ejemplo
rule_id cadena Lista separada por comas de los IDs de las reglas que se van a eliminar. 1,2,3
reload_mode Entero 0 para no volver a cargar la regla y 1 para volver a cargarla. 0 o 1
Parámetros de salida
Nombre Tipo Descripción Ejemplo
@outval int El código de estado del procedimiento almacenado. 0 si se completa correctamente y 1 si se produce un error.
@outmsg cadena 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 colecciones de actividades. Puede 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

Ver registros de auditoría de bases de datos de Cloud SQL

Ver registros de auditoría de bases de datos en Cloud Logging

Para ver los registros de auditoría de la base de datos, primero debes habilitar los registros de auditoría de acceso a los datos de 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 datos. Puedes ver los registros de auditoría de la base de datos MySQL generados a través de la aplicación Explorador de registros.

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

Haz los cambios siguientes:

  • PROJECT_NAME: el nombre del proyecto del que quieres obtener los 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"

También puede seleccionar el filtro de registro cloudaudit.googleapis.com/data_access.

Formato del registro de auditoría

Un registro de auditoría tiene los siguientes campos.

Nombre del campo Descripción
msgType Cadena que representa el tipo de mensaje del registro de auditoría.El único valor de msgType es activity.
status Estado de la operación, que puede ser success o unsuccessful.
date Marca de tiempo que indica cuándo se generó el evento de auditoría.
threadId ID del subproceso de MySQL.
queryId El ID de la consulta MySQL.
user Cadena que representa el nombre de usuario enviado por el cliente. Este valor puede ser diferente del valor de privUser.
privUser Cadena que representa al usuario con el que el servidor autenticó al cliente. Este es el nombre de usuario que usa el servidor para comprobar los privilegios. Puede ser diferente del valor del usuario.
gcpIamAccount Cadena que representa la cuenta o el servicio de gestión de identidades y accesos de GCP. account.
ip Cadena que representa la dirección IP del cliente.
host Cadena que representa el nombre de host del cliente.
errCode El código de error de MySQL de una operación fallida. Consulta la referencia de mensajes de error del servidor MySQL.
cmd Cadena que indica la instrucción SQL (tipo de operación) que se va a usar. Por ejemplo, INSERT, UPDATE o DELETE.
objects Los objetos de auditoría. Normalmente, una tabla. Este campo incluye la siguiente información sobre el objeto:

db Cadena que representa el nombre de la base de datos predeterminada.
name Cadena que representa el nombre del objeto. Normalmente, el nombre de la tabla.
objType Cadena que representa el tipo del objeto. Normalmente TABLE.
query Una instrucción SQL (ejecutada directamente).
chunkCount Número total de fragmentos si el tamaño de la consulta del registro de auditoría es superior a cloudsql_mysql_audit_event_split_threshold (90.000).
chunkIndex Índice del fragmento. chunk_index empieza por 1.
@type El tipo siempre es type.googleapis.com/google.cloud.sql.audit.v1.MysqlAuditEntry.

A continuación se muestra un ejemplo de 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"
}

Inhabilitar la auditoría de bases de datos

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

Consola

  1. En la Google Cloud consola, 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 la sección de marcas.
  4. Para definir una marca que no se haya definido en la instancia anteriormente, haga clic en Añadir marca, elija cloudsql_mysql_audit en el menú desplegable y defina su valor como OFF.
  5. Haz clic en Guardar para guardar los cambios.
  6. Confirma los cambios en Flags (Banderas) en la página Overview (Resumen).

gcloud

Haz los cambios siguientes:

  • INSTANCE_NAME: el nombre de la instancia en la que vas a definir la marca.

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

REST v1beta4

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • project-id: el ID del proyecto
  • instance-id: el ID de 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, despliega una de estas opciones:

Deberías recibir una respuesta JSON similar a la siguiente:

REST v1

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • project-id: el ID del proyecto
  • instance-id: el ID de 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, despliega una de estas opciones:

Deberías recibir una respuesta JSON similar a la siguiente:

Ejemplos de reglas de auditoría

  1. Auditar todas las actividades de todos los usuarios:

    CALL mysql.cloudsql_create_audit_rule('*','*','*','*','B',1,@outval,@outmsg);
  2. Auditar 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 empiecen por user:

    CALL mysql.cloudsql_create_audit_rule('user*@*','*','*','*','B',1, @outval,@outmsg);
  4. Audita todas las operaciones DML de 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. Auditar 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 correctas:

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

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

Solucionar problemas

Problema Solución de problemas
No veo cloudsql_mysql_audit cuando invoco el comando:

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

SHOW PLUGINS

Comprueba la entrada status.
¿Por qué no puedo ver los registros de auditoría de MySQL después de habilitar cloudsql_mysql_audit? Debe habilitar los registros de auditoría de acceso a datos (tal como se describe en el artículo Configurar registros de auditoría de acceso a datos). Además, se necesitan reglas de auditoría para 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 ejecuta el siguiente comando o reinicia la base de datos para que funcionen las reglas de auditoría recién añadidas:

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

Error 1193: Unknown system variable '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 de la instancia y, a continuación, activa el complemento con el siguiente comando antes de actualizar las marcas cloudsql_mysql_audit_xxx:

cloudsql_mysql_audit=ON
Puedo ver registros de auditoría generados aunque no haya configurado 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 en los procedimientos almacenados de auditoría (mysql.cloudsql_xxxx_audit_rule) se registran de forma predeterminada.
Después de hacer cambios en la instancia principal, no puedo ver los registros de auditoría en mis instancias réplica. No se registran los subprocesos de replicación ni los de recuperación tras un fallo. Cloud SQL audita las actividades de la instancia principal, pero no las de la instancia de réplica.
He intentado usar el siguiente comando para definir 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

A continuación, ejecuta el siguiente comando:

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

CALL mysql.cloudsql_create_canonical_rules
Es lo previsto. mysql.cloudsql_create_canonical_rules solo deben llamarlo internamente mysql.cloudsql_create_audit_rule y mysql.cloudsql_update_audit_rule.
¿Qué operaciones puedo auditar? Las operaciones admitidas se indican en la lista completa de operaciones admitidas. Algunas operaciones, como las siguientes, no se auditan porque no afectan a la base de datos:

USE db_name


o

SHOW VARIABLES


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

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

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

0 rows affected
La respuesta 0 rows affected corresponde a la última instrucción ejecutada en el procedimiento almacenado, no a las tablas. Para comprobar si se ha cambiado la regla de auditoría, usa el siguiente comando:

mysql.cloudsql_list_audit_rule
No puedo configurar cloudsql_mysql_audit_data_masking_cmds y cloudsql_mysql_audit_data_masking_regexp con gcloud. gcloud requiere el uso del argumento --flags-file para definir valores de marca complejos (las marcas que incluyen caracteres especiales).
He creado un procedimiento almacenado con la instrucción CREATE USER, pero la contraseña no está oculta. De forma predeterminada, el enmascaramiento solo funciona con cmds (operaciones), como las siguientes:

CREATE_USER, ALTER_USER, GRANT, UPDATE.

Para filtrar la contraseña al crear el procedimiento almacenado, añade create_procedure a la cloudsql_mysql_audit_data_masking_cmds.
He recibido un error de tiempo de espera agotado al intentar crear, actualizar o eliminar reglas de auditoría. Normalmente, este error se produce cuando dos o más sesiones intentan modificar las reglas de auditoría al mismo tiempo. Si esto ocurre con frecuencia, aumenta el valor de la variable innodb_lock_wait_timeout. Se puede aumentar de forma global (con la marca de la base de datos) o solo para la sesión, por ejemplo, con el siguiente comando:
SET innodb_lock_wait_timeout=120
.

Siguientes pasos