Usar a auditoria do banco de dados MySQL

Neste tópico, descrevemos como ativar e usar o plug-in de auditoria do Cloud SQL para MySQL. Para uma visão geral, consulte Auditoria de banco de dados do MySQL. Para mais informações sobre os plug-ins do MySQL, consulte Carregamento do plug-in do MySQL.

Antes de começar

Registros de auditoria de acesso a dados

Ativar e configurar os registros de auditoria do Data Access Consulte Configurar registros de auditoria de acesso a dados.

Privilégios exigidos para usuários de auditoria

É necessário ter privilégios EXECUTE nos procedimentos de auditoria armazenados para executá-los. Se um administrador precisar mudar os privilégios de acesso de um auditor para os procedimentos de auditoria armazenados, ele precisará usar o comando GRANT ou REVOKE no cliente mysql. Para detalhes sobre os privilégios de usuário, consulte Privilégios de usuário do MySQL. Por exemplo, se um administrador quiser conceder acesso a um auditor chamado user, para gerenciar as regras de auditoria, ele poderá conceder os privilégios usando a seguinte instrução:

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

Se esse administrador quiser revogar o acesso ao auditor posteriormente, ele pode revogar os privilégios usando a seguinte instrução:

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

Por padrão, os usuários criados com o Cloud SQL (exceto usuários do IAM) são administradores com todos os privilégios, exceto FILE e SUPER, incluindo todos os privilégios. os procedimentos armazenados de auditoria. Por padrão, os usuários do banco de dados do IAM não têm privilégios.

Ativar o plug-in de auditoria do Cloud SQL para MySQL

O plug-in de auditoria do Cloud SQL para MySQL (cloudsql_mysql_audit) controla o comportamento de auditoria de uma determinada instância de banco de dados. Para usar o plug-in, primeiro é preciso ativá-lo na instância do Cloud SQL.

Para ativar o plug-in cloudsql_mysql_audit, use uma das seguintes opções:

  • --cloudsql_mysql_audit=ON

    Informa ao servidor para ativar o plug-in. Se o plug-in não for inicializado, o servidor será executado com o plug-in desativado.

  • --cloudsql_mysql_audit=FORCE

    Informa ao servidor para ativar o plug-in, mas se a inicialização do plug-in falhar, o servidor não será iniciado. Em outras palavras, essa opção força o servidor a ser executado com o plug-in ativado ou não.

  • --cloudsql_mysql_audit=FORCE_PLUS_PERMANENT

    Como FORCE, mas também impede que o plug-in seja descarregado no ambiente de execução. Se um usuário tentar descarregar o plug-in com UNINSTALL PLUGIN, ocorrerá um erro.

Os estados de ativação do plug-in são visíveis na coluna PLUGIN_STATUS da tabela INFORMATION_SCHEMA.PLUGINS.

Console

  1. No console do Google Cloud, acesse a página Instâncias do Cloud SQL.

    Acesse "Instâncias do Cloud SQL"

  2. Abra a instância e clique em Editar.
  3. Role a tela para baixo até a seção Sinalizações.
  4. Para definir uma sinalização que ainda não tenha sido definida, clique em Adicionar sinalização, escolha cloudsql_mysql_audit no menu suspenso e defina o valor como ON
  5. Clique em Salvar.
  6. Confirme as alterações em Sinalizações, na página Visão geral.

gcloud

Substitua:

  • INSTANCE_NAME: o nome da instância em que você está definindo a sinalização.
gcloud sql instances patch INSTANCE_NAME \
           --database-flags cloudsql_mysql_audit=ON

Esse comando substitui todas as sinalizações do banco de dados definidas anteriormente. Para manter essas sinalizações e adicionar novas, inclua os valores de todas as que você quiser configurar na instância. Qualquer sinalização não incluída especificamente será definida com o valor padrão. Para sinalizações sem valor, especifique o nome delas seguido de um sinal de igual (=).

REST v1beta4

Antes de usar os dados da solicitação, faça as seguintes substituições:

  • project-id: o ID do projeto
  • instance-id: o ID da instância

Método HTTP e URL:

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

Corpo JSON da solicitação:

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

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

REST v1

Antes de usar os dados da solicitação, faça as seguintes substituições:

  • project-id: o ID do projeto
  • instance-id: o ID da instância

Método HTTP e URL:

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

Corpo JSON da solicitação:

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

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

Configurações do plug-in de auditoria do Cloud SQL para MySQL

É possível ajustar o comportamento do plug-in de auditoria do Cloud SQL para MySQL usando as sinalizações abaixo. Todas as sinalizações podem ser alteradas sem reiniciar o banco de dados. Para entender como gerenciar as sinalizações, consulte Como configurar sinalizações do banco de dados.

  • cloudsql_mysql_audit_data_masking_regex

    Uma expressão regular usada para o mascaramento de dados em conformidade com as Expressões regulares compatíveis Perl (PCREs, na sigla em inglês).

    Por padrão, no registro de auditoria da saída, as senhas de usuário (<psw>) são substituídas por uma máscara de senha de ***.

    O regex é aplicado apenas a instruções com um tipo de comando especificado usando cloudsql_mysql_audit_data_masking_cmds. Ao usar gcloud, é necessário usar um arquivo de sinalização para definir valores com caracteres especiais complexos.

    Valores padrão desta sinalização:

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

    Veja os exemplos a seguir.

    • Sem o cloudsql_mysql_audit_data_masking_regex, uma entrada de registro de auditoria que descreve um comando de criação de usuário seria exibida da seguinte maneira:

      {..."cmd":"create_user","query":"create user user1@'localhost' identified
      by 'pw'"}
    • Com o valor padrão cloudsql_mysql_audit_data_masking_regex, o mesmo registro de auditoria seria alterado para:

      {..."cmd":"create_user","query":"create user user1@'localhost' identified by
      '***'"}
    • Se você definir cloudsql_mysql_audit_data_masking_regex como (?<psw>.*), o Cloud SQL poderá filtrar todo o conteúdo da consulta.

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

    Lista de comandos separada por vírgulas a que o regex de mascaramento de dados (cloudsql_mysql_audit_data_masking_regex) é aplicado. Defina uma string vazia ("") para interromper a filtragem. Ao usar gcloud, é preciso utilizar um arquivo de sinalização para definir uma lista separada por vírgulas. O valor padrão inclui comandos do MySQL com a seguinte cláusula de senha:

    create_user,alter_user,grant,update
  • cloudsql_mysql_audit_max_query_length

    Controla o tamanho máximo da consulta a ser registrada no registro de auditoria. Se você não precisa ver os detalhes da consulta, use 0, o que significa que a consulta não é gravada no registro de auditoria. Isso economiza espaço de armazenamento no registro, resultando em custos mais baixos. -1 significa que não há limitação. O padrão é -1.

  • cloudsql_mysql_audit_log_write_period

    O período de gravação de registro, em que a linha de execução do gravador grava o conteúdo do buffer no disco depois de alcançar o número de milissegundos definido para essa opção de sinalização ou quando o buffer está cheio. Se você definir essa opção de sinalização como 0, a linha de execução do usuário será forçada a aguardar uma notificação da linha de execução do gravador informando que a gravação foi concluída. O padrão é 500 (milissegundos).

Console

  1. No console do Google Cloud, acesse a página Instâncias do Cloud SQL.

    Acesse "Instâncias do Cloud SQL"

  2. Abra a instância e clique em Editar.
  3. Role a tela para baixo até a seção Sinalizações.
  4. Para definir uma sinalização que ainda não tenha sido definida, clique em Adicionar sinalização, escolha uma sinalização de banco de dados na lista acima no menu suspenso e configure a sinalização.
  5. Clique em Salvar.
  6. Confirme as alterações em Sinalizações, na página Visão geral.

gcloud

Substitua:

  • INSTANCE_NAME: o nome da instância em que você está definindo a sinalização.
  • FLAG_NAME: o nome da sinalização de configuração.
  • FLAG_VALUE: o valor a ser usado para a sinalização.

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

REST v1beta4

Antes de usar os dados da solicitação, faça as seguintes substituições:

  • project-id: o ID do projeto
  • instance-id: o ID da instância

Método HTTP e URL:

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

Corpo JSON da solicitação:

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

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

REST v1

Antes de usar os dados da solicitação, faça as seguintes substituições:

  • project-id: o ID do projeto
  • instance-id: o ID da instância

Método HTTP e URL:

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

Corpo JSON da solicitação:

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

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

Configurar a auditoria do banco de dados

Gerenciar regras de auditoria

O Cloud SQL usa um conjunto de procedimentos armazenados para gerenciar as regras de auditoria do plug-in do Cloud SQL para MySQL. Há quatro procedimentos armazenados que podem ser usados para criar, listar, atualizar e excluir regras de auditoria.

Cada procedimento armazenado retorna duas variáveis: @outval e @outmsg. Essas variáveis indicam o código de status e a mensagem de erro do procedimento armazenado, respectivamente. É possível usar um asterisco (*) como caractere curinga para pesquisar nomes de usuários, hosts, bancos de dados e tabelas. Use o asterisco como sufixo, prefixo ou ambos. Além disso, só é possível usar o caractere curinga % apenas para hosts. É possível usar o crase (`) para indicar que uma string precisa ser usada literalmente. Por exemplo, `ta*ble` corresponde literalmente.

Para que as novas mudanças entrem em vigor, execute os procedimentos armazenados com o parâmetro de entrada reload_mode=1 ou chame mysql.cloudsql_reload_audit_rule(1) para que elas entrem em vigor.

Criar regras de auditoria

Use mysql.cloudsql_create_audit_rule para criar uma nova regra de auditoria.

Para criar a regra de auditoria e recarregá-la em uma chamada, use a seguinte instrução:

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

Para criar a regra e recarregá-la em uma chamada separada, use a seguinte instrução:

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

O comando anterior permite criar várias regras e recarregar todas as alterações ao mesmo tempo.

As tabelas a seguir mostram os parâmetros de entrada e saída para o comando anterior.

Parâmetros de entrada
Nome Tipo Descrição Exemplo
user@host ou user@ip string A lista separada por vírgulas de usuários do banco de dados a serem auditados. Use o formato user@host ou user@ip.

user1@localhost,
user1@*,
user1@%,
user@ip
db string A lista de bancos de dados separados por vírgulas a ser auditada. db1,db2,db3*
obj string A lista separada por vírgulas de objetos de banco de dados a serem auditados. table1,table2,table3*
ops string A lista separada por vírgulas de ações do banco de dados a serem auditadas. select,delete,insert
op_result string Auditoria bem-sucedida (S), malsucedida (U) ou ambas (B) operações bem-sucedidas e malsucedidas. S,U ou B
reload_mode Número inteiro 0 para não recarregar a regra e 1 para recarregar. 0 ou 1
Parâmetros de saída
Nome Tipo Descrição Exemplo
@outval int O código de status do procedimento armazenado. 0 para sucesso e 1 para falha.
@outmsg string A mensagem de erro do procedimento armazenado.

As regras de auditoria têm as seguintes limitações:

Limitações
Comprimento de user, db, obj e ops. O tamanho máximo é de 2048 caracteres.
Número de combinações de user, db, obj e ops. Máximo de 1.000 combinações. Por exemplo, uma regra de auditoria que audita user1,user2, db1, db2, table1,table2 e select,delete gera combinações 2 x 2 x 2 x 2 = 16.

Listar regras de auditoria

Os auditores podem usar mysql.cloudsql_list_audit_rule para listar as regras de auditoria existentes.

Para listar as regras de auditoria 1 e 2, use os seguintes comandos:

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

Para listar todas as regras de auditoria, faça o seguinte:

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

As tabelas a seguir mostram os parâmetros de entrada e saída para o comando anterior.

Parâmetros de entrada
Nome Tipo Descrição Exemplo
rule_id string A lista separada por vírgulas de IDs de regra a serem removidos. 1,2,3
Parâmetros de saída
Nome Tipo Descrição Exemplo
@outval int O código de status do procedimento armazenado. 0 para sucesso e 1 para falha.
@outmsg string A mensagem de erro do procedimento armazenado.

Atualizar regras de auditoria

Use mysql.cloudsql_update_audit_rule para atualizar uma regra de auditoria atual.

Para atualizar a regra de auditoria e recarregá-la em uma chamada, use a seguinte instrução:

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

É recomendável atualizar várias regras de auditoria em uma sessão antes de recarregar as regras. Use o procedimento armazenado a seguir para atualizar as regras em uma etapa e recarregá-las em uma etapa 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);

As tabelas a seguir mostram os parâmetros de entrada e saída para o comando anterior.

Parâmetros de entrada
Nome Tipo Descrição Exemplo
rule_id int O ID da regra a ser atualizada. 5
user@host string A lista separada por vírgulas de usuários do banco de dados a serem auditados. Use o formato user@host.

user1@localhost,user1@*
user1@%
db string A lista de bancos de dados separados por vírgulas a ser auditada. db1,db2,db3*
obj string A lista separada por vírgulas de objetos de banco de dados a serem auditados. table1,table2,table3*
ops string A lista separada por vírgulas de ações do banco de dados a serem auditadas. SELECT,DELETE,INSERT
op_result string Auditoria bem-sucedida (S), malsucedida (U) ou ambas (B) operações bem-sucedidas e malsucedidas. S,U ou B
reload_mode Número inteiro 0 para não recarregar a regra e 1 para recarregar. 0 ou 1
Parâmetros de saída
Nome Tipo Descrição Exemplo
@outval int O código de status do procedimento armazenado. 0 para sucesso e 1 para falha.
@outmsg string A mensagem de erro do procedimento armazenado.

As regras de auditoria têm as seguintes limitações:

Limitações
Comprimento de user, db, obj e ops. Tamanho máximo de 2048 caracteres.
Número de combinações de user, db, obj e ops. Máximo de 1.000 combinações. Por exemplo, uma regra de auditoria que audita user1,user2, db1, db2, table1,table2 e select,delete gera combinações 2 x 2 x 2 x 2 = 16.

Excluir regras de auditoria

Use mysql.cloudsql_delete_audit_rule para excluir uma regra de auditoria atual.

Para excluir a regra de auditoria e recarregá-la em uma chamada, use a seguinte instrução:

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

Para excluir a regra e recarregá-la em uma chamada separada, use a seguinte instrução:

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

O comando anterior permite excluir várias regras e recarregar todas as alterações ao mesmo tempo.

As tabelas a seguir mostram os parâmetros de entrada e saída para o comando anterior.

Parâmetros de entrada
Nome Tipo Descrição Exemplo
rule_id string A lista separada por vírgulas de IDs de regra a serem removidos. 1,2,3
reload_mode Número inteiro 0 para não recarregar a regra e 1 para recarregar. 0 ou 1
Parâmetros de saída
Nome Tipo Descrição Exemplo
@outval int O código de status do procedimento armazenado. 0 para sucesso e 1 para falha.
@outmsg string A mensagem de erro do procedimento armazenado.

Grupos de operação

O plug-in de auditoria do Cloud SQL para MySQL é compatível com o uso de grupos de operações em definições de regra para auditar coleções de atividades. Use os grupos de operações a seguir para simplificar a criação de regras de auditoria.

Grupos de operação Operações incluídas
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 os registros de auditoria do banco de dados do Cloud SQL

Visualizar registros de auditoria do banco de dados no Cloud Logging

Para ver os registros de auditoria do banco de dados, ative os registros de auditoria de acesso a dados do seu projeto. Os registros de auditoria do MySQL gerados para uma determinada instância são enviados para o Cloud Logging como registros de auditoria de acesso a dados. É possível ver os registros de auditoria do banco de dados MySQL gerados por meio do aplicativo Logs Explorer.

No Explorador de registros, é possível visualizar registros de auditoria do MySQL usando a consulta a seguir para mostrar todos os registros de auditoria do banco de dados MySQL de um determinado projeto do Cloud SQL por meio da interface de filtro avançado.

Substitua:

  • PROJECT_NAME: o nome dos projetos para os quais você quer fazer registros de auditoria.
    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, é possível selecionar o filtro de registro cloudaudit.googleapis.com/data_access.

Formato do registro de auditoria

Um registro de auditoria tem os campos a seguir.

Nome do campo Descrição
msgType Uma string para representar o tipo de mensagem do registro de auditoria.O único valor de msgType é activity.
status Status da operação, success ou unsuccessful.
date Timestamp que indica quando o evento de auditoria foi gerado.
threadId O ID da linha de execução do MySQL.
queryId O ID da consulta do MySQL.
user Uma string que representa o nome de usuário enviado pelo cliente. Isso pode ser diferente do valor privUser.
privUser String que representa o usuário no qual o servidor autenticou o cliente. Esse é o nome de usuário que o servidor usa para verificação de privilégios. Ele pode ser diferente do valor do usuário.
gcpIamAccount Uma string que representa a conta de IAM ou a conta de serviço do GCP.
ip Uma string que representa o endereço IP do cliente.
host Uma string que representa o nome do host do cliente.
errCode O código de erro do MySQL para uma operação sem êxito. Consulte a Referência de mensagem de erro do servidor MySQL.
cmd Uma string que indica a instrução SQL (tipo de operação) a ser usada. Por exemplo, INSERT, UPDATE, ou DELETE.
objects Os objetos de auditoria. Normalmente, uma tabela. Este campo inclui as seguintes informações sobre o objeto:

db Uma string que representa o nome padrão do banco de dados.
name Uma string que representa o nome do objeto. Normalmente, o nome da tabela.
objType String que representa o tipo do objeto. Normalmente TABLE.
query Uma instrução SQL (executada diretamente).
chunkCount Número total de blocos se o tamanho da consulta do registro de auditoria for maior que cloudsql_mysql_audit_event_split_threshold (90 mil).
chunkIndex Índice da parte. chunk_index inicia em 1.
@type O tipo é sempre type.googleapis.com/google.cloud.sql.audit.v1.MysqlAuditEntry.

Veja a seguir um exemplo de entrada de registro de auditoria.

{
"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"
}

Desativar auditoria do banco de dados

Para desativar o plug-in de auditoria do Cloud SQL para MySQL, defina a sinalização do banco de dados cloudsql_mysql_audit como DESATIVADA ou remova a sinalização.

Console

  1. No console do Google Cloud, acesse a página Instâncias do Cloud SQL.

    Acesse "Instâncias do Cloud SQL"

  2. Abra a instância e clique em Editar.
  3. Role a tela para baixo até a seção Sinalizações.
  4. Para definir uma sinalização que ainda não tenha sido definida, clique em Adicionar sinalização, escolha cloudsql_mysql_audit no menu suspenso e defina o valor como OFF
  5. Clique em Salvar.
  6. Confirme as alterações em Sinalizações, na página Visão geral.

gcloud

Substitua:

  • INSTANCE_NAME: o nome da instância em que você está definindo a sinalização.

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

REST v1beta4

Antes de usar os dados da solicitação, faça as seguintes substituições:

  • project-id: o ID do projeto
  • instance-id: o ID da instância

Método HTTP e URL:

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

Corpo JSON da solicitação:

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

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

REST v1

Antes de usar os dados da solicitação, faça as seguintes substituições:

  • project-id: o ID do projeto
  • instance-id: o ID da instância

Método HTTP e URL:

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

Corpo JSON da solicitação:

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

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

Exemplos de regras de auditoria

  1. Audite todas as atividades de todos os usuários:

    CALL mysql.cloudsql_create_audit_rule('*','*','*','*','B',1,@outval,@outmsg);
  2. Audite todas as atividades de um único usuário user1:

    CALL mysql.cloudsql_create_audit_rule('user1@*','*','*','*','B',1,@outval,@outmsg);
  3. Para auditar todas as atividades de todos os usuários, comece com user:

    CALL mysql.cloudsql_create_audit_rule('user*@*','*','*','*','B',1, @outval,@outmsg);
  4. Faça auditoria de todas as operações de DML para todos os usuários:

    CALL mysql.cloudsql_create_audit_rule('*','*','*','dml','B',1,@outval,@outmsg);
  5. Auditar a operação de seleção para um banco de dados especial db1:

    CALL mysql.cloudsql_create_audit_rule('*','db1','*','select','B',1,@outval,@outmsg);
  6. Audite todas as atividades de um banco de dados com o caractere especial db~1:

    CALL mysql.cloudsql_create_audit_rule('*','`db~1`','*','*','B',1,@outval,@outmsg);
  7. Audite as operações de seleção e exclusão da tabela db1.table1:

    CALL mysql.cloudsql_create_audit_rule('*','db1','table1','select,delete','B',1,@outval,@outmsg);
  8. Faça a auditoria de todas as operações bem-sucedidas:

    CALL mysql.cloudsql_create_audit_rule('*','*','*','*','S',1,@outval,@outmsg);
  9. Não faça a auditoria de todas as atividades de todos os usuários que começam com user:

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

Resolver problemas

Problema Solução de problemas
Não consigo ver cloudsql_mysql_audit quando invoco o comando:

SHOW (global) variables
cloudsql_mysql_audit é o nome do plug-in. Para verificar se ele está ativo, use o comando a seguir:

SHOW PLUGINS

E verifique a entrada status.
Por que não consigo ver os registros de auditoria do MySQL após ativar cloudsql_mysql_audit? Ative os registros de auditoria de acesso a dados, conforme descrito em Configurar registros de auditoria de acesso a dados. Além disso, as regras de auditoria são necessárias para o plug-in de auditoria do Cloud SQL para MySQL para auditar os registros de auditoria desejados. Use procedimentos armazenados com `reload_mode=1` para criar regras de auditoria ou execute o seguinte comando ou reinicie o banco de dados para que as regras de auditoria recém-adicionadas funcionem:

CALL mysql.cloudsql_reload_audit_rule(1)
Vejo o seguinte erro ao atualizar a sinalização do banco de dados:

Erro 1193: variável desconhecida do sistema 'cloudsql_mysql_audit_xxx'
As sinalizações cloudsql_mysql_audit_xxx só funcionam quando o plug-in de auditoria está ativo. Remova todos os existentes cloudsql_mysql_audit_xxx sinalizações da instância e, em seguida, ative o plug-in usando o seguinte comando antes de atualizar as sinalizações cloudsql_mysql_audit_xxx:

cloudsql_mysql_audit=ON
Posso ver registros de auditoria gerados mesmo que não tenha definido nenhuma regra de auditoria. As alterações nas tabelas de regras de auditoria (mysql.audit_log_rules e mysql.audit_log_rules_expanded) e nos procedimentos de auditoria armazenados (mysql.cloudsql_xxxx_audit_rule) são registradas por padrão.
Depois de fazer alterações na instância principal, não será possível ver os registros de auditoria nas instâncias de réplica. As linhas de execução de replicação e de recuperação de falha não são registradas. O Cloud SQL audita atividades na instância principal, mas não na instância da réplica.
Tentei usar o seguinte comando para definir valores de uma lista separada por vírgulas, mas não funcionou.

gcloud instances patch --database-flags
Para especificar uma lista separada por vírgulas de valores de sinalização usando os comandos gcloud, use o argumento --flags-file. Primeiro, você precisa criar um arquivo com as seguintes informações:

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

Em seguida, execute o comando:

gcloud sql instances patch --flags-file=flagfile
O seguinte comando retorna um erro:

CALL mysql.cloudsql_create_canonical_rules
Isso é intencional. mysql.cloudsql_create_canonical_rules só deve ser chamado internamente por mysql.cloudsql_create_audit_rule e mysql.cloudsql_update_audit_rule.
Quais operações posso auditar? As operações aceitas estão listadas na Lista completa de operações compatíveis. Algumas operações, como as seguintes, não são auditadas porque não afetam o banco de dados:

USE db_name


ou

SHOW VARIABLES


Além disso, em alguns casos, não é possível auditar as funções como um objeto (recursos não compatíveis).
Quero auditar todas as operações em uma tabela específica. Por isso, criei a seguinte regra de auditoria:

mysql.cloudsql_create_audit_rule("user@*","db", "table","*","B",1,@1,@2);
Mas posso ver os registros de auditoria que não estão relacionados a esta tabela, como disconnect e connect.
Algumas operações, como desconexão ou conexão, são consideradas globais. Eles ignoram os campos db e object de entrada.
Quando crio, atualize ou excluo uma regra de auditoria usando procedimentos armazenados, vejo o seguinte erro.

O servidor MySQL está em execução com a opção read-only e não pode executar esta instrução.
O Cloud SQL não pode alterar procedimentos armazenados em uma instância somente leitura. Se a instância for primária, remova as sinalizações read_only. Se a instância for uma instância de réplica, faça as alterações na instância primária. Depois que as alterações das regras forem replicadas para a instância da réplica, execute o seguinte comando na instância da réplica para recarregar as regras na réplica:
CALL mysql.cloudsql_reload_audit_rule(1)
Quando crio, atualize ou excluo uma regra de auditoria, ocorre o seguinte erro, mesmo que a alteração tenha sido bem-sucedida.

0 rows affected
A resposta 0 rows affected é para a última instrução executada no procedimento armazenado, não para as tabelas. Para ver se a regra de auditoria foi alterada, use o seguinte comando:

mysql.cloudsql_list_audit_rule
Não consigo definir cloudsql_mysql_audit_data_masking_cmds e cloudsql_mysql_audit_data_masking_regexp com gcloud. gcloud requer o uso do argumento --flags-file para definir valores de sinalização complexos (as sinalizações que incluem caracteres especiais).
Criei um procedimento armazenado usando a instrução CREATE USER, mas a senha não é mascarada. Por padrão, o mascaramento só funciona para cmds (operações), como as seguintes:

CREATE_USER, ALTER_USER, GRANT, UPDATE.

Para filtrar a senha ao criar o procedimento armazenado, adicione create_procedure a cloudsql_mysql_audit_data_masking_cmds.
Recebi um erro de tempo limite de espera bloqueado ao tentar criar, atualizar ou excluir regras de auditoria. Normalmente, esse erro é causado quando duas ou mais sessões tentam modificar as regras de auditoria ao mesmo tempo. Se isso acontecer com frequência, aumente o valor da variável innodb_lock_wait_timeout. Ele pode ser aumentado globalmente (usando a sinalização do banco de dados) ou apenas para a sessão, por exemplo, usando o seguinte comando:
SET innodb_lock_wait_timeout=120
.

A seguir