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
-
En la consola de Google Cloud, ve a la página Instancias de Cloud SQL.
- Abre la instancia y haz clic en Editar.
- Desplázate hacia abajo hasta la sección Marcas.
- 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 comoON
. - Haz clic en Guardar para guardar los cambios.
- 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: Es 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: Es 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 usesgcloud
, 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 usesgcloud
, 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 es500
(milisegundos).
Console
-
En la consola de Google Cloud, ve a la página Instancias de Cloud SQL.
- Abre la instancia y haz clic en Editar.
- Desplázate hacia abajo hasta la sección Marcas.
- 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.
- Haz clic en Guardar para guardar los cambios.
- 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: Es 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: Es 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 | |||
---|---|---|---|
Nombre | 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 | |||
---|---|---|---|
Nombre | 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 | |||
---|---|---|---|
Nombre | 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 | |||
---|---|---|---|
Nombre | 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 | |||
---|---|---|---|
Nombre | 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 | |||
---|---|---|---|
Nombre | 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 | |||
---|---|---|---|
Nombre | 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 | |||
---|---|---|---|
Nombre | 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:
|
||||||
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
-
En la consola de Google Cloud, ve a la página Instancias de Cloud SQL.
- Abre la instancia y haz clic en Editar.
- Desplázate hacia abajo hasta la sección Marcas.
- 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
. - Haz clic en Guardar para guardar los cambios.
- 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: Es 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: Es 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
Audita todas las actividades de todos los usuarios:
CALL mysql.cloudsql_create_audit_rule('*','*','*','*','B',1,@outval,@outmsg);
Audita todas las actividades de un solo usuario
user1
:CALL mysql.cloudsql_create_audit_rule('user1@*','*','*','*','B',1,@outval,@outmsg);
Audita todas las actividades de todos los usuarios que comiencen con
user
:CALL mysql.cloudsql_create_audit_rule('user*@*','*','*','*','B',1, @outval,@outmsg);
Audita todas las operaciones DML para todos los usuarios:
CALL mysql.cloudsql_create_audit_rule('*','*','*','dml','B',1,@outval,@outmsg);
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);
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);
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);
Audita todas las operaciones exitosas:
CALL mysql.cloudsql_create_audit_rule('*','*','*','*','S',1,@outval,@outmsg);
No audites todas las actividades de todos los usuarios que comiencen con
user
:CALL mysql.cloudsql_create_audit_rule('user*@*','*','*','*','E',1, @outval,@outmsg);
Solucionar 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 Además, revisa 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 comando siguiente: 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 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 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?
- Obtén más información sobre la auditoría de bases de datos de MySQL.
- Consulta la lista completa de operaciones de auditoría de bases de datos.