sql >> Database teknologi >  >> RDS >> PostgreSQL

Brug af kryptering til at styrke PostgreSQL-databasesikkerheden

Bemærk venligst:Dele af bloggen indeholder referencer og eksempler fra "ANNONCER TILGÆNGELIGHED AF POSTGRESQL INSTANCE LEVEL ENCRYPTION" af CyberTec, en virksomhed, der yder support, rådgivning og træning til PostgreSQL.

Organisationer håndterer forskellige typer data, herunder meget afgørende information, der skal gemmes i en database. Sikkerhed er et centralt aspekt i overvejelserne for at sikre, at følsomme data såsom sygejournaler og økonomiske transaktioner ikke ender i hænderne på mennesker med slem midler. I årenes løb har udviklere fundet på flere foranstaltninger til at forbedre dataintegritet og beskyttelse. En af de mest anvendte teknikker er kryptering for at forhindre databrud.

Så meget som du måske har brugt komplekse beskyttelsesforanstaltninger, kan nogle mennesker stadig ende med at få adgang til dit system. Kryptering er et ekstra sikkerhedslag. PostgreSQL tilbyder kryptering på forskellige niveauer udover at give fleksibilitet til at beskytte data mod offentliggørelse som følge af utroværdige administratorer, usikre netværksforbindelser og databaseservertyveri. PostgreSQL giver forskellige krypteringsmuligheder såsom:

  • SSL-værtsgodkendelse
  • Kryptering af data på tværs af et netværk
  • Datapartitionskryptering
  • Kryptering for specifikke kolonner
  • Kryptering af adgangskodelager
  • Klientsidekryptering

Men jo mere sofistikeret krypteringsstrategi du anvender, jo større er sandsynligheden for, at du bliver låst ude af dine data. Desuden vil læseprocessen ikke kun være vanskelig, men også kræve masser af ressourcer til at forespørge og dekryptere. Den krypteringsmulighed, du vælger, afhænger af arten af ​​data, du har med at gøre med hensyn til følsomhed. Diagrammet nedenfor illustrerer den overordnede procedure for datakryptering og dekryptering under servertransaktioner.

Denne artikel diskuterer forskellige måder, hvorpå en virksomhed kan sikre følsomme oplysninger, men det vigtigste punkt vil være kryptering på instansniveau, som blev nævnt tidligere.

Kryptering

Kryptering er en praksis med at kode data, så de ikke længere er i dets originale format og ikke kan læses. Der er 2 typer data, hvad databasen angår:data i hvile og data i bevægelse. Når data er lagret i databasen, kaldes det data i hvile. På den anden ende, hvis en klient for eksempel sender en anmodning til databasen, hvis nogle data returneres og skal nå klienten, så kaldes det data i bevægelse. De to forskellige typer data skal beskyttes ved hjælp af lignende teknologi. For eksempel, hvis en applikation er udviklet sådan, at en bruger skal indsende en adgangskode, vil denne adgangskode ikke blive gemt i databasen som almindelig tekst. Der er nogle kodningsprocedurer, der bruges til at ændre denne almindelige tekst til en anden streng før lagring. Desuden, hvis brugeren skal bruge denne adgangskode til f.eks. et login-system, så har vi brug for en måde at sammenligne en, som vil blive indsendt i dekrypteringsprocessen.

Databasekryptering kan implementeres på forskellige måder, men mange udviklere undlader at tage højde for transportniveauet. Men de forskellige tilgange er også forbundet med forskellige faldgruber blandt langsomme dataadgangstider, især når virtuel hukommelse er hårdt tilgået.

Kryptering af data i hvile

Data i hvile betyder inaktive data, der er lagret fysisk på disken. Når det kommer til at hoste en database i et cloudmiljø, hvor cloudleverandøren har fuld adgang til infrastrukturen, kan kryptering være en god foranstaltning til at bevare kontrollen over dataene. Nogle af de krypteringsstrategier, du kan bruge, er beskrevet nedenfor.

Fuld diskkryptering (FDE)

Konceptet bag FDE er generelt at beskytte enhver fil og midlertidig lagring, der kan indeholde dele af dataene. Det er ret effektivt, især når du har svært ved at vælge, hvad du vil beskytte eller rettere hvis du ikke vil gå glip af en fil. Den største fordel ved denne strategi er, at den ikke kræver særlig opmærksomhed fra slutbrugerens side efter at have fået adgang til systemet. Denne tilgang har dog nogle faldgruber. Disse omfatter:

  • Krypterings- og dekrypteringsprocessen sænker den samlede dataadgangstid.
  • Data er muligvis ikke beskyttet, når systemet er tændt, da oplysningerne vil blive dekrypteret og klar til læsning. Du skal derfor bruge nogle andre krypteringsstrategier, såsom filbaseret kryptering.

Filbaseret kryptering

I dette tilfælde krypteres filerne eller mapperne af selve det stabelbare kryptografiske filsystem. I PostgreSQL bruger vi ofte pg_crypto-tilgangen som diskuteret i denne artikel.

Nogle af fordelene ved filsystemkryptering inkluderer:

  • Handlingskontrol kan håndhæves ved brug af offentlig nøglekryptering
  • Separat styring af krypterede filer, således at sikkerhedskopier af individuelt ændrede filer, selv i krypteret form, snarere end backup af hele den krypterede volumen.

Dette er dog ikke en meget pålidelig krypteringsmetode, du kan bruge til dine klyngede data. Årsagen er, at nogle filbaserede krypteringsløsninger kan efterlade en rest af krypterede filer, som en angriber kan komme sig fra. Den bedste kombinationstilgang er derfor at kombinere dette med fuld diskkryptering.

Kryptering på instansniveau

Forekomstniveau bruger buffere, således at alle filer, der udgør PostgreSQL-klyngen, gemmes på disken som data-at-rest-kryptering. De præsenteres derefter som dekrypteringsblokke, efterhånden som de læses fra disk til delte buffere. Efter udskrivning af disse blokke til disk fra de delte buffere, krypteres de igen automatisk. Databasen initialiseres først med kryptering ved hjælp af kommandoen initdb. For det andet, under opstart, hentes krypteringsnøglen af ​​serveren på en af ​​disse to måder; gennem parameteren pgcrypto.keysetup_command eller gennem en miljøvariabel.

Download Whitepaper Today PostgreSQL Management &Automation med ClusterControlFå flere oplysninger om, hvad du skal vide for at implementere, overvåge, administrere og skalere PostgreSQLDownload Whitepaper

Opsætning af instansniveaukryptering

En lille opsummering af, hvordan du kan konfigurere kryptering på instansniveau, er beskrevet i nedenstående trin:

  1. Tjek, om du har "contrib" installeret ved hjælp af kommandoen rpm -qa |grep contrib for RedHat-baseret OS eller dpkg -l |grep contrib for Debian-baseret OS. Hvis det ikke er på listen, så installer det med apt-get install postgresql-contrib, hvis du bruger det Debian-baserede miljø eller yum install postgresql-contrib, hvis du bruger et RedHat-baseret OS.
  2. Byg PostgreSQL-koden.
  3. Klyngeinitialisering ved at etablere krypteringsnøglen og den kørende he initdb-kommando
    read -sp "Postgres passphrase: " PGENCRYPTIONKEY
    export PGENCRYPTIONKEY=$PGENCRYPTIONKEY
    initdb –data-encryption pgcrypto --data-checksums -D cryptotest
  4. Start serveren med kommandoen
    $ postgres -D /usr/local/pgsql/data
  5. Indstilling af miljøvariablen PGENCRYPTIONKEY med kommandoen:
    export PGENCRYPTIONKEY=topsecret pg_ctl -D cryptotest start
    Nøglen kan også indstilles gennem en brugerdefineret og mere sikker nøglelæsningsprocedure via den ovennævnte kommando "pgcrypto.keysetup_command" postgresql.conf parameter.

Ydeevneforventninger

Kryptering kommer altid på bekostning af ydeevne, da der ikke er nogen muligheder uden omkostninger. Hvis din arbejdsbyrde er IO-orienteret, kan du forvente en betydeligt reduceret ydeevne, men det er muligvis ikke tilfældet. Nogle gange på den typiske serverhardware, hvis datasættet er mindre delt i bufferne, eller dets opholdstid i bufferne er lille, kan ydeevnehittet være ubetydeligt.

Efter at have lavet krypteringen af ​​min database, kørte jeg en lille test for at kontrollere, om kryptering virkelig påvirker ydeevnen, og resultaterne er vist nedenfor.

Arbejdsbelastning Ingen kryptering Med kryptering Performanceomkostninger
Masseindsættelsesoperation 26s 68s 161 %
Læs-skrivetilpasning i delte buffere (i forholdet 1:3) 3200TPS 3068TPS 4,13 %
Kun læse fra delte buffere 2234 TPS 2219 TPS 0,68 %
Skrivebeskyttet passer ikke ind i delte buffere 1845 TP'er 1434 TPS 22,28 %
Læs-skriv passer ikke ind i delte buffere i forholdet 1:3 3422 TPS 2545 TPS 25,6 %

Som afbildet i tabellen ovenfor kan vi se, at ydeevnen er ikke-lineær, da den nogle gange springer fra 161 % til 0,7 %. Dette er en simpel indikation af, at krypteringsydelsen er arbejdsbelastningsspecifik udover at være følsom over for mængden af ​​sider, der flyttes mellem delte buffere og disk. Dette kan også påvirke CPU'ens kraft afhængigt af den involverede arbejdsbyrde. Kryptering på instansniveau er en ganske levedygtig mulighed og den enkleste tilgang til en række miljøer.

Konklusion

Datakryptering er en vigtig opgave, især for følsom information i databasestyring. Der er en række muligheder tilgængelige for datakryptering, hvad PostgreSQL angår. Når man skal bestemme, hvilken tilgang man skal bruge, er det vigtigt at forstå dataene, applikationsarkitekturen og dataforbruget, da kryptering kommer på bekostning af ydeevne. På denne måde vil du være i stand til at forstå:hvornår du skal aktivere kryptering, hvor er dine data eksponeret, og hvor er det sikkert, hvilket er den bedste krypteringsmetode at bruge.


  1. Opsætning af maven-afhængighed til SQL Server

  2. Hvordan konverterer man en streng til hex og omvendt?

  3. Indstil det sprog, der bruges til dato- og tidsfunktioner i MariaDB

  4. Benchmarking Managed PostgreSQL Cloud Solutions - Del fire:Microsoft Azure