Use auditoria de banco de dados MySQL

Este tópico descreve como habilitar e usar o plugin de auditoria do Cloud SQL para MySQL. Para uma visão geral, consulte Auditoria de banco de dados MySQL . Para obter mais informações sobre plugins do MySQL, consulte Carregamento de plugins do MySQL .

Antes de começar

Registros de auditoria de acesso a dados

Habilite e configure logs de auditoria de acesso a dados. Consulte Configurar logs de auditoria de acesso a dados .

Privilégios necessários para usuários de auditoria

Você precisa ter privilégios EXECUTE nos procedimentos armazenados de auditoria para executá-los. Se um administrador precisar alterar os privilégios de acesso de um auditor aos procedimentos armazenados de auditoria, ele deverá usar o comando GRANT ou REVOKE no cliente mysql . Para obter detalhes sobre os privilégios de usuário, consulte Privilégios de usuário do MySQL . Por exemplo, se um administrador quisesse conceder acesso a um auditor chamado user para gerenciar as regras de auditoria, ele poderia 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 posteriormente quisesse revogar o acesso ao auditor, ele poderia 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 que têm todos os privilégios, exceto FILE e SUPER , incluindo todos os privilégios para os procedimentos armazenados de auditoria. Usuários do banco de dados do IAM, por padrão, não têm privilégios.

Habilitar o plugin de auditoria do Cloud SQL para MySQL

O plugin 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 plugin, você precisa primeiro habilitá-lo na instância do Cloud SQL.

Para habilitar o plugin cloudsql_mysql_audit , use uma das seguintes opções:

  • --cloudsql_mysql_audit=ON

    Informa ao servidor para habilitar o plugin. Se o plugin não inicializar, o servidor será executado com o plugin desabilitado.

  • --cloudsql_mysql_audit=FORCE

    Informa ao servidor para habilitar o plugin, mas se a inicialização do plugin falhar, o servidor não inicia. Em outras palavras, esta opção força o servidor a executar com o plugin habilitado ou não executar.

  • --cloudsql_mysql_audit=FORCE_PLUS_PERMANENT

    Semelhante ao FORCE, mas também impede que o plugin seja descarregado em tempo de execução. Se um usuário tentar descarregar o plugin com UNINSTALL PLUGIN , ocorrerá um erro.

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

Console

  1. No Google Cloud console, 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 para baixo até a seção Bandeiras .
  4. Para definir um sinalizador que não foi definido na instância antes, clique em Adicionar sinalizador , escolha cloudsql_mysql_audit no menu suspenso e defina seu valor como ON .
  5. Clique em Salvar para salvar suas alterações.
  6. Confirme suas alterações em Sinalizadores na página Visão geral .

gcloud

Substitua o seguinte:

  • INSTANCE_NAME : O nome da instância na qual você está definindo o sinalizador.
gcloud sql instances patch INSTANCE_NAME \
           --database-flags cloudsql_mysql_audit=ON

Este comando substitui todos os sinalizadores do banco de dados definidos anteriormente. Para mantê-los e adicionar novos, inclua os valores de todos os sinalizadores que deseja definir na instância; qualquer sinalizador não incluído especificamente é definido com seu valor padrão. Para sinalizadores que não aceitam um valor, especifique o nome do sinalizador seguido por um sinal de igual ( = ).

REST v1beta4

Antes de usar qualquer um dos dados solicitados, 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 sua solicitação, expanda uma destas opções:

Você deve receber uma resposta JSON semelhante à seguinte:

REST v1

Antes de usar qualquer um dos dados solicitados, 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 sua solicitação, expanda uma destas opções:

Você deve receber uma resposta JSON semelhante à seguinte:

Configurações do plugin de auditoria do Cloud SQL para MySQL

Você pode ajustar o comportamento do plugin de auditoria do Cloud SQL para MySQL usando os sinalizadores abaixo. Todos os sinalizadores podem ser alterados sem reiniciar o banco de dados. Para entender como gerenciar os sinalizadores, consulte Configurando sinalizadores de banco de dados .

  • cloudsql_mysql_audit_data_masking_regex

    Uma expressão regular usada para mascaramento de dados que é compatível com Perl Compatible Regular Expressions (PCREs).

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

    A expressão regular é aplicada apenas a instruções com um tipo de comando especificado usando cloudsql_mysql_audit_data_masking_cmds . Ao usar gcloud você deve usar um arquivo de sinalizadores para definir valores com caracteres especiais complexos.

    Valores padrão para este sinalizador:

    
    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 log de auditoria descrevendo 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 de cloudsql_mysql_audit_data_masking_regex , o mesmo log 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 separados por vírgulas aos quais a expressão regular de mascaramento de dados ( cloudsql_mysql_audit_data_masking_regex ) é aplicada. Defina uma string vazia ( "" ) para interromper a filtragem. Ao usar gcloud , você deve usar um arquivo de sinalizadores para definir uma lista separada por vírgulas. O valor padrão inclui comandos MySQL com a seguinte cláusula de senha:

    create_user,alter_user,grant,update
  • cloudsql_mysql_audit_max_query_length

    Controla o comprimento máximo da consulta a ser registrada no log de auditoria. Se você não precisar ver os detalhes da consulta, pode usar 0 , o que significa que a consulta não será registrada no log de auditoria. Isso economiza espaço de armazenamento para o log, resultando em menor custo. -1 significa sem limitação. O padrão é -1 .

  • cloudsql_mysql_audit_log_write_period

    O período de gravação do log, durante o qual a thread de gravação grava o conteúdo do buffer no disco após atingir o número de milissegundos definido para esta opção de sinalização, ou quando o buffer estiver cheio. Se você definir esta opção de sinalização como 0 , a thread do usuário será forçada a aguardar uma notificação da thread de gravação informando que a gravação foi concluída. O padrão é 500 (milissegundos).

Console

  1. No Google Cloud console, 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 para baixo até a seção Bandeiras .
  4. Para definir um sinalizador que não foi definido na instância antes, clique em Adicionar sinalizador , escolha um sinalizador de banco de dados na lista acima no menu suspenso e defina seu valor.
  5. Clique em Salvar para salvar suas alterações.
  6. Confirme suas alterações em Sinalizadores na página Visão geral .

gcloud

Substitua o seguinte:

  • INSTANCE_NAME : O nome da instância na qual você está definindo o sinalizador.
  • FLAG_NAME : O nome do sinalizador de configuração.
  • FLAG_VALUE : O valor a ser usado para o sinalizador.

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

REST v1beta4

Antes de usar qualquer um dos dados solicitados, 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 sua solicitação, expanda uma destas opções:

Você deve receber uma resposta JSON semelhante à seguinte:

REST v1

Antes de usar qualquer um dos dados solicitados, 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 sua solicitação, expanda uma destas opções:

Você deve receber uma resposta JSON semelhante à seguinte:

Configurar auditoria de banco de dados

Gerenciar regras de auditoria

O Cloud SQL usa um conjunto de procedimentos armazenados para gerenciar as regras de auditoria do Cloud SQL para MySQL Audit Plugin. Há quatro procedimentos armazenados que você pode usar 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. Você pode usar um asterisco ( * ) como curinga para pesquisar nomes de usuário, host, banco de dados e tabela. Use o asterisco como sufixo, prefixo ou ambos. Além disso, você pode usar o caractere curinga % apenas para hosts. Você pode usar o acento grave ( ` ) para indicar que uma string deve ser usada literalmente. Por exemplo, `ta*ble` corresponde literalmente.

Para que as novas alterações entrem em vigor, você deve executar os procedimentos armazenados com o parâmetro de entrada reload_mode=1 ou chamar mysql.cloudsql_reload_audit_rule(1) para que as novas alterações entrem em vigor.

Criar regras de auditoria

Você pode usar 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 que você crie várias regras e recarregue todas as alterações ao mesmo tempo.

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

Parâmetros de entrada
Nome Tipo Descrição Exemplo
user@host ou user@ip corda 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 corda A lista separada por vírgulas de bancos de dados a serem auditados. db1,db2,db3*
obj corda A lista separada por vírgulas de objetos de banco de dados a serem auditados. table1,table2,table3*
ops corda A lista separada por vírgulas de ações do banco de dados a serem auditadas. select,delete,insert
op_result corda Auditoria bem-sucedida (S), malsucedida (U) ou ambas (B) operações bem-sucedidas e malsucedidas. S , U ou B
reload_mode 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 fracasso.
@outmsg corda 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 é 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 2 x 2 x 2 x 2 = 16 combinações.

Listar regras de auditoria

Os auditores podem usar mysql.cloudsql_list_audit_rule para listar 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 do comando anterior.

Parâmetros de entrada
Nome Tipo Descrição Exemplo
rule_id corda A lista separada por vírgulas de IDs de regras a serem removidas. 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 fracasso.
@outmsg corda A mensagem de erro do procedimento armazenado.

Atualizar regras de auditoria

Você pode usar mysql.cloudsql_update_audit_rule para atualizar uma regra de auditoria existente.

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;

Talvez você queira atualizar várias regras de auditoria em uma sessão antes de recarregá-las. Você pode usar o seguinte procedimento armazenado 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 do comando anterior.

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

user1@localhost,user1@*
user1@%
db corda A lista separada por vírgulas de bancos de dados a serem auditados. db1,db2,db3*
obj corda A lista separada por vírgulas de objetos de banco de dados a serem auditados. table1,table2,table3*
ops corda A lista separada por vírgulas de ações do banco de dados a serem auditadas. SELECT,DELETE,INSERT
op_result corda Sucesso de auditoria (S), malsucedido (U) ou ambos (B) operações bem-sucedidas e malsucedidas. S , U ou B
reload_mode 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 fracasso.
@outmsg corda 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 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 2 x 2 x 2 x 2 = 16 combinações.

Excluir regras de auditoria

Você pode usar mysql.cloudsql_delete_audit_rule para excluir uma regra de auditoria existente.

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 que você exclua várias regras e recarregue todas as alterações ao mesmo tempo.

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

Parâmetros de entrada
Nome Tipo Descrição Exemplo
rule_id corda A lista separada por vírgulas de IDs de regras a serem removidas. 1,2,3
reload_mode 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 fracasso.
@outmsg corda A mensagem de erro do procedimento armazenado.

Grupos de operação

O plugin de auditoria do Cloud SQL para MySQL oferece suporte ao uso de grupos de operações em definições de regras para auditar coleções de atividades. Você pode usar os seguintes grupos de operações 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

Exibir logs de auditoria do banco de dados Cloud SQL

Visualizar registros de log de auditoria de banco de dados no Cloud Logging

Para visualizar os logs de auditoria do banco de dados, primeiro certifique-se de ter habilitado os logs de auditoria de acesso a dados para o seu projeto. Os logs de auditoria do MySQL gerados para uma determinada instância são enviados ao Cloud Logging como logs de auditoria de acesso a dados . Você pode visualizar os logs de auditoria do banco de dados MySQL gerados por meio do aplicativo Logs Explorer .

No Logs Explorer, você pode visualizar logs de auditoria do MySQL usando a seguinte consulta para mostrar todos os logs de auditoria do banco de dados MySQL para um determinado projeto do Cloud SQL por meio da interface de Filtro avançado.

Substitua o seguinte:

  • PROJECT_NAME : O nome do projeto para o qual você deseja logs 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, você pode selecionar o filtro de log cloudaudit.googleapis.com/data_access .

Formato de Log de Auditoria

Um log de auditoria tem os seguintes campos.

Nome do campo Descrição
msgType Uma string para representar o tipo de mensagem do log de auditoria. O único valor para msgType é activity .
status Status da operação: bem- success ou unsuccessful .
date Um registro de data e hora indicando quando o evento de auditoria foi gerado.
threadId O ID do thread do MySQL.
queryId O ID da consulta MySQL.
user Uma string que representa o nome de usuário enviado pelo cliente. Pode ser diferente do valor privUser.
privUser Uma string que representa o usuário com o qual o servidor autenticou o cliente. Este é o nome de usuário que o servidor usa para verificação de privilégios. Pode ser diferente do valor do usuário.
gcpIamAccount Uma string que representa a conta do 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 malsucedida. Consulte a Referência de Mensagens 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 Uma 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 log de auditoria for maior que o cloudsql_mysql_audit_event_split_threshold (90 k).
chunkIndex Índice do bloco. chunk_index começa em 1.
@type O tipo é sempre type.googleapis.com/google.cloud.sql.audit.v1.MysqlAuditEntry .

A seguir está um exemplo de entrada de log 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 de banco de dados

Para desabilitar o Cloud SQL para MySQL Audit Plugin, você pode definir o sinalizador de banco de dados cloudsql_mysql_audit como OFF ou remover o sinalizador.

Console

  1. No Google Cloud console, 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 para baixo até a seção Bandeiras .
  4. Para definir um sinalizador que não foi definido na instância antes, clique em Adicionar sinalizador , escolha cloudsql_mysql_audit no menu suspenso e defina seu valor como OFF .
  5. Clique em Salvar para salvar suas alterações.
  6. Confirme suas alterações em Sinalizadores na página Visão geral .

gcloud

Substitua o seguinte:

  • INSTANCE_NAME : O nome da instância na qual você está definindo o sinalizador.

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

REST v1beta4

Antes de usar qualquer um dos dados solicitados, 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 sua solicitação, expanda uma destas opções:

Você deve receber uma resposta JSON semelhante à seguinte:

REST v1

Antes de usar qualquer um dos dados solicitados, 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 sua solicitação, expanda uma destas opções:

Você deve receber uma resposta JSON semelhante à seguinte:

Exemplos de regras de auditoria

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

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

    CALL mysql.cloudsql_create_audit_rule('user1@*','*','*','*','B',1,@outval,@outmsg);
  3. Auditar todas as atividades para todos os usuários que começam com user :

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

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

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

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

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

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

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

Solução de problemas

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

SHOW (global) variables
cloudsql_mysql_audit é o nome do plugin. Para verificar se ele está ativo, use o seguinte comando:

SHOW PLUGINS

E verifique a entrada status .
Por que não consigo ver os logs de auditoria do MySQL depois de habilitar cloudsql_mysql_audit ? Você deve habilitar os logs de auditoria de acesso a dados (conforme descrito em Configurar logs de auditoria de acesso a dados) . Além disso, as regras de auditoria são necessárias para que o plug-in de auditoria do Cloud SQL para MySQL audite os logs 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 o sinalizador do banco de dados:

Erro 1193: Variável de sistema desconhecida 'cloudsql_mysql_audit_xxx'
As flags cloudsql_mysql_audit_xxx só funcionam quando o plugin de auditoria está ativo. Remova todas as flags cloudsql_mysql_audit_xxx existentes da instância e ative o plugin usando o seguinte comando antes de atualizar as flags cloudsql_mysql_audit_xxx :

cloudsql_mysql_audit=ON
Posso ver logs de auditoria gerados mesmo que eu não tenha definido nenhuma regra de auditoria. Alterações nas tabelas de regras de auditoria ( mysql.audit_log_rules e mysql.audit_log_rules_expanded ) e procedimentos armazenados de auditoria ( mysql.cloudsql_xxxx_audit_rule ) são registradas por padrão.
Depois de fazer alterações na instância primária, não consigo ver os logs de auditoria nas minhas instâncias de réplica. Os threads de replicação e de recuperação de falhas não são registrados. O Cloud SQL audita as atividades na instância primária, mas não na instância de réplica.
Tentei usar o seguinte comando para definir valores de uma lista separada por vírgulas, mas não funciona.

gcloud instances patch --database-flags
Se estiver especificando uma lista de valores de sinalizadores separados por vírgulas usando 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 seguinte comando:

gcloud sql instances patch --flags-file=flagfile
O comando a seguir 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 suportadas estão listadas na Lista completa de operações suportadas . Algumas operações, como as seguintes, não são auditadas, pois não afetam o banco de dados:

USE db_name


ou

SHOW VARIABLES


Além disso, em alguns casos, as funções não podem ser auditadas como um objeto (recursos não suportados).
Quero auditar todas as operações em uma tabela específica, então criei a seguinte regra de auditoria:

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

O servidor MySQL está sendo executado com a opção read-only portanto, 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 os sinalizadores read_only . Se a instância for uma réplica, faça as alterações na instância primária. Após as alterações das regras serem replicadas para a instância réplica, execute o seguinte comando na instância réplica para recarregar as regras na réplica:
CALL mysql.cloudsql_reload_audit_rule(1)
Quando crio, atualizo ou excluo uma regra de auditoria, vejo o seguinte erro, mesmo que a alteração tenha sido bem-sucedida.

0 rows affected
A resposta 0 rows affected refere-se à última instrução executada no procedimento armazenado, não às tabelas. Para verificar 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 sinalizadores complexos (os sinalizadores que incluem caracteres especiais).
Criei um procedimento armazenado usando a instrução CREATE USER , mas a senha não está mascarada. Por padrão, o mascaramento só funciona para cmds (operações), como os seguintes:

CREATE_USER , ALTER_USER , GRANT , UPDATE .

Para filtrar a senha ao criar o procedimento armazenado, adicione create_procedure ao cloudsql_mysql_audit_data_masking_cmds .
Recebi um erro de tempo limite de espera de bloqueio excedido 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 . Ela pode ser aumentada globalmente (usando o sinalizador do banco de dados) ou apenas para a sessão, por exemplo, usando o seguinte comando:
SET innodb_lock_wait_timeout=120
.

O que vem a seguir