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
-
Na Google Cloud consola, aceda à página Instâncias do Cloud SQL.
- Abra a instância e clique em Editar.
- Desloque a página para baixo até à secção Flags.
- 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 comoON
. - Clique em Guardar para guardar as alterações.
- 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 usargcloud
, 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 usargcloud
, 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
-
Na Google Cloud consola, aceda à página Instâncias do Cloud SQL.
- Abra a instância e clique em Editar.
- Desloque a página para baixo até à secção Flags.
- 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.
- Clique em Guardar para guardar as alterações.
- 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:
|
||||||
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
-
Na Google Cloud consola, aceda à página Instâncias do Cloud SQL.
- Abra a instância e clique em Editar.
- Desloque a página para baixo até à secção Flags.
- 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 comoOFF
. - Clique em Guardar para guardar as alterações.
- 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
Audite todas as atividades de todos os utilizadores:
CALL mysql.cloudsql_create_audit_rule('*','*','*','*','B',1,@outval,@outmsg);
Audite todas as atividades de um único utilizador
user1
:CALL mysql.cloudsql_create_audit_rule('user1@*','*','*','*','B',1,@outval,@outmsg);
Audite todas as atividades de todos os utilizadores que começam com
user
:CALL mysql.cloudsql_create_audit_rule('user*@*','*','*','*','B',1, @outval,@outmsg);
Audite todas as operações DML para todos os utilizadores:
CALL mysql.cloudsql_create_audit_rule('*','*','*','dml','B',1,@outval,@outmsg);
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);
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);
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);
Audite todas as operações bem-sucedidas:
CALL mysql.cloudsql_create_audit_rule('*','*','*','*','S',1,@outval,@outmsg);
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_xxx só 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?
- Saiba mais sobre a auditoria da base de dados MySQL.
- Consulte a lista completa de operações para a auditoria da base de dados.