{"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\/fr\/blog\/administrirovanie\/bezopasnost-i-subd-o-chyom-nado-pomnit-podbiraya-sredstva-zashhity","title":{"rendered":"S\u00e9curit\u00e9 et SGBD : ce qu'il faut garder \u00e0 l'esprit lors du choix des moyens de protection","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h1><img decoding=\"async\" alt=\"S\u00e9curit\u00e9 et SGBD : ce qu&#039;il faut garder \u00e0 l&#039;esprit lors du choix des moyens de protection\" src=\"\/wp-content\/uploads\/2020\/05\/ac49253838e36336af127d71394139d8.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/h1>\n<p>\nJe m'appelle Denis Rojkov, je suis responsable du d\u00e9veloppement logiciel chez \u00ab Gazinformservice \u00bb, dans l'\u00e9quipe produit. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.gaz-is.ru\/produkty\/inform-sistemy\/subd-jatoba.html\">Jatoba<\/a><\/noindex>. La l\u00e9gislation et les normes d'entreprise imposent certaines exigences en mati\u00e8re de s\u00e9curit\u00e9 des donn\u00e9es. Personne ne veut que des tiers aient acc\u00e8s \u00e0 des informations confidentielles, c'est pourquoi les questions suivantes sont essentielles pour tout projet : identification et authentification, gestion des acc\u00e8s aux donn\u00e9es, garantie de l'int\u00e9grit\u00e9 des informations dans le syst\u00e8me, enregistrement des \u00e9v\u00e9nements de s\u00e9curit\u00e9. C'est pourquoi je souhaite parler de certains points int\u00e9ressants concernant la s\u00e9curit\u00e9 des SGBD. <br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nCet article a \u00e9t\u00e9 pr\u00e9par\u00e9 \u00e0 partir d'une pr\u00e9sentation lors de <noindex><a rel=\"nofollow\" href=\"https:\/\/corp.mail.ru\/ru\/press\/events\/databases-1\/\">@Databases Meetup,<\/a><\/noindex> organis\u00e9 par <noindex><a rel=\"nofollow\" href=\"https:\/\/mcs.mail.ru\/\">Mail.ru Cloud Solutions<\/a><\/noindex>. Si vous ne voulez pas lire, vous pouvez regarder :<\/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=\"Lire la vid\u00e9o\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><br \/>\nL'article sera divis\u00e9 en trois parties :<\/p>\n<ul>\n<li>Comment prot\u00e9ger les connexions.<\/li>\n<li>Qu'est-ce qu'un audit des actions et comment enregistrer ce qui se passe du c\u00f4t\u00e9 de la base de donn\u00e9es et de sa connexion.<\/li>\n<li>Comment prot\u00e9ger les donn\u00e9es au sein m\u00eame de la base de donn\u00e9es et quelles technologies sont disponibles pour cela.<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"S\u00e9curit\u00e9 et SGBD : ce qu&#039;il faut garder \u00e0 l&#039;esprit lors du choix des moyens de protection\" src=\"\/wp-content\/uploads\/2020\/05\/fbdca7f4a925b9ceb78de06c6e245b23.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Les trois composantes de la s\u00e9curit\u00e9 des SGBD : protection des connexions, audit des actions et protection des donn\u00e9es.<\/i><\/p>\n<h2>Protection des connexions<\/h2>\n<p>\nOn peut se connecter \u00e0 la base de donn\u00e9es de mani\u00e8re directe ou indirecte via des applications web. En g\u00e9n\u00e9ral, l'utilisateur du c\u00f4t\u00e9 des affaires, c'est-\u00e0-dire la personne qui travaille avec le SGBD, n'interagit pas directement avec celui-ci.<\/p>\n<p>Avant de parler de la protection des connexions, il est important de r\u00e9pondre aux questions cruciales qui d\u00e9terminent comment les mesures de s\u00e9curit\u00e9 seront mises en place :<\/p>\n<ul>\n<li>un utilisateur commercial \u00e9quivaut-il \u00e0 un utilisateur du SGBD ;<\/li>\n<li>l'acc\u00e8s aux donn\u00e9es du SGBD est-il assur\u00e9 uniquement via une API que vous contr\u00f4lez, ou y a-t-il un acc\u00e8s direct aux tables ;<\/li>\n<li>le SGBD est-il isol\u00e9 dans un segment prot\u00e9g\u00e9, qui interagit avec lui et comment ;<\/li>\n<li>utilise-t-on du pooling\/proxy et des couches interm\u00e9diaires qui peuvent modifier les informations sur la mani\u00e8re dont la connexion est \u00e9tablie et qui utilise la base de donn\u00e9es.<\/li>\n<\/ul>\n<p>\nVoyons maintenant quels outils peuvent \u00eatre utilis\u00e9s pour prot\u00e9ger les connexions :<\/p>\n<ol>\n<li>Utilisez des solutions de type pare-feu de base de donn\u00e9es. Un niveau de protection suppl\u00e9mentaire augmentera au minimum la transparence de ce qui se passe dans le SGBD, au maximum \u2014 vous pourrez fournir une protection suppl\u00e9mentaire des donn\u00e9es.<\/li>\n<li>Utilisez des politiques de mots de passe. Leur application d\u00e9pend de la mani\u00e8re dont votre architecture est construite. Dans tous les cas, un seul mot de passe dans le fichier de configuration de l'application web connect\u00e9e \u00e0 la base de donn\u00e9es n'est pas suffisant pour assurer la protection. Il existe plusieurs outils de base de donn\u00e9es permettant de contr\u00f4ler que l'utilisateur et le mot de passe n\u00e9cessitent une actualisation.\n<p>Pour en savoir plus sur les fonctionnalit\u00e9s d'\u00e9valuation des utilisateurs, vous pouvez consulter <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.cloud.oracle.com\/en-us\/iaas\/data-safe\/doc\/user-assessment-reports.html\">ici<\/a><\/noindex>, ainsi que sur l'\u00e9valuation des vuln\u00e9rabilit\u00e9s MS SQL. <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.microsoft.com\/en-us\/sql\/relational-databases\/security\/sql-vulnerability-assessment?view=sql-server-ver15\">ici<\/a><\/noindex>.\u00a0<\/li>\n<li>Enrichissez le contexte de la session avec les informations n\u00e9cessaires. Si la session est opaque, vous ne comprenez pas qui travaille dans la base de donn\u00e9es, il est possible, dans le cadre de l'op\u00e9ration en cours, d'ajouter des informations sur qui fait quoi et pourquoi. Ces informations peuvent \u00eatre vues dans l'audit.<\/li>\n<li>Configurez SSL si vous n'avez pas de s\u00e9paration r\u00e9seau entre la base de donn\u00e9es et les utilisateurs finaux, qu'elle ne se trouve pas dans un VLAN s\u00e9par\u00e9. Dans de tels cas, il est essentiel de prot\u00e9ger le canal entre le consommateur et la base de donn\u00e9es elle-m\u00eame. Des outils de protection existent \u00e9galement parmi les open source.<\/li>\n<\/ol>\n<p><\/p>\n<h3>Quel impact cela aura-t-il sur les performances de la base de donn\u00e9es?<\/h3>\n<p>\nExaminons, \u00e0 l'aide de PostgreSQL, comment SSL affecte la charge CPU, augmente les temps de r\u00e9ponse et r\u00e9duit le TPS, sans gaspiller trop de ressources lorsque cela est activ\u00e9.<\/p>\n<p>Nous chargeons PostgreSQL en utilisant pgbench \u2014 c'est un programme simple pour ex\u00e9cuter des tests de performance. Il ex\u00e9cute plusieurs fois une s\u00e9quence de commandes, \u00e9ventuellement dans des sessions parall\u00e8les de la base de donn\u00e9es, puis calcule la vitesse moyenne des transactions.<\/p>\n<p><strong>Test 1 sans SSL et avec SSL<\/strong> \u2014 une connexion est \u00e9tablie \u00e0 chaque transaction :<\/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>Test 2 sans SSL et avec SSL<\/strong> \u2014 toutes les transactions sont effectu\u00e9es dans une seule connexion :<\/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>Autres param\u00e8tres<\/strong>:<\/p>\n<pre><code class=\"plaintext\">facteur d'\u00e9chelle : 1\nmode de requ\u00eate : simple\nnombre de clients : 10\nnombre de threads : 1\nnombre de transactions par client : 5000\nnombre de transactions r\u00e9ellement trait\u00e9es : 50000\/50000<\/code><\/pre>\n<p>\n<strong>R\u00e9sultats des tests<\/strong>:<\/p>\n<p>\u00a0<br \/>\n<strong>PAS DE SSL<\/strong><br \/>\n<strong>SSL<\/strong><\/p>\n<p><strong>Une connexion est \u00e9tablie \u00e0 chaque transaction<\/strong><\/p>\n<p>latence moyenne<br \/>\n171,915 ms<br \/>\n187,695 ms<\/p>\n<p>tps y compris l'\u00e9tablissement des connexions<br \/>\n58.168112<br \/>\n53.278062<\/p>\n<p>tps excluant l'\u00e9tablissement des connexions<br \/>\n64.084546<br \/>\n58.725846<\/p>\n<p>CPU<br \/>\n24%<br \/>\n28%<\/p>\n<p><strong>Toutes les transactions sont effectu\u00e9es dans une seule connexion<\/strong><\/p>\n<p>latence moyenne<br \/>\n6,722 ms<br \/>\n6,342 ms<\/p>\n<p>tps y compris l'\u00e9tablissement des connexions<br \/>\n1587.657278<br \/>\n1576.792883<\/p>\n<p>tps excluant l'\u00e9tablissement des connexions<br \/>\n1588.380574<br \/>\n1577.694766<\/p>\n<p>CPU<br \/>\n17%<br \/>\n21%<\/p>\n<p>\nAvec de faibles charges, l'impact du SSL est comparable \u00e0 l'erreur de mesure. Si le volume des donn\u00e9es transf\u00e9r\u00e9es est tr\u00e8s important, la situation peut \u00eatre diff\u00e9rente. Si nous \u00e9tablissons une connexion pour chaque transaction (ce qui est rare, car g\u00e9n\u00e9ralement la connexion est partag\u00e9e entre les utilisateurs), et qu'il y a un grand nombre de connexions\/d\u00e9connexions, l'impact peut \u00eatre l\u00e9g\u00e8rement plus important. Cela signifie que des risques de r\u00e9duction de performance peuvent exister, cependant, la diff\u00e9rence n'est pas assez significative pour renoncer \u00e0 la protection.<\/p>\n<p>Notez qu'il y a une grande diff\u00e9rence si l'on compare les modes de fonctionnement : vous travaillez dans le cadre d'une seule session ou de diff\u00e9rentes sessions. C'est compr\u00e9hensible : des ressources sont n\u00e9cessaires pour cr\u00e9er chaque connexion.<\/p>\n<p>Nous avons eu un cas o\u00f9 nous avons connect\u00e9 Zabbix en mode de confiance, donc sans v\u00e9rifier md5, l'authentification n'\u00e9tait pas n\u00e9cessaire. Ensuite, le client a demand\u00e9 d'activer le mode d'authentification md5. Cela a provoqu\u00e9 une charge importante sur le CPU, et la performance a chut\u00e9. Nous avons cherch\u00e9 des solutions d'optimisation. Une des solutions potentielles au probl\u00e8me est de mettre en place une restriction r\u00e9seau, de cr\u00e9er des VLAN distincts pour la base de donn\u00e9es, d'ajouter des param\u00e8tres pour savoir qui se connecte et d'o\u00f9, et de supprimer l'authentification. Il est \u00e9galement possible d'optimiser les param\u00e8tres d'authentification pour r\u00e9duire les co\u00fbts lors de l'activation de l'authentification, mais dans l'ensemble, l'utilisation de diff\u00e9rentes m\u00e9thodes d'authentification affecte la performance et n\u00e9cessite de prendre en compte ces facteurs lors de la conception de la puissance de calcul des serveurs (hardware) pour la base de donn\u00e9es.<\/p>\n<p>Conclusion : dans certaines solutions, m\u00eame de petits d\u00e9tails sur l'authentification peuvent avoir un impact significatif sur le projet, et il est regrettable que cela ne devienne apparent qu'\u00e0 la mise en production.<\/p>\n<h2>Audit des actions<\/h2>\n<p>\nL'audit peut ne pas concerner uniquement la base de donn\u00e9es. L'audit consiste \u00e0 obtenir des informations sur ce qui se passe dans diff\u00e9rents segments. Cela peut \u00eatre un pare-feu de base de donn\u00e9es ou le syst\u00e8me d'exploitation sur lequel la base de donn\u00e9es est construite.<\/p>\n<p>Dans les bases de donn\u00e9es commerciales de niveau Enterprise, l'audit fonctionne bien, tandis que dans les solutions open source, ce n'est pas toujours le cas. Voici ce qui est disponible dans PostgreSQL :<\/p>\n<ul>\n<li>journal par d\u00e9faut \u2014 journalisation int\u00e9gr\u00e9e ;<\/li>\n<li>extensions : pgaudit \u2014 si la journalisation par d\u00e9faut ne suffit pas, vous pouvez utiliser des param\u00e8tres sp\u00e9cifiques qui r\u00e9pondent \u00e0 certaines t\u00e2ches.<\/li>\n<\/ul>\n<p>\n<b>Compl\u00e9ment au rapport dans la vid\u00e9o :<\/b><\/p>\n<p>\u00abL'enregistrement de base des op\u00e9rateurs peut \u00eatre effectu\u00e9 avec un outil de journalisation standard en d\u00e9finissant log_statement = all.<\/p>\n<p>Ceci est acceptable pour le suivi et d'autres types d'utilisation, mais cela ne fournit pas le niveau de d\u00e9tail g\u00e9n\u00e9ralement n\u00e9cessaire pour un audit.<\/p>\n<p>Il ne suffit pas d'avoir une liste de toutes les op\u00e9rations effectu\u00e9es sur la base de donn\u00e9es.<\/p>\n<p>Il doit \u00e9galement \u00eatre possible de retrouver des d\u00e9clarations sp\u00e9cifiques qui int\u00e9ressent l'auditeur.<\/p>\n<p>L'outil de journalisation standard montre ce que l'utilisateur a demand\u00e9, tandis que pgAudit se concentre sur les d\u00e9tails de ce qui s'est pass\u00e9 lorsque la base de donn\u00e9es ex\u00e9cutait la requ\u00eate.<\/p>\n<p>Par exemple, l'auditeur peut vouloir s'assurer qu'une table sp\u00e9cifique a \u00e9t\u00e9 cr\u00e9\u00e9e dans une fen\u00eatre de maintenance document\u00e9e.<\/p>\n<p>Cela peut sembler une t\u00e2che simple pour un audit de base et grep, mais que faire si vous vous retrouvez avec quelque chose comme cet exemple (d\u00e9lib\u00e9r\u00e9ment d\u00e9routant) :<\/p>\n<p>DO $$<br \/>\nBEGIN<br \/>\n EXECUTE 'CREATE TABLE import' || 'ant_table (id INT)';<br \/>\nEND $$;<\/p>\n<p>La journalisation standard vous donnera ceci :<\/p>\n<p>LOG: instruction : DO $$<br \/>\nBEGIN<br \/>\n EXECUTE 'CREATE TABLE import' || 'ant_table (id INT)';<br \/>\nEND $$;<\/p>\n<p>Il semble que pour trouver la table d'int\u00e9r\u00eat, une certaine connaissance du code sera n\u00e9cessaire dans les cas o\u00f9 les tables sont cr\u00e9\u00e9es dynamiquement.<\/p>\n<p>Ce n'est pas id\u00e9al, car il serait pr\u00e9f\u00e9rable de rechercher simplement par nom de table.<\/p>\n<p>C'est l\u00e0 que pgAudit sera utile.<\/p>\n<p>Pour la m\u00eame entr\u00e9e, il produira cette sortie dans le journal :<\/p>\n<p>AUDIT: SESSION,33,1,FONCTION,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>Non seulement le bloc DO est enregistr\u00e9, mais \u00e9galement le texte complet de CREATE TABLE avec le type d'instruction, le type d'objet et le nom complet, ce qui facilite la recherche.<\/p>\n<p>Lors de la journalisation des instructions SELECT et DML, pgAudit peut \u00eatre configur\u00e9 pour enregistrer une entr\u00e9e distincte pour chaque relation r\u00e9f\u00e9renc\u00e9e dans l'instruction.<\/p>\n<p>Aucun parsing n'est n\u00e9cessaire pour trouver toutes les instructions concernant une table sp\u00e9cifique (<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/pgaudit\/pgaudit\/blob\/master\/README.md\">*<\/a><\/noindex>)\u00bb.<\/p>\n<h3>Quel impact cela aura-t-il sur les performances de la base de donn\u00e9es?<\/h3>\n<p>\nFaisons des tests avec l'activation de l'audit complet et voyons ce que cela donnera sur la performance de PostgreSQL. Nous activerons la journalisation maximale de la base de donn\u00e9es pour tous les param\u00e8tres.<\/p>\n<p>Dans le fichier de configuration, nous ne changeons presque rien, l'important \u00e9tant d'activer le mode debug5 pour obtenir un maximum d'informations.<\/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 = on<br \/>\nlog_checkpoints = on<br \/>\nlog_connections = on<br \/>\nlog_disconnections = on<br \/>\nlog_duration = on<br \/>\nlog_hostname = on<br \/>\nlog_lock_waits = on<br \/>\nlog_replication_commands = on<br \/>\nlog_temp_files = 0<br \/>\nlog_timezone = 'Europe\/Moscow'<\/p>\n<p>\nSur la base de donn\u00e9es PostgreSQL avec les param\u00e8tres 1 CPU, 2,8 GHz, 2 Go de RAM, 40 Go de HDD, nous r\u00e9alisons trois tests de charge, en utilisant les commandes :<\/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>R\u00e9sultats des tests :<\/strong><\/p>\n<p><strong>Sans journalisation<\/strong><br \/>\n<strong>Avec journalisation<\/strong><\/p>\n<p>Temps total de remplissage de la base de donn\u00e9es<br \/>\n43,74 s<br \/>\n53,23 s<\/p>\n<p>RAM<br \/>\n24%<br \/>\n40%<\/p>\n<p>CPU<br \/>\n72%<br \/>\n91%<\/p>\n<p><strong>Test 1 (50 connexions)<\/strong><\/p>\n<p>Nombre de transactions en 10 minutes<br \/>\n74169<br \/>\n32445<\/p>\n<p>Transactions\/s<br \/>\n123<br \/>\n54<\/p>\n<p>D\u00e9lai moyen<br \/>\n405 ms<br \/>\n925 ms<\/p>\n<p><strong>Test 2 (150 connexions sur 100 possibles)<\/strong><\/p>\n<p>Nombre de transactions en 10 minutes<br \/>\n81727<br \/>\n31429<\/p>\n<p>Transactions\/s<br \/>\n136<br \/>\n52<\/p>\n<p>D\u00e9lai moyen<br \/>\n550 ms<br \/>\n1432 ms<\/p>\n<p><strong>Concernant les tailles<\/strong><\/p>\n<p>Taille de la base de donn\u00e9es<br \/>\n2251 Mo<br \/>\n2262 Mo<\/p>\n<p>Taille des journaux de la base de donn\u00e9es<br \/>\n0 Mo<br \/>\n4587 Mo<\/p>\n<p>\nEn fin de compte : un audit complet n'est pas tr\u00e8s b\u00e9n\u00e9fique. Les donn\u00e9es provenant de l'audit vont avoir un volume \u00e9quivalent \u00e0 celui des donn\u00e9es dans la base de donn\u00e9es elle-m\u00eame, voire plus. Ce volume de journalisation g\u00e9n\u00e9r\u00e9 lors de l'utilisation de la base de donn\u00e9es est un probl\u00e8me courant en production.<\/p>\n<p>Regardons d'autres param\u00e8tres :<\/p>\n<ul>\n<li>La vitesse ne change pas beaucoup : sans journalisation \u2014 43,74 s, avec journalisation \u2014 53,23 s.<\/li>\n<li>Les performances en RAM et CPU vont diminuer, car un fichier d'audit doit \u00eatre cr\u00e9\u00e9. Cela est \u00e9galement visible en production.<\/li>\n<\/ul>\n<p>\nAvec l'augmentation du nombre de connexions, il est \u00e9vident que les indicateurs vont l\u00e9g\u00e8rement se d\u00e9grader.<\/p>\n<p>Dans les entreprises, l'audit est encore plus complexe :<\/p>\n<ul>\n<li>il y a beaucoup de donn\u00e9es ;<\/li>\n<li>l'audit est n\u00e9cessaire non seulement via syslog dans SIEM, mais aussi dans des fichiers : au cas o\u00f9 il y aurait un probl\u00e8me avec syslog, un fichier proche de la base doit enregistrer les donn\u00e9es ;<\/li>\n<li>pour l'audit, un espace de stockage s\u00e9par\u00e9 est n\u00e9cessaire, afin de ne pas surcharger les disques I\/O, car cela prend beaucoup de place ;<\/li>\n<li>il arrive que les employ\u00e9s en charge de la s\u00e9curit\u00e9 de l'information exigent des normes de conformit\u00e9, comme GOST, pour une identification conforme.<\/li>\n<\/ul>\n<p><\/p>\n<h2>Restriction d'acc\u00e8s aux donn\u00e9es<\/h2>\n<p>\nExaminons les technologies utilis\u00e9es pour prot\u00e9ger les donn\u00e9es et y acc\u00e9der dans les bases de donn\u00e9es commerciales et open source.<\/p>\n<p>Qu'est-ce qui peut \u00eatre utilis\u00e9 en g\u00e9n\u00e9ral :<\/p>\n<ol>\n<li>Chiffrement et obfuscation des proc\u00e9dures et fonctions (Wrapping) \u2014 c'est-\u00e0-dire des outils distincts qui rendent le code lisible illisible. Cependant, il ne peut pas \u00eatre modifi\u00e9 ou refactoris\u00e9 en arri\u00e8re. Cette approche est parfois n\u00e9cessaire, au minimum, du c\u00f4t\u00e9 de la base de donn\u00e9es \u2014 la logique des restrictions de licence ou la logique d'autorisation est chiffr\u00e9e pr\u00e9cis\u00e9ment au niveau des proc\u00e9dures et fonctions.<\/li>\n<li>La restriction de visibilit\u00e9 des donn\u00e9es par ligne (RLS) signifie que diff\u00e9rents utilisateurs voient la m\u00eame table, mais avec des lignes diff\u00e9rentes, c'est-\u00e0-dire que certaines informations ne peuvent pas \u00eatre affich\u00e9es au niveau des lignes pour certains utilisateurs.<\/li>\n<li>L'\u00e9dition des donn\u00e9es affich\u00e9es (Masking) consiste \u00e0 faire en sorte que les utilisateurs d'une colonne de la table voient soit les donn\u00e9es, soit uniquement des \u00e9toiles. Ainsi, pour certains utilisateurs, l'information sera masqu\u00e9e. La technologie d\u00e9termine quelles informations montrer \u00e0 quel utilisateur en fonction de son niveau d'acc\u00e8s.<\/li>\n<li>La s\u00e9paration des acc\u00e8s Security DBA\/Application DBA\/DBA concerne principalement la restriction d'acc\u00e8s \u00e0 la base de donn\u00e9es elle-m\u00eame, ce qui permet de s\u00e9parer les employ\u00e9s de la s\u00e9curit\u00e9 des administrateurs de bases de donn\u00e9es et des administrateurs d'applications. Dans les solutions open source, il existe peu de technologies, alors qu'il y en a beaucoup dans les bases de donn\u00e9es commerciales. Elles sont n\u00e9cessaires lorsqu'il y a de nombreux utilisateurs ayant acc\u00e8s aux serveurs en question.<\/li>\n<li>Restriction d'acc\u00e8s aux fichiers au niveau du syst\u00e8me de fichiers. Il est possible de d\u00e9livrer des droits, des privil\u00e8ges d'acc\u00e8s \u00e0 des r\u00e9pertoires, de sorte que chaque administrateur n'ait acc\u00e8s qu'aux donn\u00e9es n\u00e9cessaires.<\/li>\n<li>L'acc\u00e8s mandat\u00e9 et le nettoyage de la m\u00e9moire sont des technologies rarement mises en \u0153uvre.<\/li>\n<li>Le chiffrement de bout en bout des bases de donn\u00e9es signifie le chiffrement c\u00f4t\u00e9 client avec gestion des cl\u00e9s c\u00f4t\u00e9 serveur.<\/li>\n<li>Chiffrement des donn\u00e9es. Par exemple, le chiffrement au niveau des colonnes consiste \u00e0 utiliser un m\u00e9canisme qui chiffre une colonne sp\u00e9cifique de la base.<\/li>\n<\/ol>\n<p><\/p>\n<h3>Comment cela impacte-t-il les performances de la base de donn\u00e9es ?<\/h3>\n<p>\nPrenons l'exemple du chiffrement par colonne dans PostgreSQL. Il existe un module pgcrypto, qui permet de stocker des champs s\u00e9lectionn\u00e9s sous forme chiffr\u00e9e. Cela est utile lorsque seule la valeur de certaines donn\u00e9es est importante. Pour lire des champs chiffr\u00e9s, le client transmet la cl\u00e9 de d\u00e9chiffrement, le serveur d\u00e9chiffre les donn\u00e9es et les renvoie au client. Sans cl\u00e9, personne ne peut agir sur vos donn\u00e9es.<\/p>\n<p><strong>Nous allons effectuer un test avec pgcrypto.<\/strong>. Cr\u00e9ons une table avec des donn\u00e9es chiffr\u00e9es et une autre avec des donn\u00e9es normales. Ci-dessous les commandes pour cr\u00e9er les tables, la toute premi\u00e8re ligne contient une commande utile : la cr\u00e9ation de l'extension avec l'enregistrement de la base de donn\u00e9es :<\/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>\nEnsuite, nous allons essayer de faire une s\u00e9lection de donn\u00e9es dans chaque table et observer les temps d'ex\u00e9cution.<\/p>\n<p><strong>S\u00e9lection de la table sans fonction de chiffrement<\/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>\nLe chronom\u00e8tre est lanc\u00e9.<\/p>\n<p>\u00a0\u00a0id | text1 | text2<br \/>\n\u2014\u2014+\u2014\u2014\u2014+\u2014\u2014\u2014-<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 lignes)<\/p>\n<p>Temps : 1,386 ms<\/p>\n<p><strong>S\u00e9lection de la table avec fonction de chiffrement :<\/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>\nLe chronom\u00e8tre est lanc\u00e9.<\/p>\n<p>\u00a0\u00a0id | decrypt | decrypt<br \/>\n\u2014\u2014+\u2014\u2014\u2014-\u2014\u2014\u2014-\u2014\u2014\u2014<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 lignes)<\/p>\n<p>Temps : 50,203 ms<\/p>\n<p><strong>R\u00e9sultats des tests<\/strong>:<\/p>\n<p>\u00a0<br \/>\n<strong>Sans chiffrement<\/strong><br \/>\n<strong>Pgcrypto (d\u00e9chiffrer)<\/strong><\/p>\n<p>S\u00e9lection de 1000 lignes<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>\nLe chiffrement impacte fortement la performance. On remarque que le temps a augment\u00e9, car les op\u00e9rations de d\u00e9chiffrement des donn\u00e9es chiffr\u00e9es (et le d\u00e9chiffrement est g\u00e9n\u00e9ralement entour\u00e9 par votre logique) n\u00e9cessitent des ressources consid\u00e9rables. Donc, l'id\u00e9e de chiffrer toutes les colonnes contenant des donn\u00e9es peut entra\u00eener une baisse de performance.<\/p>\n<p>Cependant, le chiffrement n'est pas une solution miracle r\u00e9solvant tous les probl\u00e8mes. Les donn\u00e9es d\u00e9chiffr\u00e9es et la cl\u00e9 de d\u00e9chiffrement, lors du d\u00e9chiffrement et du transfert des donn\u00e9es, se trouvent sur le serveur. Par cons\u00e9quent, les cl\u00e9s peuvent \u00eatre intercept\u00e9es par quiconque a un acc\u00e8s complet au serveur de base de donn\u00e9es, comme un administrateur syst\u00e8me.<\/p>\n<p>Quand une cl\u00e9 est utilis\u00e9e pour toute une colonne pour tous les utilisateurs (m\u00eame si ce n'est pas pour tous, mais pour un ensemble restreint de clients), ce n'est pas toujours une bonne chose. C'est pourquoi on a commenc\u00e9 \u00e0 mettre en place un chiffrement de bout en bout, des options de chiffrement des donn\u00e9es du c\u00f4t\u00e9 client et serveur ont \u00e9t\u00e9 \u00e9tudi\u00e9es dans les SGBD, et on voit appara\u00eetre ces fameux syst\u00e8mes de gestion de cl\u00e9s \u2014 des produits s\u00e9par\u00e9s qui assurent la gestion des cl\u00e9s du c\u00f4t\u00e9 du SGBD.<\/p>\n<p><img decoding=\"async\" alt=\"S\u00e9curit\u00e9 et SGBD : ce qu&#039;il faut garder \u00e0 l&#039;esprit lors du choix des moyens de protection\" 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>Exemple de tel chiffrement dans MongoDB<\/i><\/a><\/noindex><\/p>\n<h2>Moyens de s\u00e9curit\u00e9 dans les SGBD commerciaux et open source<\/h2>\n<p><\/p>\n<p><strong>Fonctions<\/strong><br \/>\n<strong>Type<\/strong><br \/>\n<strong>Politique de mot de passe<\/strong><br \/>\n<strong>Audit<\/strong><br \/>\n<strong>Protection du code source des proc\u00e9dures et fonctions<\/strong><br \/>\n<strong>RLS<\/strong><br \/>\n<strong>Chiffrement<\/strong><\/p>\n<p><strong>Oracle<\/strong><br \/>\nCommercial<br \/>\n+<br \/>\n+<br \/>\n+<br \/>\n+<br \/>\n+<\/p>\n<p><strong>MsSql<\/strong><br \/>\nCommercial<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 \/>\nCommercial<br \/>\n+<br \/>\n+<br \/>\n+<br \/>\n+<br \/>\nextensions<\/p>\n<p><strong>PostgreSQL<\/strong><br \/>\nGratuit<br \/>\nextensions<br \/>\nextensions<br \/>\n\u2014<br \/>\n+<br \/>\nextensions<\/p>\n<p><strong>MongoDb<\/strong><br \/>\nGratuit<br \/>\n\u2014<br \/>\n+<br \/>\n\u2014<br \/>\n\u2014<br \/>\nDisponible uniquement dans MongoDB Enterprise<\/p>\n<p>\nLe tableau n'est pas du tout complet, mais la situation est la suivante : dans les produits commerciaux, les questions de s\u00e9curit\u00e9 sont trait\u00e9es depuis longtemps, tandis que dans l'open source, on utilise g\u00e9n\u00e9ralement des surcouches pour la s\u00e9curit\u00e9, manquant souvent de nombreuses fonctionnalit\u00e9s et devant parfois ajouter des \u00e9l\u00e9ments. Par exemple, les politiques de mots de passe \u2014 dans PostgreSQL, il existe de nombreuses extensions diff\u00e9rentes (<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>), qui mettent en \u0153uvre des politiques de mot de passe, mais \u00e0 mon avis, aucun ne couvre tous les besoins du segment d'entreprise local.<\/p>\n<p><strong>Que faire si rien de ce qu'il faut n'est disponible ?<\/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>On peut alors utiliser des solutions tierces qui fonctionnent avec diff\u00e9rentes SGBD, comme \u00ab Crypto DB \u00bb ou \u00ab Garda DB \u00bb. En ce qui concerne les solutions du segment local, ils connaissent mieux les normes GOST que dans l'open source.<\/p>\n<p>La deuxi\u00e8me option consiste \u00e0 \u00e9crire soi-m\u00eame ce dont vous avez besoin, \u00e0 mettre en \u0153uvre l'acc\u00e8s aux donn\u00e9es et le chiffrement au niveau des proc\u00e9dures dans l'application. Cependant, cela sera plus compliqu\u00e9 avec GOST. Mais dans l'ensemble, vous pouvez masquer les donn\u00e9es comme il se doit, les stocker dans la SGBD, puis les r\u00e9cup\u00e9rer et les d\u00e9chiffrer comme n\u00e9cessaire, directement au niveau de l'application. Pensez d\u00e8s le d\u00e9but \u00e0 la fa\u00e7on dont vous allez prot\u00e9ger ces algorithmes dans l'application. \u00c0 notre avis, cela doit \u00eatre fait au niveau de la SGBD, car cela fonctionnera plus rapidement.<\/p>\n<p>Cette pr\u00e9sentation a \u00e9t\u00e9 prononc\u00e9e pour la premi\u00e8re fois \u00e0 <noindex><a rel=\"nofollow\" href=\"https:\/\/corp.mail.ru\/ru\/press\/events\/databases-1\/\">@Databases Meetup<\/a><\/noindex> par Mail.ru Cloud Solutions. Voir<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\"> vid\u00e9o <\/a><\/noindex>d'autres pr\u00e9sentations et abonnez-vous aux annonces des \u00e9v\u00e9nements sur Telegram. <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/k8s_mail\">Autour de Kubernetes dans Mail.ru Group.<\/a><\/noindex>.<\/p>\n<p><strong>Suggestions de lecture suppl\u00e9mentaires<\/strong>:<\/p>\n<ol>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/472694\/\">Plus que Ceph : stockage en blocs dans le cloud 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\">Comment choisir une base de donn\u00e9es pour un projet afin de ne pas avoir \u00e0 choisir \u00e0 nouveau ?<\/a><\/noindex>.<\/li>\n<\/ol>\n<p>Source : <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.2 - 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\/fr\/blog\/administrirovanie\/bezopasnost-i-subd-o-chyom-nado-pomnit-podbiraya-sredstva-zashhity\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\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\/fr\/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\udd47S\u00e9curit\u00e9 et SGBD : ce qu'il faut garder \u00e0 l'esprit en choisissant des moyens de protection | ProHoster","description":"Je m'appelle Denis.","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/bezopasnost-i-subd-o-chyom-nado-pomnit-podbiraya-sredstva-zashhity","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"fr_FR","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\/fr\/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\/fr\/wp-json\/wp\/v2\/posts\/81884","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=81884"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/81884\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media\/81885"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=81884"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=81884"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=81884"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}