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
-
En la Google Cloud consola, ve a la página Instancias de Cloud SQL.
- Abre la instancia y haz clic en Editar.
- Desplázate hacia la sección de marcas.
- 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 comoON
. - Haz clic en Guardar para guardar los cambios.
- 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 usagcloud
, 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 usagcloud
, 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 es500
(milisegundos).
Consola
-
En la Google Cloud consola, ve a la página Instancias de Cloud SQL.
- Abre la instancia y haz clic en Editar.
- Desplázate hacia la sección de marcas.
- 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.
- Haz clic en Guardar para guardar los cambios.
- 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:
|
||||||
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
-
En la Google Cloud consola, ve a la página Instancias de Cloud SQL.
- Abre la instancia y haz clic en Editar.
- Desplázate hacia la sección de marcas.
- 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 comoOFF
. - Haz clic en Guardar para guardar los cambios.
- 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
Auditar todas las actividades de todos los usuarios:
CALL mysql.cloudsql_create_audit_rule('*','*','*','*','B',1,@outval,@outmsg);
Auditar 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 empiecen por
user
:CALL mysql.cloudsql_create_audit_rule('user*@*','*','*','*','B',1, @outval,@outmsg);
Audita todas las operaciones DML de 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);
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);
Audita todas las operaciones correctas:
CALL mysql.cloudsql_create_audit_rule('*','*','*','*','S',1,@outval,@outmsg);
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
- Consulta más información sobre la auditoría de bases de datos MySQL.
- Consulta la lista completa de operaciones para la auditoría de bases de datos.