{"id":81884,"date":"2020-05-17T13:42:18","date_gmt":"2020-05-17T11:42:18","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/bezopasnost-i-subd-o-chyom-nado-pomnit-podbiraya-sredstva-zashhity"},"modified":"2020-05-17T13:42:18","modified_gmt":"2020-05-17T11:42:18","slug":"bezopasnost-i-subd-o-chyom-nado-pomnit-podbiraya-sredstva-zashhity","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/bezopasnost-i-subd-o-chyom-nado-pomnit-podbiraya-sredstva-zashhity","title":{"rendered":"Seguran\u00e7a e SGBDs: o que voc\u00ea deve considerar ao escolher meios de prote\u00e7\u00e3o","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h1><img decoding=\"async\" alt=\"Seguran\u00e7a e SGBDs: o que voc\u00ea deve considerar ao escolher meios de prote\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2020\/05\/ac49253838e36336af127d71394139d8.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/h1>\n<p>\nMeu nome \u00e9 Denis Rozhkov, sou o chefe de desenvolvimento de software na empresa 'Gazinformservice', na equipe de produto. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.gaz-is.ru\/produkty\/inform-sistemy\/subd-jatoba.html\">Jatoba<\/a><\/noindex>. A legisla\u00e7\u00e3o e as normas corporativas imp\u00f5em certas exig\u00eancias \u00e0 seguran\u00e7a do armazenamento de dados. Ningu\u00e9m quer que terceiros tenham acesso a informa\u00e7\u00f5es confidenciais, portanto, para qualquer projeto, s\u00e3o importantes as seguintes quest\u00f5es: identifica\u00e7\u00e3o e autentica\u00e7\u00e3o, gerenciamento de acesso aos dados, garantia da integridade das informa\u00e7\u00f5es no sistema, registro de eventos de seguran\u00e7a. Por isso, quero falar sobre alguns pontos interessantes relacionados \u00e0 seguran\u00e7a dos SGBDs. <br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nEste artigo foi preparado com base em uma apresenta\u00e7\u00e3o na <noindex><a rel=\"nofollow\" href=\"https:\/\/corp.mail.ru\/ru\/press\/events\/databases-1\/\">@Databases Meetup,<\/a><\/noindex> organizado <noindex><a rel=\"nofollow\" href=\"https:\/\/mcs.mail.ru\/\">Solu\u00e7\u00f5es em Nuvem Mail.ru<\/a><\/noindex>. Se voc\u00ea n\u00e3o quiser ler, pode assistir:<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"n-54j9FHaMU\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/n-54j9FHaMU\/hqdefault.jpg\" alt=\"Por que no hosting comum a administra\u00e7\u00e3o do PrestaShop \u00e9 lenta, e no seu n\u00e3o \u00e9?\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><br \/>\nO artigo ter\u00e1 tr\u00eas partes:<\/p>\n<ul>\n<li>Como proteger as conex\u00f5es.<\/li>\n<li>O que \u00e9 auditoria de a\u00e7\u00f5es e como registrar o que est\u00e1 acontecendo do lado do banco de dados e da conex\u00e3o com ele.<\/li>\n<li>Como proteger os dados dentro do pr\u00f3prio banco de dados e quais tecnologias existem para isso.<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Seguran\u00e7a e SGBDs: o que voc\u00ea deve considerar ao escolher meios de prote\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2020\/05\/fbdca7f4a925b9ceb78de06c6e245b23.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Tr\u00eas componentes da seguran\u00e7a dos SGBDs: prote\u00e7\u00e3o das conex\u00f5es, auditoria de a\u00e7\u00f5es e prote\u00e7\u00e3o dos dados.<\/i><\/p>\n<h2>Prote\u00e7\u00e3o das conex\u00f5es<\/h2>\n<p>\nAs conex\u00f5es com o banco de dados podem ser feitas diretamente ou indiretamente por meio de aplica\u00e7\u00f5es web. Normalmente, o usu\u00e1rio do lado dos neg\u00f3cios, ou seja, a pessoa que trabalha com o SGBD, n\u00e3o interage com ele diretamente.<\/p>\n<p>Antes de falarmos sobre a prote\u00e7\u00e3o das conex\u00f5es, precisamos responder a algumas perguntas importantes que determinar\u00e3o como as medidas de seguran\u00e7a ser\u00e3o organizadas:<\/p>\n<ul>\n<li>um usu\u00e1rio empresarial equivale a um usu\u00e1rio do SGBD;<\/li>\n<li>o acesso aos dados do SGBD \u00e9 fornecido apenas atrav\u00e9s da API que voc\u00ea controla, ou h\u00e1 acesso direto \u00e0s tabelas;<\/li>\n<li>o SGBD est\u00e1 isolado em um segmento seguro, e quem e como interage com ele;<\/li>\n<li>\u00e9 utilizado pooling\/proxy e camadas intermedi\u00e1rias que podem alterar as informa\u00e7\u00f5es sobre como a conex\u00e3o est\u00e1 configurada e quem usa o banco de dados.<\/li>\n<\/ul>\n<p>\nAgora vamos ver quais ferramentas podem ser aplicadas para proteger as conex\u00f5es:<\/p>\n<ol>\n<li>Utilize solu\u00e7\u00f5es de firewall para banco de dados. Uma camada adicional de prote\u00e7\u00e3o, no m\u00ednimo, aumentar\u00e1 a transpar\u00eancia do que est\u00e1 acontecendo no SGBD e, no m\u00e1ximo, voc\u00ea poder\u00e1 garantir prote\u00e7\u00e3o adicional dos dados.<\/li>\n<li>Utilize pol\u00edticas de senha. A aplica\u00e7\u00e3o delas depende de como sua arquitetura est\u00e1 estruturada. De qualquer forma, uma \u00fanica senha em um arquivo de configura\u00e7\u00e3o de um aplicativo web que se conecta a um SGBD n\u00e3o \u00e9 suficiente para prote\u00e7\u00e3o. Existem v\u00e1rias ferramentas de SGBD que permitem controlar quando um usu\u00e1rio e uma senha precisam ser atualizados.\n<p>Voc\u00ea pode ler mais sobre as funcionalidades de avalia\u00e7\u00e3o de usu\u00e1rios <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.cloud.oracle.com\/en-us\/iaas\/data-safe\/doc\/user-assessment-reports.html\">aqui<\/a><\/noindex>, e tamb\u00e9m pode aprender sobre o MS SQL Vulnerability Assessment <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.microsoft.com\/en-us\/sql\/relational-databases\/security\/sql-vulnerability-assessment?view=sql-server-ver15\">aqui<\/a><\/noindex>.\u00a0<\/li>\n<li>Enrique\u00e7a o contexto da sess\u00e3o com informa\u00e7\u00f5es necess\u00e1rias. Se a sess\u00e3o n\u00e3o for transparente, voc\u00ea n\u00e3o entende quem est\u00e1 operando dentro do SGBD; \u00e9 poss\u00edvel complementar as informa\u00e7\u00f5es na opera\u00e7\u00e3o em execu\u00e7\u00e3o, como quem est\u00e1 fazendo o que e por qu\u00ea. Essas informa\u00e7\u00f5es podem ser vistas na auditoria.<\/li>\n<li>Configure SSL, se voc\u00ea n\u00e3o tiver uma separa\u00e7\u00e3o de rede entre o SGBD e os usu\u00e1rios finais, ou se n\u00e3o estiver em uma VLAN separada. Nesses casos, \u00e9 importante proteger o canal entre o consumidor e o pr\u00f3prio SGBD. Existem ferramentas de prote\u00e7\u00e3o, algumas at\u00e9 de c\u00f3digo aberto.<\/li>\n<\/ol>\n<p><\/p>\n<h3>Como isso afetar\u00e1 o desempenho do SGBD?<\/h3>\n<p>\nVamos observar o exemplo do PostgreSQL para ver como o SSL impacta a carga do CPU, aumenta os tempos de resposta e reduz o TPS, e se muitos recursos ser\u00e3o consumidos ao habilit\u00e1-lo.<\/p>\n<p>Vamos sobrecarregar o PostgreSQL usando o pgbench - um programa simples para executar testes de desempenho. Ele executa repetidamente uma sequ\u00eancia de comandos, possivelmente em sess\u00f5es paralelas do banco de dados, e depois calcula a m\u00e9dia de transa\u00e7\u00f5es.<\/p>\n<p><strong>Teste 1 sem SSL e usando SSL<\/strong> \u2014 a conex\u00e3o \u00e9 estabelecida a cada transa\u00e7\u00e3o:<\/p>\n<pre><code class=\"plaintext\">pgbench.exe --connect -c 10 -t 5000 \"host=192.168.220.129 dbname=taskdb user=postgres sslmode=require \nsslrootcert=rootCA.crt sslcert=client.crt sslkey=client.key\"<\/code><\/pre>\n<p>\n<strong>vs<\/strong><\/p>\n<pre><code class=\"plaintext\">pgbench.exe --connect -c 10 -t 5000 \"host=192.168.220.129 dbname=taskdb user=postgres\"<\/code><\/pre>\n<p>\n<strong>Teste 2 sem SSL e usando SSL<\/strong> \u2014 todas as transa\u00e7\u00f5es s\u00e3o realizadas em uma \u00fanica conex\u00e3o:<\/p>\n<pre><code class=\"plaintext\">pgbench.exe -c 10 -t 5000 \"host=192.168.220.129 dbname=taskdb user=postgres sslmode=require\nsslrootcert=rootCA.crt sslcert=client.crt sslkey=client.key\"<\/code><\/pre>\n<p>\n<strong>vs<\/strong><\/p>\n<pre><code class=\"plaintext\">pgbench.exe -c 10 -t 5000 \"host=192.168.220.129 dbname=taskdb user=postgres\"<\/code><\/pre>\n<p>\n<strong>Outras configura\u00e7\u00f5es<\/strong>:<\/p>\n<pre><code class=\"plaintext\">fator de escalonamento: 1\nmodo da consulta: simples\nn\u00famero de clientes: 10\nn\u00famero de threads: 1\nn\u00famero de transa\u00e7\u00f5es por cliente: 5000\nn\u00famero de transa\u00e7\u00f5es realmente processadas: 50000\/50000<\/code><\/pre>\n<p>\n<strong>Resultados do teste<\/strong>:<\/p>\n<p>\u00a0<br \/>\n<strong>SEM SSL<\/strong><br \/>\n<strong>SSL<\/strong><\/p>\n<p><strong>A conex\u00e3o \u00e9 estabelecida a cada transa\u00e7\u00e3o<\/strong><\/p>\n<p>lat\u00eancia m\u00e9dia<br \/>\n171.915 ms<br \/>\n187.695 ms<\/p>\n<p>tps incluindo o estabelecimento de conex\u00f5es<br \/>\n58.168112<br \/>\n53.278062<\/p>\n<p>tps excluindo o estabelecimento de conex\u00f5es<br \/>\n64.084546<br \/>\n58.725846<\/p>\n<p>CPU<br \/>\n24%<br \/>\n28%<\/p>\n<p><strong>Todas as transa\u00e7\u00f5es s\u00e3o realizadas em uma \u00fanica conex\u00e3o<\/strong><\/p>\n<p>lat\u00eancia m\u00e9dia<br \/>\n6.722 ms<br \/>\n6.342 ms<\/p>\n<p>tps incluindo o estabelecimento de conex\u00f5es<br \/>\n1587.657278<br \/>\n1576.792883<\/p>\n<p>tps excluindo o estabelecimento de conex\u00f5es<br \/>\n1588.380574<br \/>\n1577.694766<\/p>\n<p>CPU<br \/>\n17%<br \/>\n21%<\/p>\n<p>\nEm cargas pequenas, o impacto do SSL \u00e9 compar\u00e1vel ao erro de medi\u00e7\u00e3o. Se o volume de dados transmitidos for muito grande, a situa\u00e7\u00e3o pode ser diferente. Se estabelecermos uma conex\u00e3o para cada transa\u00e7\u00e3o (o que \u00e9 raro, geralmente as conex\u00f5es s\u00e3o compartilhadas entre os usu\u00e1rios), voc\u00ea ter\u00e1 um grande n\u00famero de conex\u00f5es\/desconex\u00f5es, e o impacto pode ser um pouco maior. Ou seja, h\u00e1 riscos de redu\u00e7\u00e3o de desempenho, no entanto, a diferen\u00e7a n\u00e3o \u00e9 t\u00e3o grande a ponto de evitar o uso da prote\u00e7\u00e3o.<\/p>\n<p>Observe que h\u00e1 uma grande diferen\u00e7a ao comparar os modos de opera\u00e7\u00e3o: voc\u00ea trabalha dentro de uma sess\u00e3o ou em sess\u00f5es diferentes. Isso \u00e9 claro: a cria\u00e7\u00e3o de cada conex\u00e3o consome recursos.<\/p>\n<p>Tivemos um caso em que conectamos o Zabbix em modo de confian\u00e7a, ou seja, n\u00e3o verificamos md5, e n\u00e3o havia necessidade de autentica\u00e7\u00e3o. Depois, o cliente pediu para ativar o modo de autentica\u00e7\u00e3o md5. Isso trouxe uma grande carga para a CPU e o desempenho caiu. Come\u00e7amos a buscar caminhos para otimiza\u00e7\u00e3o. Uma das poss\u00edveis solu\u00e7\u00f5es para o problema \u00e9 implementar a limita\u00e7\u00e3o de rede, criar VLANs separadas para o SGBD, adicionar configura\u00e7\u00f5es para que fique claro quem e de onde est\u00e1 se conectando e remover a autentica\u00e7\u00e3o. Tamb\u00e9m \u00e9 poss\u00edvel otimizar as configura\u00e7\u00f5es de autentica\u00e7\u00e3o para reduzir os custos quando a autentica\u00e7\u00e3o est\u00e1 ativada, mas, no geral, a aplica\u00e7\u00e3o de diferentes m\u00e9todos de autentica\u00e7\u00e3o impacta o desempenho e \u00e9 necess\u00e1rio considerar esses fatores ao projetar a capacidade de computa\u00e7\u00e3o dos servidores (hardware) para o SGBD.<\/p>\n<p>Conclus\u00e3o: em v\u00e1rias solu\u00e7\u00f5es, mesmo pequenos detalhes na autentica\u00e7\u00e3o podem impactar muito o projeto, e \u00e9 ruim quando isso se torna claro apenas na implementa\u00e7\u00e3o em produ\u00e7\u00e3o.<\/p>\n<h2>Auditoria de a\u00e7\u00f5es<\/h2>\n<p>\nA auditoria pode n\u00e3o se restringir apenas ao SGBD. A auditoria \u00e9 a obten\u00e7\u00e3o de informa\u00e7\u00f5es sobre o que acontece em diferentes segmentos. Pode incluir firewall de banco de dados e o sistema operacional que abriga o SGBD.<\/p>\n<p>Em SGBDs empresariais de n\u00edvel Enterprise, a auditoria funciona bem; em solu\u00e7\u00f5es open source, isso nem sempre ocorre. Veja o que existe no PostgreSQL:<\/p>\n<ul>\n<li>log padr\u00e3o \u2014 registro de log integrado;<\/li>\n<li>extens\u00f5es: pgaudit \u2014 se o registro padr\u00e3o n\u00e3o for suficiente, voc\u00ea pode usar configura\u00e7\u00f5es separadas que atendem parte das demandas.<\/li>\n<\/ul>\n<p>\n<b>Complemento ao relat\u00f3rio no v\u00eddeo:<\/b><\/p>\n<p>A registro b\u00e1sico de operadores pode ser garantido por meio da ferramenta padr\u00e3o de logging com log_statement = all.<\/p>\n<p>Isso \u00e9 aceit\u00e1vel para monitoramento e outros usos, mas n\u00e3o oferece o n\u00edvel de detalhamento normalmente necess\u00e1rio para auditoria.<\/p>\n<p>N\u00e3o basta ter uma lista de todas as opera\u00e7\u00f5es realizadas no banco de dados.<\/p>\n<p>Tamb\u00e9m deve haver a capacidade de encontrar declara\u00e7\u00f5es espec\u00edficas que s\u00e3o de interesse para o auditor.<\/p>\n<p>A ferramenta padr\u00e3o de logging mostra o que foi solicitado pelo usu\u00e1rio, enquanto o pgAudit foca nos detalhes do que aconteceu quando o banco de dados executou a consulta.<\/p>\n<p>Por exemplo, o auditor pode querer ter certeza de que uma tabela espec\u00edfica foi criada dentro de uma janela de manuten\u00e7\u00e3o documentada.<\/p>\n<p>Isso pode parecer uma tarefa simples para uma auditoria b\u00e1sica e grep, mas e se voc\u00ea encontrar algo como este exemplo (intencionalmente confuso):<\/p>\n<p>DO $$<br \/>\nBEGIN<br \/>\n EXECUTE 'CREATE TABLE import' || 'ant_table (id INT)';<br \/>\nEND $$;<\/p>\n<p>O logging padr\u00e3o lhe dar\u00e1 isso:<\/p>\n<p>LOG: statement: DO $$<br \/>\nBEGIN<br \/>\n EXECUTE 'CREATE TABLE import' || 'ant_table (id INT)';<br \/>\nEND $$;<\/p>\n<p>Parece que para encontrar a tabela em quest\u00e3o pode ser necess\u00e1rio algum conhecimento de c\u00f3digo, nos casos em que as tabelas s\u00e3o criadas dinamicamente.<\/p>\n<p>Isso n\u00e3o \u00e9 ideal, pois seria prefer\u00edvel simplesmente procurar pelo nome da tabela.<\/p>\n<p>\u00c9 aqui que o pgAudit ser\u00e1 \u00fatil.<\/p>\n<p>Para a mesma entrada, ele gerar\u00e1 este output no log:<\/p>\n<p>AUDIT: SESSION,33,1,FUNCTION,DO,,,\u00abDO $$<br \/>\nBEGIN<br \/>\n EXECUTE 'CREATE TABLE import' || 'ant_table (id INT)';<br \/>\nEND $$;\"<br \/>\nAUDIT: SESSION,33,2,DDL,CREATE TABLE,TABLE,public.important_table,CREATE TABLE important_table (id INT)<\/p>\n<p>O bloco DO \u00e9 registrado, assim como o texto completo CREATE TABLE com o tipo de operador, tipo de objeto e nome completo, facilitando a busca.<\/p>\n<p>Ao registrar operadores SELECT e DML, o pgAudit pode ser configurado para registrar uma entrada separada para cada rela\u00e7\u00e3o referida no operador.<\/p>\n<p>N\u00e3o \u00e9 necess\u00e1rio an\u00e1lise sint\u00e1tica para encontrar todos os operadores que se referem a uma tabela espec\u00edfica (<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/pgaudit\/pgaudit\/blob\/master\/README.md\">*<\/a><\/noindex>)\u00bb.<\/p>\n<h3>Como isso afetar\u00e1 o desempenho do SGBD?<\/h3>\n<p>\nVamos realizar testes com auditoria completa habilitada e ver como isso afeta o desempenho do PostgreSQL. Iremos ativar o log m\u00e1ximo do banco de dados em todos os par\u00e2metros.<\/p>\n<p>Na configura\u00e7\u00e3o, mudamos quase nada, mas, importante, ativamos o modo debug5 para obter o m\u00e1ximo de informa\u00e7\u00f5es.<\/p>\n<p>postgresql.conf<\/p>\n<p>log_destination = 'stderr'<br \/>\nlogging_collector = on<br \/>\nlog_truncate_on_rotation = on<br \/>\nlog_rotation_age = 1d<br \/>\nlog_rotation_size = 10MB<br \/>\nlog_min_messages = <strong>debug5<\/strong><br \/>\nlog_min_error_statement = <strong>debug5<\/strong><br \/>\nlog_min_duration_statement = 0<br \/>\ndebug_print_parse = on<br \/>\ndebug_print_rewritten = on<br \/>\ndebug_print_plan = on<br \/>\ndebug_pretty_print = ativado<br \/>\nlog_checkpoints = ativado<br \/>\nlog_connections = ativado<br \/>\nlog_disconnections = ativado<br \/>\nlog_duration = ativado<br \/>\nlog_hostname = ativado<br \/>\nlog_lock_waits = ativado<br \/>\nlog_replication_commands = ativado<br \/>\nlog_temp_files = 0<br \/>\nlog_timezone = 'Europe\/Moscow'<\/p>\n<p>\nNo banco de dados PostgreSQL com os par\u00e2metros 1 CPU, 2,8 GHz, 2 GB de RAM, 40 GB de HDD, realizamos tr\u00eas testes de carga, utilizando os seguintes comandos:<\/p>\n<pre><code class=\"plaintext\">$ pgbench -p 3389 -U postgres -i -s 150 benchmark\n$ pgbench -p 3389 -U postgres -c 50 -j 2 -P 60 -T 600 benchmark\n$ pgbench -p 3389 -U postgres -c 150 -j 2 -P 60 -T 600 benchmark<\/code><\/pre>\n<p>\n<strong>Resultados dos testes:<\/strong><\/p>\n<p><strong>Sem registro<\/strong><br \/>\n<strong>Com registro<\/strong><\/p>\n<p>Tempo total para preenchimento do BD<br \/>\n43,74 seg<br \/>\n53,23 seg<\/p>\n<p>RAM<br \/>\n24%<br \/>\n40%<\/p>\n<p>CPU<br \/>\n72%<br \/>\n91%<\/p>\n<p><strong>Teste 1 (50 conex\u00f5es)<\/strong><\/p>\n<p>N\u00famero de transa\u00e7\u00f5es em 10 min<br \/>\n74169<br \/>\n32445<\/p>\n<p>Transa\u00e7\u00f5es\/seg<br \/>\n123<br \/>\n54<\/p>\n<p>Lat\u00eancia m\u00e9dia<br \/>\n405 ms<br \/>\n925 ms<\/p>\n<p><strong>Teste 2 (150 conex\u00f5es com 100 permitidas)<\/strong><\/p>\n<p>N\u00famero de transa\u00e7\u00f5es em 10 min<br \/>\n81727<br \/>\n31429<\/p>\n<p>Transa\u00e7\u00f5es\/seg<br \/>\n136<br \/>\n52<\/p>\n<p>Lat\u00eancia m\u00e9dia<br \/>\n550 ms<br \/>\n1432 ms<\/p>\n<p><strong>Sobre os tamanhos<\/strong><\/p>\n<p>Tamanho do BD<br \/>\n2251 MB<br \/>\n2262 MB<\/p>\n<p>Tamanho dos logs do BD<br \/>\n0 MB<br \/>\n4587 MB<\/p>\n<p>\nEm suma: uma auditoria completa n\u00e3o \u00e9 muito boa. A quantidade de dados gerada pela auditoria ser\u00e1 igual ou at\u00e9 maior que a pr\u00f3pria base de dados. Essa quantidade de registro gerada durante a opera\u00e7\u00e3o do DBMS \u00e9 um problema comum em produ\u00e7\u00e3o.<\/p>\n<p>Vamos observar outros par\u00e2metros:<\/p>\n<ul>\n<li>A velocidade n\u00e3o muda muito: sem registro \u2014 43,74 seg, com registro \u2014 53,23 seg.<\/li>\n<li>O desempenho de RAM e CPU diminuir\u00e1, pois \u00e9 necess\u00e1rio criar um arquivo de auditoria. Isso \u00e9 evidente tamb\u00e9m em ambientes de produ\u00e7\u00e3o.<\/li>\n<\/ul>\n<p>\nAo aumentar o n\u00famero de conex\u00f5es, naturalmente, os indicadores piorar\u00e3o um pouco.<\/p>\n<p>Nas corpora\u00e7\u00f5es, a auditoria \u00e9 ainda mais complexa:<\/p>\n<ul>\n<li>h\u00e1 muitos dados;<\/li>\n<li>a auditoria \u00e9 necess\u00e1ria n\u00e3o apenas via syslog no SIEM, mas tamb\u00e9m em arquivos: caso algo aconte\u00e7a com o syslog, deve haver um arquivo pr\u00f3ximo \u00e0 base que armazene os dados;<\/li>\n<li>para a auditoria, \u00e9 necess\u00e1rio um espa\u00e7o separado para n\u00e3o prejudicar a I\/O dos discos, j\u00e1 que ocupa muito espa\u00e7o;<\/li>\n<li>\u00e0s vezes, funcion\u00e1rios de seguran\u00e7a da informa\u00e7\u00e3o exigem normas estaduais, solicitando a identifica\u00e7\u00e3o conforme essas normas.<\/li>\n<\/ul>\n<p><\/p>\n<h2>Restri\u00e7\u00e3o de acesso aos dados<\/h2>\n<p>\nVamos olhar para as tecnologias que s\u00e3o usadas para proteger dados e controlar o acesso a eles em bancos de dados comerciais e de c\u00f3digo aberto.<\/p>\n<p>O que pode ser usado em geral:<\/p>\n<ol>\n<li>Criptografia e ofusca\u00e7\u00e3o de procedimentos e fun\u00e7\u00f5es (Wrapping) \u2014 ou seja, ferramentas e utilit\u00e1rios que transformam c\u00f3digo leg\u00edvel em ileg\u00edvel. Contudo, depois n\u00e3o ser\u00e1 poss\u00edvel alterar ou refatorar de volta. Essa abordagem \u00e9 \u00e0s vezes necess\u00e1ria, pelo menos no lado do DBMS \u2014 a l\u00f3gica das restri\u00e7\u00f5es de licen\u00e7a ou a l\u00f3gica de autoriza\u00e7\u00e3o \u00e9 criptografada especificamente no n\u00edvel de procedimentos e fun\u00e7\u00f5es.<\/li>\n<li>A limita\u00e7\u00e3o de visibilidade de dados por linha (RLS) \u00e9 quando diferentes usu\u00e1rios veem uma tabela, mas com composi\u00e7\u00f5es de linhas diferentes, ou seja, alguns dados n\u00e3o podem ser mostrados a certos usu\u00e1rios no n\u00edvel das linhas.<\/li>\n<li>A edi\u00e7\u00e3o de dados exibidos (Masking) \u00e9 quando os usu\u00e1rios em uma coluna de tabela veem os dados ou apenas asteriscos, ou seja, para alguns usu\u00e1rios a informa\u00e7\u00e3o estar\u00e1 oculta. A tecnologia determina o que mostrar a cada usu\u00e1rio considerando seu n\u00edvel de acesso.<\/li>\n<li>A segmenta\u00e7\u00e3o de acesso Security DBA\/Application DBA\/DBA refere-se, na verdade, \u00e0 limita\u00e7\u00e3o de acesso ao pr\u00f3prio SGBD, o que significa que os funcion\u00e1rios de seguran\u00e7a da informa\u00e7\u00e3o podem ser separados dos administradores de banco de dados e administradores de aplicativos. Existem poucas tecnologias open source, mas muitas em SGBDs comerciais. Elas s\u00e3o necess\u00e1rias quando h\u00e1 muitos usu\u00e1rios com acesso aos pr\u00f3prios servidores.<\/li>\n<li>Limita\u00e7\u00e3o de acesso a arquivos no n\u00edvel do sistema de arquivos. \u00c9 poss\u00edvel conceder permiss\u00f5es e privil\u00e9gios de acesso a diret\u00f3rios, de forma que cada administrador tenha acesso apenas aos dados necess\u00e1rios.<\/li>\n<li>O acesso obrigat\u00f3rio e a limpeza de mem\u00f3ria s\u00e3o tecnologias raramente utilizadas.<\/li>\n<li>A criptografia de ponta a ponta diretamente no SGBD \u00e9 a criptografia do lado do cliente com gerenciamento de chaves do lado do servidor.<\/li>\n<li>Criptografia de dados. Por exemplo, a criptografia de colunas \u00e9 quando voc\u00ea utiliza um mecanismo que criptografa uma coluna espec\u00edfica do banco de dados.<\/li>\n<\/ol>\n<p><\/p>\n<h3>Como isso afeta o desempenho do SGBD?<\/h3>\n<p>\nVamos analisar o exemplo de criptografia de colunas no PostgreSQL. H\u00e1 um m\u00f3dulo pgcrypto que permite armazenar em formato criptografado campos selecionados. Isso \u00e9 \u00fatil quando apenas alguns dados t\u00eam valor. Para ler os campos criptografados, o cliente envia a chave de descriptografia, o servidor descriptografa os dados e os fornece ao cliente. Sem a chave, ningu\u00e9m conseguir\u00e1 acessar seus dados.<\/p>\n<p><strong>Vamos realizar um teste com pgcrypto<\/strong>. Vamos criar uma tabela com dados criptografados e outra com dados comuns. Abaixo est\u00e3o os comandos para criar as tabelas; na primeira linha, um comando \u00fatil \u2013 a cria\u00e7\u00e3o da extens\u00e3o com o registro do SGBD:<\/p>\n<pre><code class=\"plaintext\">CREATE EXTENSION pgcrypto;\nCREATE TABLE t1 (id integer, text1 text, text2 text);\nCREATE TABLE t2 (id integer, text1 bytea, text2 bytea);\nINSERT INTO t1 (id, text1, text2)\nVALUES (generate_series(1,10000000), generate_series(1,10000000)::text, generate_series(1,10000000)::text);\nINSERT INTO t2 (id, text1, text2) VALUES (\ngenerate_series(1,10000000),\nencrypt(cast(generate_series(1,10000000) AS text)::bytea, 'key'::bytea, 'bf'),\nencrypt(cast(generate_series(1,10000000) AS text)::bytea, 'key'::bytea, 'bf'));<\/code><\/pre>\n<p>\nEm seguida, tentaremos extrair dados de cada tabela e analisaremos os tempos de execu\u00e7\u00e3o.<\/p>\n<p><strong>Extra\u00e7\u00e3o da tabela sem fun\u00e7\u00e3o de criptografia<\/strong>:<\/p>\n<pre><code class=\"plaintext\">psql -c \"timing\" -c \"select * from t1 limit 1000;\" \"host=192.168.220.129 dbname=taskdb\nuser=postgres sslmode=disable\" &gt; 1.txt<\/code><\/pre>\n<p>\nCron\u00f4metro ligado.<\/p>\n<p>\u00a0\u00a0id | text1 | text2<br \/>\n------+------+-+------<br \/>\n 1 | 1 \u00a0 \u00a0 | 1<br \/>\n 2 | 2 \u00a0 \u00a0 | 2<br \/>\n 3 | 3 \u00a0 \u00a0 | 3<br \/>\n\u2026<br \/>\n997 | 997 \u00a0 | 997<br \/>\n998 | 998 \u00a0 | 998<br \/>\n999 | 999 \u00a0 | 999<br \/>\n1000 | 1000\u00a0 | 1000<br \/>\n(1000 linhas)<\/p>\n<p>Tempo: 1,386 ms<\/p>\n<p><strong>Extra\u00e7\u00e3o da tabela com fun\u00e7\u00e3o de criptografia:<\/strong><\/p>\n<pre><code class=\"plaintext\">psql -c \"timing\" -c \"select id, decrypt(text1, 'key'::bytea, 'bf'),\ndecrypt(text2, 'key'::bytea, 'bf') from t2 limit 1000;\"\n\"host=192.168.220.129 dbname=taskdb user=postgres sslmode=disable\" &gt; 2.txt<\/code><\/pre>\n<p>\nCron\u00f4metro ligado.<\/p>\n<p>\u00a0\u00a0id | decrypt | decrypt<br \/>\n------+--------+--------<br \/>\n 1 | x31 | x31<br \/>\n 2 | x32 | x32<br \/>\n 3 | x33 | x33<br \/>\n\u2026<br \/>\n999 | x393939 | x393939<br \/>\n1000 | x31303030 | x31303030<br \/>\n(1000 linhas)<\/p>\n<p>Tempo: 50,203 ms<\/p>\n<p><strong>Resultados do teste<\/strong>:<\/p>\n<p>\u00a0<br \/>\n<strong>Sem criptografia<\/strong><br \/>\n<strong>Pgcrypto (decrypt)<\/strong><\/p>\n<p>Extra\u00e7\u00e3o de 1000 linhas<br \/>\n1,386 ms<br \/>\n50,203 ms<\/p>\n<p>CPU<br \/>\n15%<br \/>\n35%<\/p>\n<p>RAM<br \/>\n\u00a0<br \/>\n+5%<\/p>\n<p>\nA criptografia afeta drasticamente o desempenho. \u00c9 vis\u00edvel que o tempo aumentou, pois as opera\u00e7\u00f5es de descriptografia de dados criptografados (e a descriptografia geralmente est\u00e1 envolta na sua l\u00f3gica) exigem recursos significativos. Portanto, a ideia de criptografar todas as colunas que cont\u00eam dados pode resultar em uma queda de desempenho.<\/p>\n<p>Al\u00e9m disso, a criptografia n\u00e3o \u00e9 uma solu\u00e7\u00e3o m\u00e1gica que resolve todos os problemas. Os dados descriptografados e a chave de descriptografia est\u00e3o no servidor durante o processo de descriptografia e transmiss\u00e3o dos dados. Portanto, as chaves podem ser interceptadas por aqueles que t\u00eam acesso total ao servidor do banco de dados, como um administrador de sistema.<\/p>\n<p>Quando uma coluna inteira para todos os usu\u00e1rios tem uma \u00fanica chave (mesmo que n\u00e3o para todos, mas para um conjunto limitado de clientes), isso nem sempre \u00e9 uma boa pr\u00e1tica. \u00c9 exatamente por isso que se come\u00e7ou a implementar criptografia de ponta a ponta, e nos SGBDs come\u00e7aram a ser considerados m\u00e9todos de criptografia de dados tanto do lado do cliente quanto do servidor, surgiram os famosos armaz\u00e9ns de chaves \u2014 produtos separados que garantem o gerenciamento de chaves do lado do SGBD.<\/p>\n<p><img decoding=\"async\" alt=\"Seguran\u00e7a e SGBDs: o que voc\u00ea deve considerar ao escolher meios de prote\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2020\/05\/cbaa7b9579a65963518ba3cec6114842.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/core\/security-client-side-encryption\/\"><i>Exemplo de criptografia em MongoDB<\/i><\/a><\/noindex><\/p>\n<h2>Mecanismos de seguran\u00e7a em SGBDs comerciais e open source<\/h2>\n<p><\/p>\n<p><strong>Fun\u00e7\u00f5es<\/strong><br \/>\n<strong>Tipo<\/strong><br \/>\n<strong>Pol\u00edtica de Senhas<\/strong><br \/>\n<strong>Auditoria<\/strong><br \/>\n<strong>Prote\u00e7\u00e3o do c\u00f3digo-fonte de procedimentos e fun\u00e7\u00f5es<\/strong><br \/>\n<strong>RLS<\/strong><br \/>\n<strong>Criptografia<\/strong><\/p>\n<p><strong>Oracle<\/strong><br \/>\nComercial<br \/>\n+<br \/>\n+<br \/>\n+<br \/>\n+<br \/>\n+<\/p>\n<p><strong>MsSql<\/strong><br \/>\nComercial<br \/>\n+<br \/>\n+<br \/>\n+<br \/>\n+<br \/>\n+<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.gaz-is.ru\/produkty\/inform-sistemy\/subd-jatoba.html\"><strong>Jatoba<\/strong><\/a><\/noindex><br \/>\nComercial<br \/>\n+<br \/>\n+<br \/>\n+<br \/>\n+<br \/>\nextens\u00f5es<\/p>\n<p><strong>PostgreSQL<\/strong><br \/>\nGratuito<br \/>\nextens\u00f5es<br \/>\nextens\u00f5es<br \/>\n\u2014<br \/>\n+<br \/>\nextens\u00f5es<\/p>\n<p><strong>MongoDb<\/strong><br \/>\nGratuito<br \/>\n\u2014<br \/>\n+<br \/>\n\u2014<br \/>\n\u2014<br \/>\nDispon\u00edvel apenas no MongoDB Enterprise<\/p>\n<p>\nA tabela n\u00e3o \u00e9 de forma alguma completa, mas a situa\u00e7\u00e3o \u00e9 a seguinte: em produtos comerciais, quest\u00f5es de seguran\u00e7a s\u00e3o abordadas h\u00e1 muito tempo, em open source, geralmente utilizam-se algumas extens\u00f5es para seguran\u00e7a, muitas fun\u00e7\u00f5es est\u00e3o em falta, e \u00e0s vezes \u00e9 necess\u00e1rio adicionar algo. Por exemplo, as pol\u00edticas de senhas \u2014 em PostgreSQL existem v\u00e1rias extens\u00f5es.<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/postgres\/postgres\/tree\/master\/contrib\/passwordcheck\">1<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ykrysko\/passwordcheck\">2<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/michaelpq\/pg_plugins\/tree\/master\/passwordcheck_extra\">3<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/devrimgunduz\/passwordcheck_cracklib\">4<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/asio\/password\">5<\/a><\/noindex>), que implementam pol\u00edticas de senha, mas, na minha opini\u00e3o, nenhuma atende a todas as necessidades do segmento corporativo nacional.<\/p>\n<p><strong>O que fazer se n\u00e3o h\u00e1 nada do que voc\u00ea precisa?<\/strong>? \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u0443\u044e \u0421\u0423\u0411\u0414, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a.<\/p>\n<p>Nesse caso, voc\u00ea pode usar solu\u00e7\u00f5es de terceiros que funcionam com diferentes SGBDs, como 'Cripto DB' ou 'Garda DB'. Se estamos falando sobre solu\u00e7\u00f5es do segmento nacional, eles conhecem os padr\u00f5es nacionais melhor do que no open source.<\/p>\n<p>A segunda op\u00e7\u00e3o \u00e9 desenvolver o que voc\u00ea precisa, implementando em n\u00edvel de procedimentos o acesso aos dados e a criptografia no aplicativo. No entanto, a conformidade com os padr\u00f5es nacionais ser\u00e1 mais complexa. Mas, em geral, voc\u00ea pode ocultar os dados como necess\u00e1rio, armazen\u00e1-los no SGBD e depois recuper\u00e1-los e descriptograf\u00e1-los conforme necess\u00e1rio, diretamente no n\u00edvel do aplicativo. Ao fazer isso, pense tamb\u00e9m em como proteger esses algoritmos no aplicativo. Na nossa opini\u00e3o, isso deve ser feito no n\u00edvel do SGBD, pois funcionar\u00e1 mais r\u00e1pido dessa forma.<\/p>\n<p>Esta apresenta\u00e7\u00e3o foi feita pela primeira vez na <noindex><a rel=\"nofollow\" href=\"https:\/\/corp.mail.ru\/ru\/press\/events\/databases-1\/\">@Databases Meetup<\/a><\/noindex> by Mail.ru Cloud Solutions. Veja<noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/redirect?q=https%3A%2F%2Fbit.ly%2F2U57FAd&amp;redir_token=XNWSBN1AKQA2sjhdReDAv6VnkOV8MTU4OTAxNjMwMEAxNTg4OTI5OTAw&amp;v=wigSv2_zWBU&amp;event=video_description\"> v\u00eddeo <\/a><\/noindex>outras apresenta\u00e7\u00f5es e inscreva-se para receber atualiza\u00e7\u00f5es de eventos no Telegram <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/k8s_mail\">Em torno do Kubernetes no Mail.ru Group<\/a><\/noindex>.<\/p>\n<p><strong>O que mais ler sobre o assunto<\/strong>:<\/p>\n<ol>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/472694\/\">Mais do que Ceph: armazenamento em bloco da nuvem MCS<\/a><\/noindex>.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/mcs.mail.ru\/blog\/kakuyu-bazu-dannyh-vybrat-dlya-proekta-chtoby-ne-oshibitsya\">Como escolher um banco de dados para o projeto para n\u00e3o ter que escolher novamente<\/a><\/noindex>.<\/li>\n<\/ol>\n<p>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/500708\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0414\u0435\u043d\u0438\u0441 \u0420\u043e\u0436\u043a\u043e\u0432, \u044f \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u041f\u041e \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u00ab\u0413\u0430\u0437\u0438\u043d\u0444\u043e\u0440\u043c\u0441\u0435\u0440\u0432\u0438\u0441\u00bb, \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430 Jatoba. \u0417\u0430\u043a\u043e\u043d\u043e\u0434\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u043e \u0438 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u043d\u043e\u0440\u043c\u044b \u043d\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043a \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445. \u041d\u0438\u043a\u0442\u043e \u043d\u0435 \u0445\u043e\u0447\u0435\u0442, \u0447\u0442\u043e\u0431\u044b \u0442\u0440\u0435\u0442\u044c\u0438 \u043b\u0438\u0446\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043a\u043e\u043d\u0444\u0438\u0434\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432\u0430\u0436\u043d\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b: \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0438 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f, \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u0430\u043c\u0438 \u043a \u0434\u0430\u043d\u043d\u044b\u043c, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0435 \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":81885,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-81884","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0414\u0435\u043d\u0438\u0441.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/bezopasnost-i-subd-o-chyom-nado-pomnit-podbiraya-sredstva-zashhity\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"pt_PT\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c \u0438 \u0421\u0423\u0411\u0414: \u043e \u0447\u0451\u043c \u043d\u0430\u0434\u043e \u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u043f\u043e\u0434\u0431\u0438\u0440\u0430\u044f \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0437\u0430\u0449\u0438\u0442\u044b | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0414\u0435\u043d\u0438\u0441.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/bezopasnost-i-subd-o-chyom-nado-pomnit-podbiraya-sredstva-zashhity\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-05-17T11:42:18+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-05-17T11:42:18+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Seguran\u00e7a e SGBDs: o que voc\u00ea deve lembrar ao escolher ferramentas de prote\u00e7\u00e3o | ProHoster","description":"Meu nome \u00e9 Denis.","canonical_url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/bezopasnost-i-subd-o-chyom-nado-pomnit-podbiraya-sredstva-zashhity","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pt_PT","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c \u0438 \u0421\u0423\u0411\u0414: \u043e \u0447\u0451\u043c \u043d\u0430\u0434\u043e \u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u043f\u043e\u0434\u0431\u0438\u0440\u0430\u044f \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0437\u0430\u0449\u0438\u0442\u044b | ProHoster","og:description":"\u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0414\u0435\u043d\u0438\u0441.","og:url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/bezopasnost-i-subd-o-chyom-nado-pomnit-podbiraya-sredstva-zashhity","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-05-17T11:42:18+00:00","article:modified_time":"2020-05-17T11:42:18+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"81884","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 15:48:24","updated":"2022-10-05 02:01:28","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/81884","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/comments?post=81884"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/81884\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media\/81885"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=81884"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=81884"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=81884"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}