Utilice la auditoría de bases de datos MySQL

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

Antes de empezar

Registros de auditoría de acceso a datos

Habilite y configure los registros de auditoría de acceso a datos. Consulte Configurar registros de auditoría de acceso a datos .

Privilegios necesarios para los usuarios de auditoría

Debe 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 más información sobre los privilegios de usuario, consulte 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 instrucción:

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

Si posteriormente ese administrador quisiera revocar el acceso al auditor, podría revocar los privilegios utilizando la siguiente declaració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 IAM) son administradores con todos los privilegios, excepto FILE y SUPER , incluidos todos los privilegios para los procedimientos almacenados de auditoría. Los usuarios de bases de datos de IAM no tienen privilegios de forma predeterminada.

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 debe habilitarlo en la instancia de Cloud SQL.

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

  • --cloudsql_mysql_audit=ON

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

  • --cloudsql_mysql_audit=FORCE

    Indica al servidor que habilite el complemento, pero si falla su inicialización, el servidor no se inicia. En otras palabras, esta opción obliga al servidor a ejecutarse con el complemento habilitado o a no ejecutarse.

  • --cloudsql_mysql_audit=FORCE_PLUS_PERMANENT

    Similar a FORCE, pero también impide que el complemento se descargue durante la 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 .

Consola

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

    Ir a Instancias de Cloud SQL

  2. Abra la instancia y haga clic en Editar .
  3. Desplácese hacia abajo hasta la sección Banderas .
  4. Para establecer una bandera que no se haya establecido anteriormente en la instancia, haga clic en Agregar bandera , elija cloudsql_mysql_audit en el menú desplegable y establezca su valor en ON .
  5. Haga clic en Guardar para guardar los cambios.
  6. Confirme sus cambios en Banderas en la página Descripción general .

nube g

Reemplace lo siguiente:

  • INSTANCE_NAME : El nombre de la instancia en la que estás configurando la bandera.
gcloud sql instances patch INSTANCE_NAME \
           --database-flags cloudsql_mysql_audit=ON

Este comando sobrescribe todas las marcas de la base de datos previamente configuradas. Para conservarlas y añadir nuevas, incluya los valores de todas las marcas que desee configurar en la instancia; cualquier marca que no se incluya específicamente se establece con su valor predeterminado. Para las marcas que no toman valor, especifique el nombre de la marca seguido de un signo igual ( = ).

REST v1beta4

Antes de utilizar cualquiera de los datos solicitados, realice las siguientes sustituciones:

  • 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 su solicitud, expanda una de estas opciones:

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

REST versión 1

Antes de utilizar cualquiera de los datos solicitados, realice las siguientes sustituciones:

  • 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 su solicitud, expanda una de estas opciones:

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

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

Puede ajustar el comportamiento del complemento de auditoría de Cloud SQL para MySQL con las siguientes opciones. Todas las opciones se pueden modificar sin reiniciar la base de datos. Para saber cómo administrar las opciones, consulte Configuración de opciones de la base de datos .

  • cloudsql_mysql_audit_data_masking_regex

    Una expresión regular utilizada para enmascarar datos que cumple 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 *** .

    Las expresiones regulares solo se aplican a las sentencias con un tipo de comando especificado mediante cloudsql_mysql_audit_data_masking_cmds . Al usar gcloud , debe usar un archivo de indicadores para establecer valores con caracteres especiales complejos.

    Valores predeterminados para esta bandera:

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

    Vea los siguientes ejemplos.

    • Sin cloudsql_mysql_audit_data_masking_regex , una entrada de registro de auditoría que describe un comando de creación de usuario aparecería 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 cambiaría a:

      {..."cmd":"create_user","query":"create user user1@'localhost' identified by
      '***'"}
    • Si configura cloudsql_mysql_audit_data_masking_regex en (?<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 expresión regular de enmascaramiento de datos ( cloudsql_mysql_audit_data_masking_regex ). Establezca una cadena vacía ( "" ) para detener el filtrado. Al usar gcloud , debe usar un archivo de indicadores para establecer una lista separada por comas. El valor predeterminado incluye comandos 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 registra en el registro de auditoría. Si no necesita ver los detalles de la consulta, puede 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 resulta en un menor costo. -1 significa sin límite. El valor predeterminado es -1 .

  • cloudsql_mysql_audit_log_write_period

    El periodo de escritura del registro, durante el cual el hilo de escritura escribe el contenido del búfer en el disco tras alcanzar los milisegundos establecidos en esta opción de indicador, o cuando el búfer está lleno. Si se establece esta opción en 0 , el hilo del usuario debe esperar una notificación del hilo de escritura indicando que la escritura se ha completado. El valor predeterminado es 500 milisegundos.

Consola

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

    Ir a Instancias de Cloud SQL

  2. Abra la instancia y haga clic en Editar .
  3. Desplácese hacia abajo hasta la sección Banderas .
  4. Para establecer un indicador que no se haya establecido anteriormente en la instancia, haga clic en Agregar indicador , elija un indicador de base de datos de la lista anterior en el menú desplegable y establezca su valor.
  5. Haga clic en Guardar para guardar los cambios.
  6. Confirme sus cambios en Banderas en la página Descripción general .

nube g

Reemplace lo siguiente:

  • INSTANCE_NAME : El nombre de la instancia en la que estás configurando la bandera.
  • FLAG_NAME : El nombre del indicador de configuración.
  • FLAG_VALUE : El valor a utilizar para la bandera.

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

REST v1beta4

Antes de utilizar cualquiera de los datos solicitados, realice las siguientes sustituciones:

  • 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 su solicitud, expanda una de estas opciones:

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

REST versión 1

Antes de utilizar cualquiera de los datos solicitados, realice las siguientes sustituciones:

  • 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 su solicitud, expanda una de estas opciones:

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

Configurar la auditoría de la base de datos

Administrar reglas de auditoría

Cloud SQL utiliza un conjunto de procedimientos almacenados para administrar las reglas de auditoría del complemento de auditoría de Cloud SQL para MySQL. Hay cuatro procedimientos almacenados que puede usar para crear, listar, 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. Puede usar un asterisco ( * ) como comodín para buscar nombres de usuario, host, base de datos y tabla. Úselo como sufijo, prefijo o ambos. Además, puede usar el carácter comodín % solo para hosts. Puede usar la comilla invertida ( ` ) para indicar que una cadena debe usarse literalmente. Por ejemplo, `ta*ble` coincide literalmente.

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

Crear reglas de auditoría

Puede utilizar mysql.cloudsql_create_audit_rule para crear una nueva regla de auditoría.

Para crear la regla de auditoría y recargarla en una sola llamada, utilice la siguiente declaració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 separada, utilice la siguiente declaració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 le permite crear múltiples reglas y luego recargar todos los cambios al mismo tiempo.

Las siguientes tablas muestran los parámetros de entrada y salida para el comando anterior.

Parámetros de entrada
Nombre Tipo Descripción Ejemplo
user@host o user@ip cadena Lista de usuarios de la base de datos que se auditarán, separados por comas. Use el formato user@host o user@ip .

user1@localhost ,
user1@* ,
user1@% ,
user@ip
db cadena La lista separada por comas de bases de datos para auditar. db1,db2,db3*
obj cadena La lista separada por comas de objetos de base de datos para auditar. table1,table2,table3*
ops cadena La lista separada por comas de acciones de base de datos para auditar. select,delete,insert
op_result cadena Auditoría de operaciones exitosas y fallidas (S), exitosas (U) o ambas (B). S , U o B
reload_mode Entero 0 para no recargar la regla y 1 para recargar. 0 o 1
Parámetros de salida
Nombre Tipo Descripción Ejemplo
@outval entero El código de estado del procedimiento almacenado. 0 para éxito y 1 para fracaso.
@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 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 audita user1,user2 , db1, db2 , table1,table2 y select,delete genera 2 x 2 x 2 x 2 = 16 combinaciones.

Enumerar las reglas de auditoría

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

Para enumerar las reglas de auditoría 1 y 2, utilice los siguientes comandos:

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

Para enumerar todas las reglas de auditoría, haga lo siguiente:

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

Las siguientes tablas muestran los parámetros de entrada y salida para el comando anterior.

Parámetros de entrada
Nombre Tipo Descripción Ejemplo
rule_id cadena La lista separada por comas de identificaciones de reglas para eliminar. 1,2,3
Parámetros de salida
Nombre Tipo Descripción Ejemplo
@outval entero El código de estado del procedimiento almacenado. 0 para éxito y 1 para fracaso.
@outmsg cadena El mensaje de error del procedimiento almacenado.

Actualizar las reglas de auditoría

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

Para actualizar la regla de auditoría y recargarla en una sola llamada, utilice la siguiente declaración:

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

Quizás desee actualizar varias reglas de auditoría en una sola sesión antes de volver a cargarlas. Puede usar el siguiente procedimiento almacenado para actualizar las reglas en un solo paso y volver a cargarlas posteriormente.

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);

Las siguientes tablas muestran los parámetros de entrada y salida para el comando anterior.

Parámetros de entrada
Nombre Tipo Descripción Ejemplo
rule_id entero El ID de la regla a actualizar. 5
user@host cadena Lista de usuarios de la base de datos que se auditarán, separados por comas. Use el formato usuario@host.

user1@localhost,user1@*
user1@%
db cadena La lista separada por comas de bases de datos para auditar. db1,db2,db3*
obj cadena La lista separada por comas de objetos de base de datos para auditar. table1,table2,table3*
ops cadena La lista separada por comas de acciones de base de datos para auditar. SELECT,DELETE,INSERT
op_result cadena Auditoría de operaciones exitosas (S), fallidas (U) o ambas (B). S , U o B
reload_mode Entero 0 para no recargar la regla y 1 para recargar. 0 o 1
Parámetros de salida
Nombre Tipo Descripción Ejemplo
@outval entero El código de estado del procedimiento almacenado. 0 para éxito y 1 para fracaso.
@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 . Tamaño máximo 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 audita user1,user2 , db1, db2 , table1,table2 y select,delete genera 2 x 2 x 2 x 2 = 16 combinaciones.

Eliminar reglas de auditoría

Puede utilizar mysql.cloudsql_delete_audit_rule para eliminar una regla de auditoría existente.

Para eliminar la regla de auditoría y volver a cargarla en una sola llamada, utilice la siguiente declaració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 separada, utilice la siguiente declaración:

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

El comando anterior le permite eliminar varias reglas y luego volver a cargar todos los cambios al mismo tiempo.

Las siguientes tablas muestran los parámetros de entrada y salida para el comando anterior.

Parámetros de entrada
Nombre Tipo Descripción Ejemplo
rule_id cadena La lista separada por comas de identificaciones de reglas para eliminar. 1,2,3
reload_mode Entero 0 para no recargar la regla y 1 para recargar. 0 o 1
Parámetros de salida
Nombre Tipo Descripción Ejemplo
@outval entero El código de estado del procedimiento almacenado. 0 para éxito y 1 para fracaso.
@outmsg cadena El mensaje de error del procedimiento almacenado.

Grupos de operaciones

El complemento de auditoría de Cloud SQL para MySQL permite usar grupos de operaciones en las definiciones de reglas para auditar conjuntos 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 la base 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 asegúrese de haber habilitado los registros de auditoría de acceso a datos en su 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 . Puede ver los registros de auditoría de la base de datos MySQL generados mediante 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 para un proyecto determinado de Cloud SQL a través de la interfaz de Filtro avanzado.

Reemplace lo siguiente:

  • PROJECT_NAME : El nombre del proyecto del cual desea 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"

Alternativamente, 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 Una cadena para representar el tipo de mensaje del registro de auditoría. El único valor para msgType es activity .
status Estado de la operación, ya sea success o unsuccessful .
date Una marca de tiempo que indica cuándo se generó el evento de auditoría.
threadId El ID del hilo MySQL.
queryId El ID de la consulta MySQL.
user Una cadena que representa el nombre de usuario enviado por el cliente. Puede ser diferente del valor de privUser.
privUser Una cadena que representa el usuario con el que el servidor autenticó al cliente. Este es el nombre de usuario que el servidor utiliza para la comprobación de privilegios. Puede ser diferente del valor del usuario.
gcpIamAccount Una cadena que representa la cuenta de IAM de GCP o la cuenta de servicio.
ip Una cadena que representa la dirección IP del cliente.
host Una cadena que representa el nombre del host del cliente.
errCode Código de error de MySQL para una operación fallida. Consulte la Referencia de mensajes de error del servidor MySQL .
cmd Una cadena que indica la instrucción SQL (tipo de operación) que se utilizará. 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 Una cadena que representa el nombre de la base de datos predeterminada.
name Una cadena que representa el nombre del objeto. Normalmente, el nombre de la tabla.
objType Una cadena que representa el tipo del objeto. Normalmente, TABLE .
query Una sentencia SQL (ejecutada directamente).
chunkCount Número total de fragmentos si el tamaño de la consulta del registro de auditoría es mayor que cloudsql_mysql_audit_event_split_threshold (90k).
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 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"
}

Deshabilitar la auditoría de la base de datos

Para deshabilitar el complemento de auditoría de Cloud SQL para MySQL, puede establecer el indicador de base de datos cloudsql_mysql_audit en DESACTIVADO o eliminar el indicador.

Consola

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

    Ir a Instancias de Cloud SQL

  2. Abra la instancia y haga clic en Editar .
  3. Desplácese hacia abajo hasta la sección Banderas .
  4. Para establecer una bandera que no se haya establecido anteriormente en la instancia, haga clic en Agregar bandera , elija cloudsql_mysql_audit en el menú desplegable y establezca su valor en OFF .
  5. Haga clic en Guardar para guardar los cambios.
  6. Confirme sus cambios en Banderas en la página Descripción general .

nube g

Reemplace lo siguiente:

  • INSTANCE_NAME : El nombre de la instancia en la que estás configurando la bandera.

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

REST v1beta4

Antes de utilizar cualquiera de los datos solicitados, realice las siguientes sustituciones:

  • 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 su solicitud, expanda una de estas opciones:

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

REST versión 1

Antes de utilizar cualquiera de los datos solicitados, realice las siguientes sustituciones:

  • 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 su solicitud, expanda una de estas opciones:

Debería 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. Auditar todas las actividades de todos los usuarios que comienzan con user :

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

    CALL mysql.cloudsql_create_audit_rule('*','*','*','dml','B',1,@outval,@outmsg);
  5. Operación de selección de auditoría para una base de datos especial db1 :

    CALL mysql.cloudsql_create_audit_rule('*','db1','*','select','B',1,@outval,@outmsg);
  6. Auditar 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. Auditoría de operaciones de selección y eliminación para la tabla db1.table1 :

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

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

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

Solucionar problemas

Asunto Solución de problemas
No puedo ver cloudsql_mysql_audit cuando invoco el comando:

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

SHOW PLUGINS

Y comprobar 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 (como se describe en 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. Use procedimientos almacenados con `reload_mode=1` para crear reglas de auditoría, o ejecute el siguiente comando o reinicie la base de datos para que funcionen las reglas de auditoría recién agregadas:

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

Error 1193: Variable de sistema desconocida 'cloudsql_mysql_audit_xxx'
Los indicadores cloudsql_mysql_audit_xxx solo funcionan cuando el complemento de auditoría está activo. Elimine cualquier indicador cloudsql_mysql_audit_xxx existente de la instancia y active el complemento con el siguiente comando antes de actualizar los indicadores cloudsql_mysql_audit_xxx :

cloudsql_mysql_audit=ON
Puedo ver registros de auditoría generados aunque no configuré 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 realizar cambios en la instancia principal, no puedo ver los registros de auditoría en mis instancias de réplica. Los subprocesos de replicación y recuperación ante fallos no se registran. Cloud SQL audita las actividades en la instancia principal, pero no en la réplica.
Intenté usar el siguiente comando para establecer valores de una lista separada por comas, pero no funciona.

gcloud instances patch --database-flags
Si especifica una lista de valores de indicadores separados por comas mediante comandos gcloud , utilice el argumento --flags-file . Primero, debe 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 ejecute el siguiente comando:

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

CALL mysql.cloudsql_create_canonical_rules
Esto es lo que se pretende. mysql.cloudsql_create_canonical_rules solo debe ser llamado internamente por mysql.cloudsql_create_audit_rule y mysql.cloudsql_update_audit_rule .
¿Qué operaciones puedo auditar? Las operaciones admitidas se enumeran 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 un objeto (funciones no compatibles).
Quiero auditar todas las operaciones en una tabla específica, así que creé la siguiente regla de auditoría:

mysql.cloudsql_create_audit_rule("user@*","db", "table","*","B",1,@1,@2);
Pero puedo ver 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, veo el siguiente error.

El servidor MySQL se está ejecutando con la opción read-only por lo que no puede ejecutar esta declaración.
Cloud SQL no puede modificar los procedimientos almacenados en una instancia de solo lectura. Si la instancia es principal, elimine las marcas read_only . Si la instancia es una réplica, realice los cambios en su instancia principal. Una vez replicados los cambios de las reglas en la réplica, ejecute el siguiente comando 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, incluso 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 la regla de auditoría ha cambiado, utilice 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 establecer valores de bandera complejos (las banderas que incluyen caracteres especiales).
Creé un procedimiento almacenado utilizando la instrucción CREATE USER , pero la contraseña no está enmascarada. De forma predeterminada, el enmascaramiento solo funciona para cmds (operaciones), como los siguientes:

CREATE_USER , ALTER_USER , GRANT , UPDATE .

Para filtrar la contraseña mientras crea el procedimiento almacenado, agregue create_procedure a cloudsql_mysql_audit_data_masking_cmds .
Recibí un error de tiempo de espera de bloqueo excedido 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 simultáneamente. Si esto ocurre con frecuencia, aumente el valor de la variable innodb_lock_wait_timeout . Puede aumentarse globalmente (mediante el indicador de base de datos) o solo para la sesión, por ejemplo, con el siguiente comando:
SET innodb_lock_wait_timeout=120
.

¿Qué sigue?