Use a auditoria da base de dados MySQL

Este tópico descreve como ativar e usar o plug-in de auditoria do Cloud SQL para MySQL. Para uma vista geral, consulte o artigo Auditoria da base de dados MySQL. Para mais informações sobre os plug-ins do MySQL, consulte o artigo Carregamento de plug-ins do MySQL.

Antes de começar

Registos de auditoria de acesso a dados

Ative e configure os registos de auditoria de acesso a dados. Consulte o artigo Configure os registos de auditoria de acesso aos dados.

Privilégios necessários para utilizadores de auditoria

Tem de ter privilégios EXECUTE nos procedimentos armazenados de auditoria para os executar. Se um administrador precisar de alterar os privilégios de acesso de um auditor aos procedimentos armazenados de auditoria, deve usar o comando GRANT ou REVOKE no cliente mysql. Para ver detalhes sobre os privilégios do utilizador, consulte o artigo Privilégios do utilizador do MySQL. Por exemplo, se um administrador quiser conceder acesso a um auditor denominado user para gerir as regras de auditoria, pode conceder os privilégios através da seguinte declaraçã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 mais tarde, pode revogar os privilégios através da seguinte declaração:

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

Por predefinição, os utilizadores criados através do Cloud SQL (exceto os utilizadores 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. Por predefinição, os utilizadores da base de dados do IAM não têm privilégios.

Ative 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 para uma determinada instância da base de dados. Para usar o plugin, tem de o ativar primeiro na instância do Cloud SQL.

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

  • --cloudsql_mysql_audit=ON

    Indica ao servidor que ative o plug-in. Se o plug-in não for inicializado, o servidor é executado com o plug-in desativado.

  • --cloudsql_mysql_audit=FORCE

    Indica ao servidor que ative o plug-in, mas, se a inicialização do plug-in falhar, o servidor não é iniciado. Por outras palavras, esta opção força o servidor a ser executado com o plug-in ativado ou não.

  • --cloudsql_mysql_audit=FORCE_PLUS_PERMANENT

    Semelhante a FORCE, mas também impede que o plugin seja descarregado em tempo de execução. Se um utilizador tentar descarregar o plugin com UNINSTALL PLUGIN, ocorre um erro.

Os estados de ativação dos plug-ins estão visíveis na coluna PLUGIN_STATUS da tabela INFORMATION_SCHEMA.PLUGINS.

Consola

  1. Na Google Cloud consola, aceda à página Instâncias do Cloud SQL.

    Aceda a Instâncias do Cloud SQL

  2. Abra a instância e clique em Editar.
  3. Desloque a página para baixo até à secção Flags.
  4. Para definir uma flag que não tenha sido definida na instância anteriormente, clique em Adicionar flag, escolha cloudsql_mysql_audit no menu pendente e defina o respetivo valor como ON.
  5. Clique em Guardar para guardar as alterações.
  6. Confirme as alterações em Sinalizações na página Vista geral.

gcloud

Substitua o seguinte:

  • INSTANCE_NAME: O nome da instância em que está a definir o sinalizador.
gcloud sql instances patch INSTANCE_NAME \
           --database-flags cloudsql_mysql_audit=ON

Este comando substitui todas as flags da base de dados definidas anteriormente. Para manter esses valores e adicionar novos, inclua os valores de todas as flags que quer definir na instância de ; qualquer flag não incluída especificamente é definida para o respetivo valor predefinido. Para as flags que não aceitam um valor, especifique o nome da flag seguido de um sinal de igual (=).

REST v1beta4

Antes de usar qualquer um dos dados do pedido, 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 do pedido:

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

Para enviar o seu pedido, expanda uma destas opções:

Deve receber uma resposta JSON semelhante à seguinte:

REST v1

Antes de usar qualquer um dos dados do pedido, 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 do pedido:

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

Para enviar o seu pedido, expanda uma destas opções:

Deve receber uma resposta JSON semelhante à seguinte:

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

Pode ajustar o comportamento do plug-in de auditoria do Cloud SQL para MySQL através das flags abaixo. Todas as flags podem ser alteradas sem reiniciar a base de dados. Para saber como gerir as flags, consulte o artigo Configurar flags da base de dados.

  • cloudsql_mysql_audit_data_masking_regex

    Uma expressão regular usada para ocultação de dados que está em conformidade com as expressões regulares compatíveis com Perl (PCREs).

    Por predefinição, no registo de auditoria de saída, as palavras-passe dos utilizadores (<psw>) são substituídas por uma máscara de palavra-passe de ***.

    A regex é aplicada apenas a declarações com um tipo de comando especificado através de cloudsql_mysql_audit_data_masking_cmds. Quando usar gcloud, tem de usar um ficheiro de flags para definir valores com carateres especiais complexos.

    Valores predefinidos para esta flag:

    
    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 seguintes.

    • Sem o cloudsql_mysql_audit_data_masking_regex, uma entrada do registo de auditoria que descreve um comando de criação de utilizador seria apresentada da seguinte forma:

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

      {..."cmd":"create_user","query":"create user user1@'localhost' identified by
      '***'"}
    • Se definir cloudsql_mysql_audit_data_masking_regex como (?<psw>.*), o Cloud SQL pode 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 regex de ocultação de dados (cloudsql_mysql_audit_data_masking_regex) é aplicada. Defina uma string vazia ("") para parar a filtragem. Quando usar gcloud, tem de usar um ficheiro de sinalização para definir uma lista separada por vírgulas. O valor predefinido inclui comandos MySQL com a seguinte cláusula de palavra-passe:

    create_user,alter_user,grant,update
  • cloudsql_mysql_audit_max_query_length

    Controla o comprimento máximo da consulta a registar no registo de auditoria. Se não precisar de ver os detalhes da consulta, pode usar 0, o que significa que a consulta não é registada no registo de auditoria. Isto poupa espaço de armazenamento para o registo, o que resulta num custo inferior. -1 significa que não existe nenhuma limitação. A predefinição é -1.

  • cloudsql_mysql_audit_log_write_period

    O período de escrita do registo, para o qual o segmento de escrita escreve o conteúdo do buffer no disco após atingir o número de milissegundos que definiu para esta opção de flag ou quando o buffer está cheio. Se definir esta opção de sinalização como 0, a thread do utilizador é forçada a aguardar uma notificação da thread do escritor de que a escrita foi concluída. A predefinição é 500 (milissegundos).

Consola

  1. Na Google Cloud consola, aceda à página Instâncias do Cloud SQL.

    Aceda a Instâncias do Cloud SQL

  2. Abra a instância e clique em Editar.
  3. Desloque a página para baixo até à secção Flags.
  4. Para definir uma flag que não tenha sido definida na instância anteriormente, clique em Adicionar flag, escolha uma flag da base de dados na lista acima no menu pendente e defina o respetivo valor.
  5. Clique em Guardar para guardar as alterações.
  6. Confirme as alterações em Sinalizações na página Vista geral.

gcloud

Substitua o seguinte:

  • INSTANCE_NAME: o nome da instância em que está a definir a flag.
  • FLAG_NAME: o nome do sinalizador de configuração.
  • FLAG_VALUE: o valor a usar para a flag.

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

REST v1beta4

Antes de usar qualquer um dos dados do pedido, 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 do pedido:

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

Para enviar o seu pedido, expanda uma destas opções:

Deve receber uma resposta JSON semelhante à seguinte:

REST v1

Antes de usar qualquer um dos dados do pedido, 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 do pedido:

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

Para enviar o seu pedido, expanda uma destas opções:

Deve receber uma resposta JSON semelhante à seguinte:

Configure a auditoria da base de dados

Faça a gestão de regras de auditoria

O Cloud SQL usa um conjunto de procedimentos armazenados para gerir as regras de auditoria do plug-in de auditoria do Cloud SQL para MySQL. Existem quatro procedimentos armazenados que pode usar para criar, listar, atualizar e eliminar regras de auditoria.

Cada procedimento armazenado devolve duas variáveis: @outval e @outmsg. Estas variáveis indicam o código de estado e a mensagem de erro do procedimento armazenado, respetivamente. Pode usar um asterisco (*) como caráter universal para pesquisar nomes de utilizadores, anfitriões, bases de dados e tabelas. Use o asterisco como sufixo, prefixo ou ambos. Além disso, pode usar o caráter universal % apenas para anfitriões. 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, 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.

Crie regras de auditoria

Pode usar mysql.cloudsql_create_audit_rule para criar uma nova regra de auditoria.

Para criar a regra de auditoria e recarregá-la numa única chamada, use a seguinte declaraçã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 numa chamada separada, use a seguinte declaraçã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-lhe criar várias regras e, em seguida, recarregar todas as alterações ao mesmo tempo.

As tabelas seguintes 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 de string A lista de utilizadores da base de dados a auditar, separada por vírgulas. Use o formato user@host ou user@ip.

user1@localhost,
user1@*,
user1@%,
user@ip
db de string A lista de bases de dados a auditar separada por vírgulas. db1,db2,db3*
obj de string A lista separada por vírgulas de objetos da base de dados a auditar. table1,table2,table3*
ops de string A lista separada por vírgulas de ações da base de dados a auditar. select,delete,insert
op_result de string Êxito (S), falha (U) ou ambos (B) de operações de auditoria. 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 estado do procedimento armazenado. 0 para êxito e 1 para falha.
@outmsg de string A mensagem de erro do procedimento armazenado.

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

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

Liste as regras de auditoria

Os auditores podem usar o 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 apresentar uma lista de todas as regras de auditoria, faça o seguinte:

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

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

Parâmetros de entrada
Nome Tipo Descrição Exemplo
rule_id de string A lista de IDs de regras separados por vírgulas a remover. 1,2,3
Parâmetros de saída
Nome Tipo Descrição Exemplo
@outval int O código de estado do procedimento armazenado. 0 para êxito e 1 para falha.
@outmsg de string A mensagem de erro do procedimento armazenado.

Atualize as regras de auditoria

Pode usar mysql.cloudsql_update_audit_rule para atualizar uma regra de auditoria existente.

Para atualizar a regra de auditoria e recarregá-la numa única chamada, use a seguinte declaração:

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

Pode querer atualizar várias regras de auditoria numa sessão antes de recarregar as regras. Pode usar o seguinte procedimento armazenado para atualizar as regras num passo e, em seguida, recarregar essas regras num passo 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 seguintes 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 atualizar. 5
user@host de string A lista de utilizadores da base de dados a auditar, separada por vírgulas. Use o formato user@host.

user1@localhost,user1@*
user1@%
db de string A lista de bases de dados a auditar separada por vírgulas. db1,db2,db3*
obj de string A lista separada por vírgulas de objetos da base de dados a auditar. table1,table2,table3*
ops de string A lista separada por vírgulas de ações da base de dados a auditar. SELECT,DELETE,INSERT
op_result de string Êxito (S), sem êxito (U) ou ambos (B) das operações de auditoria. 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 estado do procedimento armazenado. 0 para êxito e 1 para falha.
@outmsg de string A mensagem de erro do procedimento armazenado.

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

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

Elimine regras de auditoria

Pode usar o ícone mysql.cloudsql_delete_audit_rule para eliminar uma regra de auditoria existente.

Para eliminar a regra de auditoria e recarregá-la numa única chamada, use a seguinte declaração:

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

Para eliminar a regra e recarregá-la numa chamada separada, use a seguinte declaraçã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-lhe eliminar várias regras e, em seguida, recarregar todas as alterações em simultâneo.

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

Parâmetros de entrada
Nome Tipo Descrição Exemplo
rule_id de string A lista de IDs de regras separados por vírgulas a remover. 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 estado do procedimento armazenado. 0 para êxito e 1 para falha.
@outmsg de string A mensagem de erro do procedimento armazenado.

Grupos de operações

O plug-in de auditoria do Cloud SQL para MySQL suporta a utilização de grupos de operações em definições de regras para auditar coleções de atividades. Pode usar os seguintes grupos de operações para simplificar a criação de regras de auditoria.

Grupos de operações 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

Veja os registos de auditoria da base de dados do Cloud SQL

Veja registos de auditoria da base de dados no Cloud Logging

Para ver os registos de auditoria da base de dados, certifique-se primeiro de que ativou os registos de auditoria de acesso a dados para o seu projeto. Os registos de auditoria do MySQL gerados para uma determinada instância são enviados para o Cloud Logging como registos de auditoria de acesso aos dados. Pode ver os registos de auditoria da base de dados MySQL gerados através da aplicação Explorador de registos.

No Explorador de registos, pode ver os registos de auditoria do MySQL através da seguinte consulta para mostrar todos os registos de auditoria da base de dados MySQL para um determinado projeto do Cloud SQL através da interface de filtro avançado.

Substitua o seguinte:

  • PROJECT_NAME: o nome do projeto para o qual quer registos 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"

Em alternativa, pode selecionar o filtro de registo cloudaudit.googleapis.com/data_access.

Formato do registo de auditoria

Um registo de auditoria tem os seguintes campos.

Nome do campo Descrição
msgType Uma string para representar o tipo de mensagem do registo de auditoria.O único valor para msgType é activity.
status Estado da operação, success ou unsuccessful.
date Uma data/hora que indica quando o evento de auditoria foi gerado.
threadId O ID da discussão do MySQL.
queryId O ID da consulta do MySQL.
user Uma string que representa o nome de utilizador enviado pelo cliente. Este valor pode ser diferente do valor privUser.
privUser Uma string que representa o utilizador como o qual o servidor autenticou o cliente. Este é o nome de utilizador que o servidor usa para verificar os privilégios. Pode ser diferente do valor do utilizador.
gcpIamAccount Uma string que representa a conta de serviço ou a conta de IAM da GCP.
ip Uma string que representa o endereço IP do cliente.
host Uma string que representa o nome do anfitrião do cliente.
errCode O código de erro do MySQL para uma operação sem êxito. Consulte a referência de mensagens de erro do servidor MySQL.
cmd Uma string que indica a declaração SQL (tipo de operação) a usar. 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 da base de dados predefinida.
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 declaração SQL (executada diretamente).
chunkCount Número total de blocos se o tamanho da consulta do registo de auditoria for superior a cloudsql_mysql_audit_event_split_threshold (90 000).
chunkIndex Índice do fragmento. chunk_index começa em 1.
@type O tipo é sempre type.googleapis.com/google.cloud.sql.audit.v1.MysqlAuditEntry.

Segue-se um exemplo de uma entrada do registo 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"
}

Desative a auditoria da base de dados

Para desativar o plug-in de auditoria do Cloud SQL para MySQL, pode definir a flag da base de dados cloudsql_mysql_audit como OFF ou remover a flag.

Consola

  1. Na Google Cloud consola, aceda à página Instâncias do Cloud SQL.

    Aceda a Instâncias do Cloud SQL

  2. Abra a instância e clique em Editar.
  3. Desloque a página para baixo até à secção Flags.
  4. Para definir uma flag que não tenha sido definida na instância anteriormente, clique em Adicionar flag, escolha cloudsql_mysql_audit no menu pendente e defina o respetivo valor como OFF.
  5. Clique em Guardar para guardar as alterações.
  6. Confirme as alterações em Flags na página Vista geral.

gcloud

Substitua o seguinte:

  • INSTANCE_NAME: o nome da instância em que está a definir a flag.

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

REST v1beta4

Antes de usar qualquer um dos dados do pedido, 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 do pedido:

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

Para enviar o seu pedido, expanda uma destas opções:

Deve receber uma resposta JSON semelhante à seguinte:

REST v1

Antes de usar qualquer um dos dados do pedido, 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 do pedido:

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

Para enviar o seu pedido, expanda uma destas opções:

Deve receber uma resposta JSON semelhante à seguinte:

Exemplos de regras de auditoria

  1. Audite todas as atividades de todos os utilizadores:

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

    CALL mysql.cloudsql_create_audit_rule('user1@*','*','*','*','B',1,@outval,@outmsg);
  3. Audite todas as atividades de todos os utilizadores que começam com user:

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

    CALL mysql.cloudsql_create_audit_rule('*','*','*','dml','B',1,@outval,@outmsg);
  5. Auditoria da operação de seleção para uma base de dados especial db1:

    CALL mysql.cloudsql_create_audit_rule('*','db1','*','select','B',1,@outval,@outmsg);
  6. Audite todas as atividades de uma base de dados com o caráter especial db~1:

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

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

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

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

Resolver problemas

Problema Resoluçã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 está ativo, use o seguinte comando:

SHOW PLUGINS

E verifique a entrada status.
Por que motivo não consigo ver os registos de auditoria do MySQL depois de ativar o cloudsql_mysql_audit? Tem de ativar os registos de auditoria de acesso a dados (conforme descrito em Configure os registos de auditoria de acesso a dados. Além disso, são necessárias regras de auditoria para que o plug-in de auditoria do Cloud SQL para MySQL audite os registos de auditoria pretendidos. Use procedimentos armazenados com `reload_mode=1` para criar regras de auditoria ou execute o seguinte comando ou reinicie a base de dados para que as regras de auditoria adicionadas recentemente funcionem:

CALL mysql.cloudsql_reload_audit_rule(1)
Vejo o seguinte erro ao atualizar a flag da base de dados:

Erro 1193: variável de sistema desconhecida 'cloudsql_mysql_audit_xxx'
As flags cloudsql_mysql_audit_xxxsó funcionam quando o plug-in de auditoria está ativo. Remova todas as flags cloudsql_mysql_audit_xxx existentes da instância e, em seguida, ative o plug-in com o seguinte comando antes de atualizar as flags cloudsql_mysql_audit_xxx:

cloudsql_mysql_audit=ON
Posso ver registos de auditoria gerados, apesar de não ter definido regras de auditoria. As alterações às tabelas de regras de auditoria (mysql.audit_log_rules e mysql.audit_log_rules_expanded) e aos procedimentos armazenados de auditoria (mysql.cloudsql_xxxx_audit_rule) são registadas por predefinição.
Depois de fazer alterações na instância principal, não consigo ver os registos de auditoria nas minhas instâncias de réplica. As threads de replicação e as threads de recuperação de falhas não são registadas. O Cloud SQL audita as atividades na instância principal, mas não na instância de réplica.
Tentei usar o seguinte comando para definir valores a partir de uma lista separada por vírgulas, mas não funciona.

gcloud instances patch --database-flags
Se especificar uma lista de valores de flags separados por vírgulas através de comandos gcloud, use o argumento --flags-file. Primeiro, tem de criar um ficheiro 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 seguinte comando devolve um erro:

CALL mysql.cloudsql_create_canonical_rules
Isto é intencional. mysql.cloudsql_create_canonical_rules só deve ser chamado internamente por mysql.cloudsql_create_audit_rule e mysql.cloudsql_update_audit_rule.
Que 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, uma vez que não afetam a base 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 (funcionalidades não suportadas).
Quero auditar todas as operações numa tabela específica, por isso, criei a seguinte regra de auditoria:

mysql.cloudsql_create_audit_rule("user@*","db", "table","*","B",1,@1,@2);
No entanto, consigo ver registos de auditoria que não estão relacionados com esta tabela, como disconnect e connect.
Algumas operações, como desligar ou ligar, são consideradas globais. Ignoram os campos db e object.
Quando crio, atualizo ou elimino uma regra de auditoria através de procedimentos armazenados, vejo o seguinte erro.

O servidor MySQL está a ser executado com a opção read-only , pelo que não pode executar esta declaração.
O Cloud SQL não pode alterar os procedimentos armazenados numa instância só de leitura. Se a instância for primária, remova as flags read_only. Se a instância for uma instância de réplica, faça as alterações na respetiva instância principal. Depois de as alterações às regras serem replicadas para a instância de réplica, na instância de réplica, execute o seguinte comando para recarregar as regras na réplica:
CALL mysql.cloudsql_reload_audit_rule(1)
Quando crio, atualizo ou elimino 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 declaração executada no procedimento armazenado e não às 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 a utilização do argumento --flags-file para definir valores de flags complexos (as flags que incluem carateres especiais).
Criei um procedimento armazenado com a declaração CREATE USER, mas a palavra-passe não está ocultada. Por predefinição, a ocultação só funciona para cmds (operações), como as seguintes:

CREATE_USER, ALTER_USER, GRANT, UPDATE.

Para filtrar a palavra-passe durante a criação do procedimento armazenado, adicione create_procedure ao cloudsql_mysql_audit_data_masking_cmds.
Recebi um erro de tempo limite excedido de espera de bloqueio ao tentar criar, atualizar ou eliminar regras de auditoria. Normalmente, este erro é causado quando duas ou mais sessões tentam modificar as regras de auditoria ao mesmo tempo. Se isto acontecer com frequência, aumente o valor da variável innodb_lock_wait_timeout. Pode ser aumentado globalmente (usando a flag da base de dados) ou apenas para a sessão, por exemplo, usando o seguinte comando:
SET innodb_lock_wait_timeout=120
.

O que se segue?