{"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\/da\/blog\/administrirovanie\/bezopasnost-i-subd-o-chyom-nado-pomnit-podbiraya-sredstva-zashhity","title":{"rendered":"Sikkerhed og database-systemer: hvad man skal huske p\u00e5, n\u00e5r man v\u00e6lger beskyttelsesmidler","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h1><img decoding=\"async\" alt=\"Sikkerhed og database-systemer: hvad man skal huske p\u00e5, n\u00e5r man v\u00e6lger beskyttelsesmidler\" src=\"\/wp-content\/uploads\/2020\/05\/ac49253838e36336af127d71394139d8.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/h1>\n<p>\nMit navn er Denis Rozhkov, jeg er leder af softwareudvikling i virksomheden \u00abGazinformservice\u00bb, i produktteamet. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.gaz-is.ru\/produkty\/inform-sistemy\/subd-jatoba.html\">Jatoba<\/a><\/noindex>. Lovgivning og virksomhedsnormer stiller visse krav til sikkerheden om opbevaring af data. Ingen \u00f8nsker, at tredjeparter f\u00e5r adgang til fortrolige oplysninger, derfor er f\u00f8lgende sp\u00f8rgsm\u00e5l vigtige for ethvert projekt: identifikation og autentificering, adgangsstyring til data, sikring af informationsintegritet i systemet, registrering af sikkerhedsh\u00e6ndelser. Derfor vil jeg gerne tale om nogle interessante aspekter vedr\u00f8rende sikkerheden af database-systemer. <br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nArtiklen er forberedt ud fra et opl\u00e6g til <noindex><a rel=\"nofollow\" href=\"https:\/\/corp.mail.ru\/ru\/press\/events\/databases-1\/\">@Databases Meetup,<\/a><\/noindex> arrangeret <noindex><a rel=\"nofollow\" href=\"https:\/\/mcs.mail.ru\/\">Mail.ru Cloud Solutions<\/a><\/noindex>. Hvis du ikke \u00f8nsker at l\u00e6se, kan du se:<\/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=\"Afspil video\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><br \/>\nArtiklen vil have tre dele:<\/p>\n<ul>\n<li>Hvordan man beskytter forbindelser.<\/li>\n<li>Hvad er handlingaudit, og hvordan man registrerer, hvad der sker fra databasen og dens forbindelser.<\/li>\n<li>Hvordan man beskytter data i selve databasen, og hvilke teknologier der findes til dette.<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Sikkerhed og database-systemer: hvad man skal huske p\u00e5, n\u00e5r man v\u00e6lger beskyttelsesmidler\" src=\"\/wp-content\/uploads\/2020\/05\/fbdca7f4a925b9ceb78de06c6e245b23.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Tre elementer af sikkerhed i database-systemer: beskyttelse af forbindelser, handlingaudit og databeskyttelse.<\/i><\/p>\n<h2>Beskyttelse af forbindelser<\/h2>\n<p>\nMan kan oprette forbindelse til databasen b\u00e5de direkte og indirekte gennem webapplikationer. Normalt interagerer en bruger fra forretningen, det vil sige en person, der arbejder med database-systemet, ikke direkte med det.<\/p>\n<p>Inden vi taler om beskyttelse af forbindelser, skal vi besvare nogle vigtige sp\u00f8rgsm\u00e5l, der p\u00e5virker, hvordan sikkerhedsforanstaltningerne vil blive tilrettelagt:<\/p>\n<ul>\n<li>er \u00e9n forretningsbruger lig med \u00e9n databasebruger?<\/li>\n<li>er adgangen til data fra database-systemet kun sikret gennem et API, som du kontrollerer, eller er der direkte adgang til tabellerne?<\/li>\n<li>er database-systemet adskilt i et sikkert segment, og hvem interagerer med det, og hvordan?<\/li>\n<li>bruges der pooling\/proxy og mellemlag, der kan \u00e6ndre oplysninger om, hvordan forbindelsen er opbygget, og hvem der bruger databasen?<\/li>\n<\/ul>\n<p>\nLad os nu se, hvilke v\u00e6rkt\u00f8jer der kan anvendes til beskyttelse af forbindelser:<\/p>\n<ol>\n<li>Brug database-firewall-l\u00f8sninger. Et ekstra lag af beskyttelse \u00f8ger i det mindste gennemsigtigheden af, hvad der sker i database-systemet, og i bedste fald vil du kunne sikre yderligere databeskyttelse.<\/li>\n<li>Brug adgangskodepolitikker. Anvendelsen afh\u00e6nger af, hvordan din arkitektur er struktureret. I hvert fald er \u00e9n adgangskode i konfigurationsfilen til webapplikationen, der forbinder til databasen, utilstr\u00e6kkelig til beskyttelse. Der findes en r\u00e6kke DBA-v\u00e6rkt\u00f8jer, der g\u00f8r det muligt at kontrollere, at brugeren og adgangskoden kr\u00e6ver opdatering.\n<p>Du kan l\u00e6se mere om funktionerne til brugerbed\u00f8mmelse <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.cloud.oracle.com\/en-us\/iaas\/data-safe\/doc\/user-assessment-reports.html\">her<\/a><\/noindex>, og du kan ogs\u00e5 l\u00e6re om 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\">her<\/a><\/noindex>.\u00a0<\/li>\n<li>Berig sessionskonteksten med den n\u00f8dvendige information. Hvis sessionen er uigennemsigtig, forst\u00e5r du ikke, hvem der arbejder inden for dens rammer i databasen; du kan i forbindelse med den udf\u00f8rte operation supplere oplysninger om, hvem der g\u00f8r hvad, og hvorfor. Disse oplysninger kan ses i audit-loggen.<\/li>\n<li>Konfigurer SSL, hvis du ikke har netv\u00e6rksadskillelse mellem databasen og slutbrugerne, og den ikke er i et separat VLAN. I s\u00e5danne tilf\u00e6lde er det n\u00f8dvendigt at beskytte forbindelsen mellem forbrugeren og selve databasen. Beskyttelsesv\u00e6rkt\u00f8jer findes ogs\u00e5 blandt open source.<\/li>\n<\/ol>\n<p><\/p>\n<h3>Hvordan vil dette p\u00e5virke databasens ydeevne?<\/h3>\n<p>\nLad os se p\u00e5 et eksempel med PostgreSQL, hvordan SSL p\u00e5virker CPU-belastningen, \u00f8ger latensen og mindsker TPS, og om det ikke vil tage for mange ressourcer, hvis det aktiveres.<\/p>\n<p>Vi belaster PostgreSQL med pgbench \u2014 et simpelt program til k\u00f8rsel af ydeevnetests. Det udf\u00f8rer gentagne gange den samme sekvens af kommandoer, eventuelt i parallelle database-sessioner, og beregner derefter den gennemsnitlige transaktionshastighed.<\/p>\n<p><strong>Test 1 uden SSL og med brug af SSL<\/strong> \u2014 forbindelsen etableres ved hver transaktion:<\/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 uden SSL og med brug af SSL<\/strong> \u2014 alle transaktioner udf\u00f8res i \u00e9n forbindelse:<\/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>De \u00f8vrige indstillinger<\/strong>:<\/p>\n<pre><code class=\"plaintext\">scalings faktor: 1\nforesp\u00f8rgselsmode: simpel\nantal klienter: 10\nantal tr\u00e5de: 1\nantal transaktioner per klient: 5000\nantal transaktioner der faktisk blev behandlet: 50000\/50000<\/code><\/pre>\n<p>\n<strong>Ydeevnetest<\/strong>:<\/p>\n<p>\u00a0<br \/>\n<strong>INGEN SSL<\/strong><br \/>\n<strong>SSL<\/strong><\/p>\n<p><strong>Der etableres forbindelse ved hver transaktion<\/strong><\/p>\n<p>gennemsnitlig latens<br \/>\n171.915 ms<br \/>\n187.695 ms<\/p>\n<p>tps inklusive forbindelser, der etableres<br \/>\n58.168112<br \/>\n53.278062<\/p>\n<p>tps eksklusive forbindelser, der etableres<br \/>\n64.084546<br \/>\n58.725846<\/p>\n<p>CPU<br \/>\n24%<br \/>\n28%<\/p>\n<p><strong>Alle transaktioner udf\u00f8res i \u00e9n forbindelse<\/strong><\/p>\n<p>gennemsnitlig latens<br \/>\n6.722 ms<br \/>\n6.342 ms<\/p>\n<p>tps inklusive forbindelser, der etableres<br \/>\n1587.657278<br \/>\n1576.792883<\/p>\n<p>tps eksklusive forbindelser, der etableres<br \/>\n1588.380574<br \/>\n1577.694766<\/p>\n<p>CPU<br \/>\n17%<br \/>\n21%<\/p>\n<p>\nVed lave belastninger er indflydelsen fra SSL sammenlignelig med m\u00e5lefejl. Hvis m\u00e6ngden af overf\u00f8rte data er meget stor, kan situationen v\u00e6re anderledes. Hvis vi etablerer en forbindelse for hver transaktion (hvilket sj\u00e6ldent sker, da forbindelser normalt deles mellem brugerne), har du mange forbindelser\/afbrydelser, og indflydelsen kan v\u00e6re lidt st\u00f8rre. Det vil sige, at der kan v\u00e6re risici for et fald i ydeevnen, men forskellen er ikke s\u00e5 stor, at man ikke b\u00f8r bruge beskyttelse.<\/p>\n<p>Bem\u00e6rk, at der er en betydelig forskel, hvis man sammenligner driftsformer: inden for \u00e9n session arbejder du, eller de er forskellige. Dette er forst\u00e5eligt: ressourcer bruges til at oprette hver forbindelse.<\/p>\n<p>Vi havde et tilf\u00e6lde, hvor vi tilsluttede Zabbix i trust-tilstand, hvilket betyder, at md5 ikke blev kontrolleret, og der var ikke behov for autentificering. Senere bad kunden om at inkludere md5-autentificering. Dette medf\u00f8rte en stor belastning p\u00e5 CPU'en, og ydeevnen faldt. Vi begyndte at lede efter optimeringsmuligheder. En af de mulige l\u00f8sninger p\u00e5 problemet er at implementere netv\u00e6rksbegr\u00e6nsninger, oprette separate VLAN'er for databasen, tilf\u00f8je indstillinger, s\u00e5 det er klart, hvem der forbindes fra, og fjerne autentificeringen. Man kan ogs\u00e5 optimere autentificeringsindstillingerne for at mindske omkostningerne ved at aktivere autentificeringen, men generelt p\u00e5virker brugen af forskellige autentificeringsmetoder ydeevnen og kr\u00e6ver, at disse faktorer tages i betragtning ved design af serverens (hardware) beregningskraft til databasen.<\/p>\n<p>Konklusion: i flere l\u00f8sninger kan selv sm\u00e5 nuancer i autentificeringen have stor indflydelse p\u00e5 projektet, og det er skidt, n\u00e5r dette f\u00f8rst bliver klart ved implementeringen i produktion.<\/p>\n<h2>Handlingsrevision<\/h2>\n<p>\nRevision kan ikke kun v\u00e6re for databasen. Revision er at f\u00e5 information om, hvad der sker p\u00e5 forskellige segmenter. Det kan v\u00e6re b\u00e5de databasefirewall og operativsystemet, som databasen er bygget p\u00e5.<\/p>\n<p>I kommercielle databasesystemer i Enterprise-klassen er revision i orden, men det er ikke altid tilf\u00e6ldet med open source. Her er hvad der findes i PostgreSQL:<\/p>\n<ul>\n<li>default log \u2014 indbygget logning;<\/li>\n<li>udvidelser: pgaudit \u2014 hvis du ikke er tilfreds med den standard logning, kan du bruge separate indstillinger, der l\u00f8ser en del opgaver.<\/li>\n<\/ul>\n<p>\n<b>Till\u00e6g til rapporten i video:<\/b><\/p>\n<p>\u00abBasisregistreringen af operat\u00f8rer kan sikres med det standard logningsv\u00e6rkt\u00f8j med log_statement = all.<\/p>\n<p>Dette er acceptabelt til overv\u00e5gning og andre anvendelser, men det giver ikke det detaljeniveau, der normalt er n\u00f8dvendigt til revision.<\/p>\n<p>Det er ikke nok at have en liste over alle operationer, der udf\u00f8res med databasen.<\/p>\n<p>Der skal ogs\u00e5 v\u00e6re mulighed for at finde specifikke udsagn, der er interessante for revisoren.<\/p>\n<p>Det standard logningsv\u00e6rkt\u00f8j viser, hvad brugeren anmodede om, mens pgAudit fokuserer p\u00e5 detaljerne i, hvad der skete, n\u00e5r databasen udf\u00f8rte anmodningen.<\/p>\n<p>For eksempel kan revisoren \u00f8nske at sikre sig, at en specifik tabel blev oprettet inden for det dokumenterede vedligeholdelsesvindue.<\/p>\n<p>Det kan virke som en enkel opgave for grundl\u00e6ggende revision og grep, men hvad hvis du f\u00e5r noget som dette (bevidst forvirrende) eksempel:<\/p>\n<p>DO $$<br \/>\nBEGIN<br \/>\n EXECUTE 'CREATE TABLE import' || 'ant_table (id INT)';<br \/>\nEND $$;<\/p>\n<p>Det standard logning vil give dig dette:<\/p>\n<p>LOG: statement: DO $$<br \/>\nBEGIN<br \/>\n EXECUTE 'CREATE TABLE import' || 'ant_table (id INT)';<br \/>\nEND $$;<\/p>\n<p>Det ser ud til, at det kan kr\u00e6ve noget kendskab til koden at finde den \u00f8nskede tabel, is\u00e6r n\u00e5r tabeller oprettes dynamisk.<\/p>\n<p>Dette er ikke ideelt, da det ville v\u00e6re foretrukket blot at s\u00f8ge efter tabelnavnet.<\/p>\n<p>Her bliver pgAudit nyttigt.<\/p>\n<p>For den samme input vil den generere denne output i loggen:<\/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>Ikke kun DO-blokken registreres, men hele CREATE TABLE-teksten med operationstypen, objekttypen og det fulde navn, hvad der letter s\u00f8gningen.<\/p>\n<p>Ved at logge SELECT- og DML-operationer kan pgAudit konfigureres til at registrere en separat post for hver relation, som der refereres til i operationen.<\/p>\n<p>Der kr\u00e6ves ikke syntaksanalyse for at finde alle operationer, der vedr\u00f8rer en specifik tabel (<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/pgaudit\/pgaudit\/blob\/master\/README.md\">*<\/a><\/noindex>)\u00bb.<\/p>\n<h3>Hvordan vil dette p\u00e5virke databasens ydeevne?<\/h3>\n<p>\nLad os udf\u00f8re tests med aktivering af fuld revision og se, hvad der sker med PostgreSQL's ydeevne. Vi vil aktivere maksimal logning af databasen p\u00e5 alle parametre.<\/p>\n<p>I konfigurationsfilen \u00e6ndrer vi n\u00e6sten ingenting, det vigtigste er, at vi aktiverer debug5-tilstand for at f\u00e5 maksimalt information.<\/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>\nMed PostgreSQL DB med parametre 1 CPU, 2,8 GHz, 2 GB RAM, 40 GB HDD udf\u00f8rer vi tre belastningstest ved hj\u00e6lp af kommandoerne:<\/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>Testresultater:<\/strong><\/p>\n<p><strong>Uden logning<\/strong><br \/>\n<strong>Med logning<\/strong><\/p>\n<p>Den samlede tid til at fylde databasen<br \/>\n43,74 sek<br \/>\n53,23 sek<\/p>\n<p>RAM<br \/>\n24%<br \/>\n40%<\/p>\n<p>CPU<br \/>\n72%<br \/>\n91%<\/p>\n<p><strong>Test 1 (50 forbindelser)<\/strong><\/p>\n<p>Antal transaktioner over 10 min<br \/>\n74169<br \/>\n32445<\/p>\n<p>Transaktioner\/sek<br \/>\n123<br \/>\n54<\/p>\n<p>Gennemsnitlig forsinkelse<br \/>\n405 ms<br \/>\n925 ms<\/p>\n<p><strong>Test 2 (150 forbindelser ved 100 mulige)<\/strong><\/p>\n<p>Antal transaktioner over 10 min<br \/>\n81727<br \/>\n31429<\/p>\n<p>Transaktioner\/sek<br \/>\n136<br \/>\n52<\/p>\n<p>Gennemsnitlig forsinkelse<br \/>\n550 ms<br \/>\n1432 ms<\/p>\n<p><strong>Om st\u00f8rrelser<\/strong><\/p>\n<p>St\u00f8rrelsen p\u00e5 databasen<br \/>\n2251 MB<br \/>\n2262 MB<\/p>\n<p>St\u00f8rrelsen p\u00e5 databasen logger<br \/>\n0 MB<br \/>\n4587 MB<\/p>\n<p>\nSom et resultat: en fuld revision er ikke s\u00e6rlig god. M\u00e6ngden af data fra revisionen vil v\u00e6re lig med eller st\u00f8rre end m\u00e6ngden af data i selve databasen. Den m\u00e6ngde logning, der genereres under arbejdet med DBMS, er et almindeligt problem i produktionen.<\/p>\n<p>Lad os se p\u00e5 andre parametre:<\/p>\n<ul>\n<li>Hastigheden \u00e6ndrer sig ikke meget: uden logning - 43,74 sek, med logning - 53,23 sek.<\/li>\n<li>Ydelsen for RAM og CPU vil falde, da der skal oprettes en revisionsfil. Dette er ogs\u00e5 m\u00e6rkbart i produktionen.<\/li>\n<\/ul>\n<p>\nN\u00e5r antallet af forbindelser \u00f8ges, vil resultaterne selvf\u00f8lgelig blive lidt d\u00e5rligere.<\/p>\n<p>I virksomheder med revision er det endnu mere komplekst:<\/p>\n<ul>\n<li>der er mange data;<\/li>\n<li>revisionen kr\u00e6ves ikke kun gennem syslog i SIEM, men ogs\u00e5 i filer: hvis der sker noget med syslog, skal der v\u00e6re en fil t\u00e6t p\u00e5 databasen, hvori dataene gemmes;<\/li>\n<li>til revision er det n\u00f8dvendigt med en separat hylde for ikke at g\u00e5 ned p\u00e5 I\/O-diskene, da de kr\u00e6ver meget plads;<\/li>\n<li>det kan v\u00e6re, at medarbejdere i informationssikkerhed har brug for at implementere standarder, de kr\u00e6ver statslig identifikation.<\/li>\n<\/ul>\n<p><\/p>\n<h2>Adgangsbegr\u00e6nsning til data<\/h2>\n<p>\nLad os se p\u00e5 teknologierne, der anvendes til at beskytte data og tilgangen til dem i kommercielle DBMS og open source.<\/p>\n<p>Hvad kan generelt anvendes:<\/p>\n<ol>\n<li>Kryptering og obfuskering af procedurer og funktioner (Wrapping) \u2014 det vil sige separate v\u00e6rkt\u00f8jer og nyttigg\u00f8relse, der g\u00f8r l\u00e6sbar kode ul\u00e6selig. Desv\u00e6rre kan den ikke \u00e6ndres eller refaktoreres tilbage. Denne tilgang kr\u00e6ves nogle gange i det mindste p\u00e5 DBMS-siden - logikken for licensbegr\u00e6nsninger eller godkendelseslogik krypteres specifikt p\u00e5 niveauet for procedurer og funktioner.<\/li>\n<li>Data synlighedsbegr\u00e6nsning (RLS) er, n\u00e5r forskellige brugere ser den samme tabel, men med forskellige r\u00e6kker, hvilket betyder, at nogle brugere ikke kan se visse oplysninger p\u00e5 r\u00e6kkeniveau.<\/li>\n<li>Redigering af viste data (Masking) er, n\u00e5r brugere i en kolonne i tabellen ser enten data eller kun stjerner, hvilket betyder, at for nogle brugere vil oplysningerne v\u00e6re skjult. Teknologien bestemmer, hvilke oplysninger der vises til hvilke brugere baseret p\u00e5 adgangsniveau.<\/li>\n<li>Adgangsbegr\u00e6nsning Security DBA\/Application DBA\/DBA handler mere om at begr\u00e6nse adgangen til selve databasen, hvilket vil sige, at sikkerhedspersonale kan adskilles fra databaseadministratorer og applikationsadministratorer. Der er ikke mange open source-teknologier til dette, men kommercielle databaser har mange. De er n\u00f8dvendige, n\u00e5r der er mange brugere med adgang til selve serverne.<\/li>\n<li>Adgangsbegr\u00e6nsning til filer p\u00e5 filsystemniveau. Man kan tildele rettigheder og privilegier til mapper, s\u00e5 hver administrator kun f\u00e5r adgang til de n\u00f8dvendige data.<\/li>\n<li>Mandatadgang og hukommelsesrensning er teknologier, der anvendes sj\u00e6ldent.<\/li>\n<li>End-to-end kryptering direkte i databasen er klient-side kryptering med n\u00f8gleadministration p\u00e5 serversiden.<\/li>\n<li>Kryptering af data. For eksempel kolonne-kryptering - n\u00e5r du bruger et mekanisme, der krypterer en individuel kolonne i databasen.<\/li>\n<\/ol>\n<p><\/p>\n<h3>Hvordan p\u00e5virker dette databaseydelsen?<\/h3>\n<p>\nLad os tage et eksempel med kolonne-kryptering i PostgreSQL. Der er en modul pgcrypto, som tillader opbevaring af udvalgte felter i krypteret form. Dette er nyttigt, n\u00e5r kun nogle data har v\u00e6rdi. For at l\u00e6se de krypterede felter sender klienten den dekrypterende n\u00f8gle, serveren dekrypterer data og giver dem til klienten. Uden n\u00f8glen kan ingen g\u00f8re noget med dine data.<\/p>\n<p><strong>Lad os udf\u00f8re en test med pgcrypto.<\/strong>. Vi opretter en tabel med krypterede data og en med almindelige data. Nedenfor er kommandoerne til oprettelse af tabellerne, og i den f\u00f8rste linje er der en nyttig kommando - oprettelse af selve extension med registrering af databasen:<\/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>\nLad os pr\u00f8ve at lave en dataudtr\u00e6k fra hver tabel og se p\u00e5 erhvervelsestiderne for udf\u00f8relsen.<\/p>\n<p><strong>Dataudtr\u00e6k fra tabellen uden krypteringsfunktion<\/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>\nStopwatchen er t\u00e6ndt.<\/p>\n<p>\u00a0\u00a0id | text1 | text2<br \/>\n\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 r\u00e6kker)<\/p>\n<p>Tid: 1,386 ms<\/p>\n<p><strong>Dataudtr\u00e6k fra tabellen med krypteringsfunktion:<\/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>\nStopwatchen er t\u00e6ndt.<\/p>\n<p>\u00a0\u00a0id | decrypt | decrypt<br \/>\n\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 r\u00e6kker)<\/p>\n<p>Tid: 50,203 ms<\/p>\n<p><strong>Ydeevnetest<\/strong>:<\/p>\n<p>\u00a0<br \/>\n<strong>Uden kryptering<\/strong><br \/>\n<strong>Pgcrypto (decrypt)<\/strong><\/p>\n<p>Dataudtr\u00e6k 1000 r\u00e6kker<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>\nKryptering p\u00e5virker ydeevnen betydeligt. Det er klart, at tiden er steget, da dekrypteringsoperationer af krypterede data (som normalt er indkapslet i din logik) kr\u00e6ver betydelige ressourcer. Det vil sige, at ideen om at kryptere alle kolonner, der indeholder data, kan medf\u00f8re nedsat ydeevne.<\/p>\n<p>Desuden er kryptering ikke en s\u00f8lvkugle, der l\u00f8ser alle problemer. De dekrypterede data og dekrypteringsn\u00f8glen befinder sig p\u00e5 serveren under dekrypterings- og dataoverf\u00f8rselsprocessen. Derfor kan n\u00f8glerne blive opsnappet af dem, der har fuld adgang til databaseserveren, for eksempel systemadministratoren.<\/p>\n<p>N\u00e5r der er \u00e9n n\u00f8gle for hele kolonnen for alle brugere (selv hvis det ikke g\u00e6lder for alle, men kun for en begr\u00e6nset gruppe kunder), er det ikke altid godt eller rigtigt. Det er derfor, der er begyndt at blive lavet end-to-end kryptering; databaserne har begyndt at overveje muligheden for datakryptering fra b\u00e5de klient- og server-side, og de s\u00e5kaldte key-vault opbevaringsl\u00f8sninger er dukket op \u2014 separate produkter, der s\u00f8rger for h\u00e5ndtering af n\u00f8gler fra databasen.<\/p>\n<p><img decoding=\"async\" alt=\"Sikkerhed og database-systemer: hvad man skal huske p\u00e5, n\u00e5r man v\u00e6lger beskyttelsesmidler\" 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>Eksempel p\u00e5 s\u00e5dan kryptering i MongoDB<\/i><\/a><\/noindex><\/p>\n<h2>Sikkerhedsmidler i kommercielle og open source databaser<\/h2>\n<p><\/p>\n<p><strong>Functions<\/strong><br \/>\n<strong>Type<\/strong><br \/>\n<strong>Password Policy<\/strong><br \/>\n<strong>Audit<\/strong><br \/>\n<strong>Beskyttelse af kildekoden til procedurer og funktioner<\/strong><br \/>\n<strong>RLS<\/strong><br \/>\n<strong>Kryptering<\/strong><\/p>\n<p><strong>Oracle<\/strong><br \/>\nKommerciel<br \/>\n+<br \/>\n+<br \/>\n+<br \/>\n+<br \/>\n+<\/p>\n<p><strong>MsSql<\/strong><br \/>\nKommerciel<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 \/>\nKommerciel<br \/>\n+<br \/>\n+<br \/>\n+<br \/>\n+<br \/>\nudvidelser<\/p>\n<p><strong>PostgreSQL<\/strong><br \/>\nGratis<br \/>\nudvidelser<br \/>\nudvidelser<br \/>\n\u2014<br \/>\n+<br \/>\nudvidelser<\/p>\n<p><strong>MongoDb<\/strong><br \/>\nGratis<br \/>\n\u2014<br \/>\n+<br \/>\n\u2014<br \/>\n\u2014<br \/>\nKun tilg\u00e6ngelig i MongoDB Enterprise<\/p>\n<p>\nTabellen er langt fra fuld, men situationen er s\u00e5dan: i kommercielle produkter er sikkerhedsproblemer blevet l\u00f8st i lang tid, i open source anvendes der som regel kun nogle overbygninger, mange funktioner mangler, og nogle gange er man n\u00f8dt til at tilf\u00f8je noget. For eksempel sikkerhedspolitikker \u2014 der er mange forskellige udvidelser i PostgreSQL.<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>), som implementerer politikker for adgangskoder, men efter min mening d\u00e6kker ingen af dem behovene i den indenlandske erhvervssektor.<\/p>\n<p><strong>Hvad skal man g\u00f8re, hvis man ikke kan finde det, man har brug for<\/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>Man kan derefter bruge tredjepartsl\u00f8sninger, der arbejder med forskellige databasesystemer, som 'Krypto DB' eller 'Garda DB'. N\u00e5r det g\u00e6lder l\u00f8sninger fra den indenlandske sektor, kender de bedre til GOST end open source.<\/p>\n<p>Den anden mulighed er at skrive selv, hvad der er n\u00f8dvendigt, implementere adgang til data og kryptering p\u00e5 niveau med procedurer i applikationen. Sandheden er, at det bliver sv\u00e6rere med GOST. Men generelt kan du skjule data, som du \u00f8nsker, placere dem i databasesystemet, og derefter hente og dekryptere dem korrekt direkte i applikationen. T\u00e6nk samtidig over, hvordan du vil beskytte disse algoritmer p\u00e5 applikationsniveau. Efter vores mening b\u00f8r dette g\u00f8res p\u00e5 databasesystemniveau, da det vil fungere hurtigere.<\/p>\n<p>Denne pr\u00e6sentation blev f\u00f8rste gang pr\u00e6senteret ved <noindex><a rel=\"nofollow\" href=\"https:\/\/corp.mail.ru\/ru\/press\/events\/databases-1\/\">@Databases Meetup<\/a><\/noindex> af Mail.ru Cloud Solutions. Se<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\"> en video <\/a><\/noindex>andre pr\u00e6sentationer og tilmeld dig nyhedsbreve om arrangementer p\u00e5 Telegram <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/k8s_mail\">Omkring Kubernetes i Mail.ru Group<\/a><\/noindex>.<\/p>\n<p><strong>Andre artikler om emnet<\/strong>:<\/p>\n<ol>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/472694\/\">Mere end Ceph: bloklageret i 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\">Hvordan v\u00e6lger man en database til et projekt, s\u00e5 man ikke skal v\u00e6lge igen<\/a><\/noindex>.<\/li>\n<\/ol>\n<p>Kilde: <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\/da\/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=\"da_DK\" \/>\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\/da\/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\udd47Sikkerhed og databasesystemer: hvad man skal huske p\u00e5, n\u00e5r man v\u00e6lger beskyttelsesmidler | ProHoster","description":"Mit navn er Denis.","canonical_url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/bezopasnost-i-subd-o-chyom-nado-pomnit-podbiraya-sredstva-zashhity","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","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\/da\/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\/da\/wp-json\/wp\/v2\/posts\/81884","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=81884"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/81884\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/81885"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=81884"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=81884"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=81884"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}