{"id":4841,"date":"2018-03-19T08:41:48","date_gmt":"2018-03-19T15:41:48","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=4841"},"modified":"2025-06-13T17:22:38","modified_gmt":"2025-06-14T00:22:38","slug":"auditing-couchbase-n1ql-statements","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/auditing-couchbase-n1ql-statements\/","title":{"rendered":"Auditoria de declara\u00e7\u00f5es N1QL do Couchbase"},"content":{"rendered":"<p><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/announcing-couchbase-server-5-5\/\">Servidor Couchbase 5.5<\/a> inclui a capacidade de manter um registro de todas as a\u00e7\u00f5es N1QL realizadas pelos usu\u00e1rios. Isso faz parte do recurso mais geral do Couchbase, o <a href=\"https:\/\/docs.couchbase.com\/server\/current\/learn\/security\/auditing.html\" target=\"_blank\" rel=\"noopener noreferrer\">auditoria<\/a> introduzida na vers\u00e3o 5.0. A auditoria s\u00f3 est\u00e1 dispon\u00edvel na edi\u00e7\u00e3o Enterprise.<\/p>\n<p>A auditoria permite que os administradores do sistema rastreiem quem est\u00e1 acessando quais dados no sistema. Isso \u00e9 importante quando os dados armazenados s\u00e3o sens\u00edveis de alguma forma, como informa\u00e7\u00f5es sobre usu\u00e1rios. O Couchbase Server 5.5 oferece suporte \u00e0 auditoria de instru\u00e7\u00f5es N1QL e permite que o administrador especifique quais tipos de instru\u00e7\u00f5es (SELECTs? INSERTs?) devem ser realmente auditadas.<\/p>\n<p>\u00c9 importante entender o que o Couchbase Server 5.5 n\u00e3o faz. Em particular, ele n\u00e3o permite a auditoria em n\u00edvel de registro. Se uma instru\u00e7\u00e3o UPDATE for executada e modificar cinco registros, o registro de auditoria incluir\u00e1 toda a instru\u00e7\u00e3o executada, inclusive todos os par\u00e2metros passados, e dir\u00e1 que cinco registros foram atualizados. Ele n\u00e3o dir\u00e1 quais registros espec\u00edficos foram atualizados ou quais eram seus valores antes ou depois da opera\u00e7\u00e3o. Fundamentalmente, a auditoria N1QL audita instru\u00e7\u00f5es, n\u00e3o registros.<\/p>\n<p>Para configurar a auditoria, fa\u00e7a login no console de administra\u00e7\u00e3o do Couchbase. Navegue at\u00e9 a guia Security (Seguran\u00e7a) (na lateral) e at\u00e9 a guia Audit (Auditoria) (na parte superior da tela). Agora voc\u00ea deve ver uma tela como esta:<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-4843\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/03\/audit-config-original-1024x616.png\" alt=\"\" width=\"900\" height=\"541\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/audit-config-original-1024x616.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/audit-config-original-300x181.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/audit-config-original-768x462.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/audit-config-original-1536x925.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/audit-config-original-2048x1233.png 2048w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/audit-config-original-20x12.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/audit-config-original-1320x795.png 1320w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/p>\n<p>Essa guia permite que voc\u00ea configure a auditoria em geral. A caixa de sele\u00e7\u00e3o na parte superior indica se a auditoria deve ser feita. \"Target Log Directory\" mostra onde colocar os registros do log de auditoria. Os registros aparecem em um arquivo chamado \"audit.log\" no diret\u00f3rio de log de destino. O pr\u00f3ximo conjunto de caixas de texto controla a rota\u00e7\u00e3o do log por tamanho e intervalo de tempo.<\/p>\n<p>Em seguida, h\u00e1 tr\u00eas menus suspensos para v\u00e1rios tipos de eventos, o que lhe d\u00e1 um controle preciso sobre os tipos de atividades que devem ser registradas. De modo geral, audite apenas o que for necess\u00e1rio. O custo real da taxa de transfer\u00eancia da auditoria depende de quanto \u00e9 auditado e do tipo de declara\u00e7\u00f5es que est\u00e3o sendo auditadas. Dez por cento de perda de rendimento devido \u00e0 auditoria \u00e9 uma estimativa razo\u00e1vel, mas voc\u00ea deve testar o efeito real antes de implantar um novo sistema.<\/p>\n<p>Por fim, voc\u00ea pode colocar usu\u00e1rios na lista de permiss\u00f5es na caixa \"Ignorar eventos desses usu\u00e1rios\". Esses usu\u00e1rios s\u00e3o confi\u00e1veis a ponto de suas a\u00e7\u00f5es n\u00e3o precisarem ser registradas. Por exemplo, voc\u00ea pode ter um script automatizado que insere novos dados. Voc\u00ea confia totalmente nesse script. Criar um usu\u00e1rio na lista de permiss\u00f5es e fazer com que o script use as credenciais desse usu\u00e1rio pode ser \u00fatil para evitar a gera\u00e7\u00e3o de muitos registros de auditoria.<\/p>\n<p>Alterne o menu suspenso \"N1QL Events\" (Eventos N1QL) para ver os tipos de eventos dispon\u00edveis para o N1QL.<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-4844\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/03\/audit-dropdown-screenshot-1024x555.png\" alt=\"\" width=\"900\" height=\"488\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/audit-dropdown-screenshot-1024x555.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/audit-dropdown-screenshot-300x163.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/audit-dropdown-screenshot-768x416.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/audit-dropdown-screenshot-1536x833.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/audit-dropdown-screenshot-20x11.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/audit-dropdown-screenshot-1320x715.png 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/audit-dropdown-screenshot.png 2048w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/p>\n<p>H\u00e1 dois tipos gerais. O primeiro s\u00e3o os eventos correspondentes aos tipos de instru\u00e7\u00f5es N1QL. Por exemplo, voc\u00ea pode optar por auditar todos os eventos INSERT ou todos os eventos DELETE. Por exemplo, pode ser razo\u00e1vel auditar todos os eventos que modificam dados (INSERT\/DELETE\/UPDATE\/UPSERT), mas ignorar as instru\u00e7\u00f5es que apenas recuperam dados (SELECT).<\/p>\n<p>O segundo s\u00e3o os eventos correspondentes \u00e0s APIs expostas pelo mecanismo de consulta. O mecanismo de consulta N1QL disponibiliza v\u00e1rias APIs, geralmente para monitorar o sistema. Cada um desses endpoints de API \u00e9 um tipo de evento separado. Por exemplo, h\u00e1 um para o ponto de extremidade \/admin\/stats e outro para o ponto de extremidade \/admin\/ping. Voc\u00ea tem controle separado para auditar ou n\u00e3o os acessos a essas APIs.<\/p>\n<h4>Consulta simples<\/h4>\n<p>Come\u00e7aremos com a auditoria de um simples comando SELECT.<\/p>\n<p>V\u00e1 para a p\u00e1gina \"Buckets\" do console de administra\u00e7\u00e3o e crie um bucket chamado \"test\" (sem aspas). A cota de mem\u00f3ria de 100 MB \u00e9 suficiente para nossos prop\u00f3sitos. Em seguida, v\u00e1 para Query (Consulta) e crie um \u00edndice prim\u00e1rio no novo bucket, para que possamos executar consultas N1QL nele.<\/p>\n<p><code>criar \u00edndice prim\u00e1rio em teste<\/code><\/p>\n<p>Em seguida, volte para a tela de configura\u00e7\u00e3o de auditoria e selecione \"Audit events &amp; write them to a log\" na parte superior e a op\u00e7\u00e3o \"SELECT statement\" em \"N1QL Events\". Em seguida, pressione \"Save\" (Salvar) na parte inferior da tela.<\/p>\n<p>Em seguida, execute uma consulta como esta.<\/p>\n<p><code>curl https:\/\/localhost:8093\/query\/service -d \"statement=select * from test\" -u Administrator:password<\/code><\/p>\n<p>E vamos dar uma olhada no registro de auditoria. O campo \"Target Log Directory\" da tela de configura\u00e7\u00e3o de auditoria cont\u00e9m o diret\u00f3rio em que o log de auditoria est\u00e1 armazenado. Usaremos o comando \"tail\" para mostrar os \u00faltimos registros do log de auditoria nesse diret\u00f3rio. Nos sistemas Mac, esse comando funciona:<\/p>\n<p><code>tail ~\/Library\/Application\\ Support\/Couchbase\/var\/lib\/couchbase\/logs\/audit.log<\/code><\/p>\n<p>Voc\u00ea dever\u00e1 ver v\u00e1rias linhas longas de texto JSON. Cada linha \u00e9 um registro de auditoria. A \u00faltima \u00e9 o registro da declara\u00e7\u00e3o que enviamos. Reformatada, ela tem a seguinte apar\u00eancia:<\/p>\n<pre>{\r\n  \"timestamp\": \"2018-03-14T05:53:34.976-07:00\",\r\n  \"real_userid\": {\r\n    \"source\" (fonte): \"local\",\r\n    \"user\": \"Administrator\" (Administrador)\r\n  },\r\n  \"requestId\": \"d0554df3-fd99-40f5-b911-b3e4f0faf050\",\r\n  \"statement\": \"select * from test\",\r\n  \"isAdHoc\": true,\r\n  \"userAgent\": \"curl\\\/7.43.0\",\r\n  \"node\" (n\u00f3): \"127.0.0.1:8091\",\r\n  \"status\": \"success\" (sucesso),\r\n  \"metrics\" (m\u00e9tricas): {\r\n    \"elapsedTime\" (tempo decorrido): \"822.147\\u00b5s\",\r\n    \"executionTime\": \"785.755\\u00b5s\",\r\n    \"resultCount\": 0,\r\n    \"resultSize\": 0\r\n  },\r\n  \"id\": 28672,\r\n  \"name\": \"Declara\u00e7\u00e3o SELECT\",\r\n  \"description\": \"A N1QL SELECT statement was executed\" (Uma instru\u00e7\u00e3o N1QL SELECT foi executada)\r\n}\r\n<\/pre>\n<p>Vamos examin\u00e1-los campo a campo:<\/p>\n<ul>\n<li>\"timestamp\" mostra a hora do n\u00f3 de consulta.<\/li>\n<li>\"real_userid\" mostra qual credencial de usu\u00e1rio foi fornecida com a solicita\u00e7\u00e3o. Nesse caso, \u00e9 o usu\u00e1rio incorporado, \"Administrator\".<\/li>\n<li>\"requestId\" \u00e9 o UUID que o mecanismo de consulta gera para cada solicita\u00e7\u00e3o. Esses IDs s\u00e3o exclusivos com probabilidade muito alta.<\/li>\n<li>\"statement\" \u00e9 a declara\u00e7\u00e3o real que executamos.<\/li>\n<li>\"isAdHoc\" \u00e9 verdadeiro nesse caso, mostrando que enviamos um comando real para execu\u00e7\u00e3o, em vez de executar um comando preparado.<\/li>\n<li>\"userAgent\" \u00e9 a cadeia de caracteres User-Agent da solicita\u00e7\u00e3o original. Isso \u00e9 \u00fatil para distinguir se a solicita\u00e7\u00e3o veio de um SDK, do shell do CBQ ou do Query WorkBench.<\/li>\n<li>\"node\" \u00e9 o endere\u00e7o IP do qual a solicita\u00e7\u00e3o foi recebida.<\/li>\n<li>\"status\" mostra o que aconteceu com a solicita\u00e7\u00e3o. Nesse caso, ela foi bem-sucedida.<\/li>\n<li>\"metrics\" \u00e9 um conjunto de estat\u00edsticas sobre o resultado. Isso corresponde \u00e0s m\u00e9tricas que foram enviadas com o resultado da solicita\u00e7\u00e3o original.<\/li>\n<li>\"id\" \u00e9 o ID do tipo de evento. Os registros de auditoria de todas as consultas SELECT t\u00eam o mesmo id, 28672.<\/li>\n<li>\"name\" \u00e9 o nome abreviado do tipo de evento. Ele ser\u00e1 o mesmo para todas as consultas SELECT.<\/li>\n<li>\"description\" \u00e9 o nome longo do tipo de evento. Isso tamb\u00e9m \u00e9 o mesmo para todas as consultas SELECT.<\/li>\n<\/ul>\n<p>Observe que o registro de auditoria fornece apenas um usu\u00e1rio, embora o mecanismo de consulta permita v\u00e1rias credenciais por solicita\u00e7\u00e3o. Isso foi projetado. O N1QL permitia v\u00e1rias credenciais para consultas na \u00e9poca em que nossas credenciais eram por banco e, portanto, eram necess\u00e1rias v\u00e1rias credenciais para jun\u00e7\u00f5es de v\u00e1rios bancos. Mas a partir da vers\u00e3o 5.0, com o RBAC, v\u00e1rias credenciais n\u00e3o s\u00e3o mais necess\u00e1rias. N\u00f3s as suportamos para fins de compatibilidade com vers\u00f5es anteriores, mas a maneira correta de lidar com esses casos \u00e9 criar usu\u00e1rios com credenciais para v\u00e1rios buckets e usar um desses usu\u00e1rios para cada consulta. Se voc\u00ea insistir em usar v\u00e1rias credenciais para uma consulta auditada, a consulta ser\u00e1 auditada, mas haver\u00e1 um registro de auditoria separado para cada credencial fornecida. Isso \u00e9 um pouco estranho, por isso sugerimos fortemente que voc\u00ea atualize o modelo de permiss\u00f5es para usar permiss\u00f5es RBAC nesses casos.<\/p>\n<h4>Preparar declara\u00e7\u00e3o<\/h4>\n<p>Agora vamos considerar um caso mais sofisticado, com um comando preparado. Primeiro, volte \u00e0 tela de configura\u00e7\u00e3o de auditoria e ative a auditoria dos comandos SELECT e PREPARE. Lembre-se de clicar em \"Save\" (Salvar) na parte inferior da tela.<\/p>\n<p>Agora, primeiro vamos preparar um comando. Aqui estamos preparando um comando SELECT, com o nome \"example\". Observe que o comando tem um par\u00e2metro sem nome.<\/p>\n<p><code>curl https:\/\/localhost:8093\/query\/service -d \"statement=prepare example as select * from test where one=?\" -u Administrador:senha<\/code><\/p>\n<p>Em seguida, executaremos a instru\u00e7\u00e3o, fornecendo um argumento para a instru\u00e7\u00e3o. Nesse caso, a instru\u00e7\u00e3o ser\u00e1 executada, mas n\u00e3o retornar\u00e1 nenhum resultado.<\/p>\n<p><code>curl https:\/\/localhost:8093\/query\/service -d 'prepared=\"example\"&amp;args=[\"bar\"]'<\/code><\/p>\n<p>Agora vamos dar uma olhada no registro de auditoria novamente.<\/p>\n<p><code>tail ~\/Library\/Application\\ Support\/Couchbase\/var\/lib\/couchbase\/logs\/audit.log<\/code><\/p>\n<p>O registro mostrar\u00e1 dois eventos, um para o PREPARE e outro para o SELECT executado a partir do comando preparado:<\/p>\n<pre>{\r\n  \"timestamp\": \"2018-03-14T06:27:39.884-07:00\",\r\n  \"real_userid\": {\r\n    \"source\" (fonte): \"local\",\r\n    \"user\": \"Administrator\" (Administrador)\r\n  },\r\n  \"requestId\": \"9f76b8c2-ed9f-42f8-bc5c-31fb3326a661\",\r\n  \"statement\": \"prepare example as select * from test where one=?\",\r\n  \"isAdHoc\": true,\r\n  \"userAgent\": \"curl\\\/7.43.0\",\r\n  \"node\" (n\u00f3): \"127.0.0.1:8091\",\r\n  \"status\": \"success\" (sucesso),\r\n  \"metrics\" (m\u00e9tricas): {\r\n    \"elapsedTime\": \"6.591126ms\",\r\n    \"executionTime\": \"6.515079ms\",\r\n    \"resultCount\": 1,\r\n    \"resultSize\": 1279\r\n  },\r\n  \"id\": 28674,\r\n  \"name\": \"Declara\u00e7\u00e3o PREPARE\",\r\n  \"description\": \"Uma instru\u00e7\u00e3o N1QL PREPARE foi executada\"\r\n}\r\n{\r\n  \"timestamp\" (registro de data e hora): \"2018-03-14T06:27:52.992-07:00\",\r\n  \"real_userid\": {\r\n    \"source\" (fonte): \"internal\",\r\n    \"user\": \"unknown\" (desconhecido)\r\n  },\r\n  \"requestId\": \"56c5278b-5842-45a9-8549-5c7f52f109a7\",\r\n  \"statement\": \"\",\r\n  \"positionalArgs\": [\r\n    \"\\\"bar\\\"\"\r\n  ],\r\n  \"isAdHoc\": falso,\r\n  \"userAgent\": \"curl\\\/7.43.0\",\r\n  \"node\" (n\u00f3): \"127.0.0.1:8091\",\r\n  \"status\": \"success\" (sucesso),\r\n  \"metrics\" (m\u00e9tricas): {\r\n    \"elapsedTime\": \"1.363373ms\",\r\n    \"executionTime\": \"1.334763ms\",\r\n    \"resultCount\": 0,\r\n    \"resultSize\": 0\r\n  },\r\n  \"id\": 28672,\r\n  \"name\": \"Declara\u00e7\u00e3o SELECT\",\r\n  \"description\": \"A N1QL SELECT statement was executed\" (Uma instru\u00e7\u00e3o N1QL SELECT foi executada)\r\n}\r\n<\/pre>\n<p>Os campos dos registros de auditoria s\u00e3o semelhantes aos da execu\u00e7\u00e3o anterior de um comando SELECT, mas h\u00e1 dois campos que merecem aten\u00e7\u00e3o:<\/p>\n<ul>\n<li>\"positionalArgs\" cont\u00e9m o argumento fornecido com a consulta.<\/li>\n<li>\"isAdHoc\" \u00e9, nesse caso, falso, porque o SELECT foi executado a partir de um comando preparado enviado anteriormente.<\/li>\n<\/ul>\n<h4>Solicita\u00e7\u00e3o de API<\/h4>\n<p>Em seguida, vamos tentar auditar uma das APIs do mecanismo de consulta. V\u00e1 para a p\u00e1gina de configura\u00e7\u00e3o de auditoria e ative o tipo de evento \"\/admin\/ping API request\". N\u00e3o se esque\u00e7a de salvar a configura\u00e7\u00e3o na parte inferior da p\u00e1gina.<\/p>\n<p>Agora envie um ping:<\/p>\n<p><code>curl -v https:\/\/localhost:8093\/admin\/ping<\/code><\/p>\n<p>N\u00e3o espere muito, o \"{}\" na parte inferior \u00e9 o resultado completo:<\/p>\n<pre>* Tentando ::1...\r\n* Conectado ao localhost (::1) porta 8093 (#0)\r\n&gt; GET \/admin\/ping HTTP\/1.1\r\n&gt; Host: localhost:8093\r\n&gt; Agente de usu\u00e1rio: curl\/7.43.0\r\n&gt; Aceitar: *\/*\r\n&gt;\r\n&lt; HTTP\/1.1 200 OK\r\n&lt; Date: Wed, 14 Mar 2018 13:54:24 GMT\r\n&lt; Content-Length: 2\r\n&lt; Content-Type: text\/plain; charset=utf-8\r\n&lt;\r\n* A conex\u00e3o #0 com o host localhost permaneceu intacta.\r\n{}\r\n<\/pre>\n<p>Em seguida, vamos dar uma olhada no registro de auditoria (novamente, usando o local nos Macs):<\/p>\n<p><code>tail ~\/Library\/Application\\ Support\/Couchbase\/var\/lib\/couchbase\/logs\/audit.log<\/code><\/p>\n<p>A mensagem de registro de auditoria resultante, formatada, tem a seguinte apar\u00eancia:<\/p>\n<pre>{\r\n  \"timestamp\": \"2018-03-14T06:54:24.887-07:00\",\r\n  \"real_userid\": {\r\n    \"source\" (fonte): \"internal\",\r\n    \"user\": \"unknown\" (desconhecido)\r\n  },\r\n  \"httpMethod\": \"GET\",\r\n  \"httpResultCode\": 200,\r\n  \"errorMessage\": \"\",\r\n  \"id\": 28697,\r\n  \"name\": \"Solicita\u00e7\u00e3o de API \/admin\/ping\",\r\n  \"description\": \"Foi feita uma solicita\u00e7\u00e3o HTTP para a API em \/admin\/ping.\"\r\n}\r\n<\/pre>\n<p>Aqui, os campos \"timestamp\" e \"real_userid\" funcionam como antes, no exemplo SELECT. \"httpMethod\" \u00e9 o tipo de solicita\u00e7\u00e3o HTTP. \"httpResultCode\" e \"errorMessage\" indicam o que aconteceu com a solicita\u00e7\u00e3o. \"Id\", \"name\" e \"description\" s\u00e3o espec\u00edficos para o evento de auditoria; esses campos ser\u00e3o id\u00eanticos para todos os registros de auditoria criados para eventos \/admin\/ping.<\/p>\n<h4>Filtragem de encaminhamento<\/h4>\n<p>(Este \u00e9 um t\u00f3pico avan\u00e7ado. N\u00e3o \u00e9 necess\u00e1rio conhecer o material desta se\u00e7\u00e3o para usar a auditoria do N1QL de forma eficaz. Mas uma olhada nos bastidores pode ser do interesse de usu\u00e1rios avan\u00e7ados).<\/p>\n<p>A auditoria \u00e9 controlada em cada servidor por um execut\u00e1vel chamado audit demon. O dem\u00f4nio de auditoria cria todos os registros no log de auditoria. Na vers\u00e3o 5.0, o dem\u00f4nio de auditoria era respons\u00e1vel por toda a filtragem de eventos; os clientes enviavam registros de todos os eventos audit\u00e1veis e o dem\u00f4nio de auditoria criava ou n\u00e3o registros de auditoria no log, dependendo da configura\u00e7\u00e3o de filtragem. Infelizmente, isso seria muito ineficiente quando a auditoria \u00e9 altamente filtrada e os clientes est\u00e3o fazendo muito trabalho potencialmente audit\u00e1vel. Um cliente, como o mecanismo de consulta, poderia gerar milh\u00f5es de registros para que fossem descartados pelo dem\u00f4nio da auditoria quando chegassem.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-4849\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/03\/cropped-audit-boxes.jpg\" alt=\"\" width=\"724\" height=\"526\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/cropped-audit-boxes.jpg 724w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/cropped-audit-boxes-300x218.jpg 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/cropped-audit-boxes-20x15.jpg 20w\" sizes=\"auto, (max-width: 724px) 100vw, 724px\" \/><\/p>\n<p>Para aliviar esse problema, na vers\u00e3o 5.5 o Couchbase oferece suporte \u00e0 filtragem direta. O mecanismo de consulta est\u00e1 ciente da configura\u00e7\u00e3o de auditoria atual e envia apenas os registros atualmente auditados para o dem\u00f4nio de auditoria. Ele tamb\u00e9m envia um registro de auditoria especial para indicar que recebeu a nova configura\u00e7\u00e3o e est\u00e1 ciente dela.<\/p>\n<p>Essa filtragem dupla \u00e9 a raz\u00e3o pela qual voc\u00ea pode ver dois tipos de registros de configura\u00e7\u00e3o no log de auditoria. Um registro como esse indica que o dem\u00f4nio de auditoria recebeu uma nova configura\u00e7\u00e3o:<\/p>\n<pre>{\"rotate_size\":20971520, \"log_path\":\"\/Users\/johanlarson\/Library\/Application Support\/Couchbase\/var\/lib\/couchbase\/logs\", \"rotate_interval\":86400,\r\n\"disabled_userids\":[], \"auditd_enabled\":true,\r\n\"disabled\":[20485,20488,20489,20490,20491,28673,28675,28676,28677,28678,28679,28680,28681,28682,\r\n 28683,28684,28685,28686,28687,28688,28689,28690,28691,28692,28693,28694,28695,28697,28698,28699,\r\n28700,28701,28702,32770,32771,32772,32780],\r\n\"enabled:[20480,20482,20483,28672,28674,32768,32769,32773,32774,32775,32776,32777,32778,32779,32781,32782],\r\n\"real_userid\":{\"source\":\"ns_server\",\"user\":\"Administrator\"},\"sessionid\":\"8b3d16bffa8444ce596b64a78c0185f7\",\r\n\"remote\":{\"ip\":\"127.0.0.1\",\"port\":52153},\r\n\"timestamp\":\"2018-03-14T06:25:30.370-07:00\",\"id\":8240,\"name\":\"configured audit daemon\",\r\n\"description\": \"arquivo de configura\u00e7\u00e3o carregado para daemon de auditoria\"}\r\n<\/pre>\n<p>E um registro como esse indica que o mecanismo de consulta recebeu uma nova configura\u00e7\u00e3o:<\/p>\n<pre>{\"timestamp\":\"2018-03-14T06:25:30.427-07:00\",\r\n\"real_userid\":{\"source\":\"\",\"user\":\"\"},\"uuid\":\"26571424\",\"id\":28703,\r\n\"name\": \"N1QL configuration\", \"description\": \"Declara que o N1QL est\u00e1 usando a configura\u00e7\u00e3o de auditoria com o uuid especificado\"}\r\n<\/pre>\n<p>Observe o UUID que identifica a configura\u00e7\u00e3o. Voc\u00ea pode obter esse UUID na configura\u00e7\u00e3o, da seguinte forma:<\/p>\n<p><code>curl https:\/\/localhost:8091\/pools\/default -u Administrator:password<\/code><\/p>\n<p>Procure o campo \"auditUid\".<\/p>\n<p>Voc\u00ea pode obter a configura\u00e7\u00e3o completa de auditoria da seguinte forma:<\/p>\n<p><code>curl https:\/\/localhost:8091\/settings\/audit -u Administrator:password<\/code><\/p>\n<pre>{\"disabled\":[20485,20488,20489,20490,20491,28673,28675,28676,28677,28678,\r\n28679,28680,28681,28682,28683,28684,28685,28686,28687,28688,28689,\r\n28690,28691,28692,28693,28694,28695,28698,28699,28700,28701,28702,\r\n32770,32771,32772,32780],\r\n\"uid\":\"18635804\",\"auditdEnabled\":true,\"disabledUsers\":[],\r\n\"logPath\":\"\/Users\/johanlarson\/Library\/Application Support\/Couchbase\/var\/lib\/couchbase\/logs\",\r\n\"rotateInterval\":86400,\"rotateSize\":20971520}\r\n<\/pre>\n<h4>Carregando o registro de auditoria<\/h4>\n<p>Atualmente, o Couchbase Server suporta apenas um destino para os registros de auditoria: um arquivo no servidor. Mas, \u00e0s vezes, seria \u00fatil obter os registros de auditoria no pr\u00f3prio banco de dados. Isso n\u00e3o \u00e9 dif\u00edcil, pois os registros de auditoria s\u00e3o JSON. Mas o carregamento do registro requer o uso de um utilit\u00e1rio, o cbimport.<\/p>\n<p>Supondo que o log de auditoria tenha sido criado no local padr\u00e3o em um Mac e que voc\u00ea tenha criado o compartimento \"teste\", esse encantamento carrega o arquivo audit.log no compartimento \"teste\":<\/p>\n<p><code>\/Applications\/Couchbase\\ Server.app\/Contents\/Resources\/couchbase-core\/bin\/cbimport json -c https:\/\/localhost:8091 -u Administrator -p password -b test -g \"#UUID#\" -d file:\/\/\/Users\/johanlarson\/Library\/Application\\ Support\/Couchbase\/var\/lib\/couchbase\/logs\/audit.log -f lines<\/code><\/p>\n<p>Isso \u00e9 bastante complicado, e voc\u00ea precisaria de varia\u00e7\u00f5es ligeiramente diferentes em outros sistemas, portanto, vamos analisar isso passo a passo.<\/p>\n<ul>\n<li><strong>\/Applications\/Couchbase\\ Server.app\/Contents\/Resources\/couchbase-core\/bin\/cbimport<\/strong> \u00e9 o caminho completo para o comando cbimport em um Mac. Para outros sistemas, os utilit\u00e1rios est\u00e3o localizados em outro lugar. Veja <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/5.1\/cli\/cli-intro.html\">este documento<\/a>.<\/li>\n<li><strong>-c https:\/\/localhost:8091<\/strong> \u00e9 o URL do servidor em que o Couchbase est\u00e1 sendo executado<\/li>\n<li><strong>-u Administrador -p senha<\/strong> \u00e9 o nome de usu\u00e1rio e a senha do usu\u00e1rio com o qual estamos fazendo o upload dos dados (neste caso, o administrador padr\u00e3o).<\/li>\n<li><strong>teste -b<\/strong> \u00e9 o nome do bucket para o qual estamos carregando os dados.<\/li>\n<li><strong>-g \"#UUID#\"<\/strong> \u00e9 o tipo de chave a ser gerada para cada documento inserido no bucket. Neste caso, estamos usando um UUID, mas h\u00e1 muitas outras op\u00e7\u00f5es. Verifique o <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/current\/tools\/cbimport.html\">cbimport<\/a> para obter mais informa\u00e7\u00f5es.<\/li>\n<li><strong>-d file:\/\/\/Users\/johanlarson\/Library\/Application\\ Support\/Couchbase\/var\/lib\/couchbase\/logs\/audit.log<\/strong> \u00e9 um URL de arquivo que aponta para o local do registro de auditoria. Observe as tr\u00eas barras inclinadas e a barra invertida para permitir um espa\u00e7o no caminho do URL. Os logs, inclusive o log de auditoria, s\u00e3o colocados em diret\u00f3rios padr\u00e3o que variam de sistema para sistema. Veja <a href=\"https:\/\/docs.couchbase.com\/server\/current\/manage\/manage-logging\/manage-logging.html\">este documento<\/a> para obter mais informa\u00e7\u00f5es.<\/li>\n<\/ul>\n<p>Quando os registros de auditoria estiverem no sistema, voc\u00ea poder\u00e1 consult\u00e1-los como qualquer outro dado.<\/p>\n<p>Essa consulta mostra quantos registros de auditoria voc\u00ea tem:<\/p>\n<p><code>select count(*) as num from test<\/code><\/p>\n<p>E essa consulta divide a contagem por tipo de registro de auditoria:<\/p>\n<p><code>select name, count(*) as num from test group by name<\/code><\/p>\n<h4>Resumo<\/h4>\n<ul>\n<li>As solicita\u00e7\u00f5es ao mecanismo de consulta s\u00e3o audit\u00e1veis a partir de <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/announcing-couchbase-server-5-5\/\">Servidor Couchbase 5.5<\/a> EE.<\/li>\n<li>A auditoria em geral oferece suporte \u00e0 filtragem por tipo de evento e \u00e0 lista de permiss\u00f5es de usu\u00e1rios.<\/li>\n<li>As solicita\u00e7\u00f5es s\u00e3o marcadas como eventos por tipo de consulta e ponto de extremidade da API.<\/li>\n<li>H\u00e1 documenta\u00e7\u00e3o adicional dispon\u00edvel sobre a auditoria de instru\u00e7\u00f5es N1QL <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/5.5\/security\/n1ql-auditing.html\" target=\"_blank\" rel=\"noopener noreferrer\">aqui<\/a>.<\/li>\n<li><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/downloads\/\">Fa\u00e7a o download do Couchbase Server 5.5<\/a> aqui.<\/li>\n<\/ul>","protected":false},"excerpt":{"rendered":"<p>O Couchbase Server 5.5 inclui a capacidade de manter um registro de todas as a\u00e7\u00f5es N1QL realizadas pelos usu\u00e1rios. Isso faz parte da funcionalidade de auditoria mais geral do Couchbase, introduzida na vers\u00e3o 5.0. A auditoria est\u00e1 dispon\u00edvel somente na edi\u00e7\u00e3o Enterprise. A auditoria permite que os administradores [...]<\/p>","protected":false},"author":8157,"featured_media":4846,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1816,1812],"tags":[2258,2180,2182],"ppma_author":[9058],"class_list":["post-4841","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-couchbase-server","category-n1ql-query","tag-5-5","tag-auditing","tag-devbuild"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.4 (Yoast SEO v26.4) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Auditing Couchbase N1QL Statements - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"Couchbase Server now supports auditing of N1QL statements and API accesses. This article shows how, including hands-on exercises.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/pt\/auditing-couchbase-n1ql-statements\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Auditing Couchbase N1QL Statements\" \/>\n<meta property=\"og:description\" content=\"Couchbase Server now supports auditing of N1QL statements and API accesses. This article shows how, including hands-on exercises.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/auditing-couchbase-n1ql-statements\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2018-03-19T15:41:48+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T00:22:38+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/0215-surveillance-jpg.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"804\" \/>\n\t<meta property=\"og:image:height\" content=\"603\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Johan Larson\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Johan Larson\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/auditing-couchbase-n1ql-statements\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/auditing-couchbase-n1ql-statements\/\"},\"author\":{\"name\":\"Johan Larson\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/043ccbbfc54b95927c73f81ec7f6a0a1\"},\"headline\":\"Auditing Couchbase N1QL Statements\",\"datePublished\":\"2018-03-19T15:41:48+00:00\",\"dateModified\":\"2025-06-14T00:22:38+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/auditing-couchbase-n1ql-statements\/\"},\"wordCount\":2055,\"commentCount\":2,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/auditing-couchbase-n1ql-statements\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/0215-surveillance-jpg.jpg\",\"keywords\":[\"5.5\",\"auditing\",\"devbuild\"],\"articleSection\":[\"Couchbase Server\",\"SQL++ \/ N1QL Query\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/auditing-couchbase-n1ql-statements\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/auditing-couchbase-n1ql-statements\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/auditing-couchbase-n1ql-statements\/\",\"name\":\"Auditing Couchbase N1QL Statements - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/auditing-couchbase-n1ql-statements\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/auditing-couchbase-n1ql-statements\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/0215-surveillance-jpg.jpg\",\"datePublished\":\"2018-03-19T15:41:48+00:00\",\"dateModified\":\"2025-06-14T00:22:38+00:00\",\"description\":\"Couchbase Server now supports auditing of N1QL statements and API accesses. This article shows how, including hands-on exercises.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/auditing-couchbase-n1ql-statements\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/auditing-couchbase-n1ql-statements\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/auditing-couchbase-n1ql-statements\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/0215-surveillance-jpg.jpg\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/0215-surveillance-jpg.jpg\",\"width\":804,\"height\":603},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/auditing-couchbase-n1ql-statements\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Auditing Couchbase N1QL Statements\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/043ccbbfc54b95927c73f81ec7f6a0a1\",\"name\":\"Johan Larson\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/93b175bb8728e12439dd573fc27b9d1a\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/2ddf616344da1f84e85c42ba2bfc102e28380128c107cc21eeecc26edc737227?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/2ddf616344da1f84e85c42ba2bfc102e28380128c107cc21eeecc26edc737227?s=96&d=mm&r=g\",\"caption\":\"Johan Larson\"},\"description\":\"Johan Larson is a Senior Software Engineer at Couchbase. Johan's work responsibility is building an SQL-based query language for JSON data in a distributed NoSQL system.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/pt\/author\/johan-larson\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Auditoria de declara\u00e7\u00f5es N1QL do Couchbase - O blog do Couchbase","description":"O Couchbase Server agora oferece suporte \u00e0 auditoria de instru\u00e7\u00f5es N1QL e acessos \u00e0 API. Este artigo mostra como, incluindo exerc\u00edcios pr\u00e1ticos.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/pt\/auditing-couchbase-n1ql-statements\/","og_locale":"pt_BR","og_type":"article","og_title":"Auditing Couchbase N1QL Statements","og_description":"Couchbase Server now supports auditing of N1QL statements and API accesses. This article shows how, including hands-on exercises.","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/auditing-couchbase-n1ql-statements\/","og_site_name":"The Couchbase Blog","article_published_time":"2018-03-19T15:41:48+00:00","article_modified_time":"2025-06-14T00:22:38+00:00","og_image":[{"width":804,"height":603,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/0215-surveillance-jpg.jpg","type":"image\/jpeg"}],"author":"Johan Larson","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Johan Larson","Est. reading time":"11 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/auditing-couchbase-n1ql-statements\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/auditing-couchbase-n1ql-statements\/"},"author":{"name":"Johan Larson","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/043ccbbfc54b95927c73f81ec7f6a0a1"},"headline":"Auditing Couchbase N1QL Statements","datePublished":"2018-03-19T15:41:48+00:00","dateModified":"2025-06-14T00:22:38+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/auditing-couchbase-n1ql-statements\/"},"wordCount":2055,"commentCount":2,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/auditing-couchbase-n1ql-statements\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/0215-surveillance-jpg.jpg","keywords":["5.5","auditing","devbuild"],"articleSection":["Couchbase Server","SQL++ \/ N1QL Query"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/auditing-couchbase-n1ql-statements\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/auditing-couchbase-n1ql-statements\/","url":"https:\/\/www.couchbase.com\/blog\/auditing-couchbase-n1ql-statements\/","name":"Auditoria de declara\u00e7\u00f5es N1QL do Couchbase - O blog do Couchbase","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/auditing-couchbase-n1ql-statements\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/auditing-couchbase-n1ql-statements\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/0215-surveillance-jpg.jpg","datePublished":"2018-03-19T15:41:48+00:00","dateModified":"2025-06-14T00:22:38+00:00","description":"O Couchbase Server agora oferece suporte \u00e0 auditoria de instru\u00e7\u00f5es N1QL e acessos \u00e0 API. Este artigo mostra como, incluindo exerc\u00edcios pr\u00e1ticos.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/auditing-couchbase-n1ql-statements\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/auditing-couchbase-n1ql-statements\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/auditing-couchbase-n1ql-statements\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/0215-surveillance-jpg.jpg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/03\/0215-surveillance-jpg.jpg","width":804,"height":603},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/auditing-couchbase-n1ql-statements\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Auditing Couchbase N1QL Statements"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"Blog do Couchbase","description":"Couchbase, o banco de dados NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"Blog do Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/043ccbbfc54b95927c73f81ec7f6a0a1","name":"Johan Larson","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/93b175bb8728e12439dd573fc27b9d1a","url":"https:\/\/secure.gravatar.com\/avatar\/2ddf616344da1f84e85c42ba2bfc102e28380128c107cc21eeecc26edc737227?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2ddf616344da1f84e85c42ba2bfc102e28380128c107cc21eeecc26edc737227?s=96&d=mm&r=g","caption":"Johan Larson"},"description":"Johan Larson \u00e9 engenheiro de software s\u00eanior da Couchbase. A responsabilidade do trabalho de Johan \u00e9 criar uma linguagem de consulta baseada em SQL para dados JSON em um sistema NoSQL distribu\u00eddo.","url":"https:\/\/www.couchbase.com\/blog\/pt\/author\/johan-larson\/"}]}},"authors":[{"term_id":9058,"user_id":8157,"is_guest":0,"slug":"johan-larson","display_name":"Johan Larson","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/2ddf616344da1f84e85c42ba2bfc102e28380128c107cc21eeecc26edc737227?s=96&d=mm&r=g","author_category":"","last_name":"Larson","first_name":"Johan","job_title":"","user_url":"","description":"Johan Larson \u00e9 engenheiro de software s\u00eanior da Couchbase. A responsabilidade do trabalho de Johan \u00e9 criar uma linguagem de consulta baseada em SQL para dados JSON em um sistema NoSQL distribu\u00eddo."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/4841","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/users\/8157"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=4841"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/4841\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/4846"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=4841"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=4841"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=4841"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=4841"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}