sql >> Databasteknik >  >> RDS >> PostgreSQL

Använda kryptering för att stärka PostgreSQL-databassäkerheten

Observera:Delar av bloggen innehåller referenser och exempel från "ANNONCERAR TILLGÄNGLIGHET FÖR POSTGRESQL INSTANCE LEVEL CRYPTION" av CyberTec, ett företag som tillhandahåller support, rådgivning och utbildning för PostgreSQL.

Organisationer hanterar olika typer av data inklusive mycket viktig information som måste lagras i en databas. Säkerhet är en viktig aspekt av övervägandet för att säkerställa att känsliga uppgifter som journaler och finansiella transaktioner inte hamnar i händerna på människor med skändliga medel. Under årens lopp har utvecklare kommit med flera åtgärder för att förbättra dataintegriteten och skyddet. En av de mest använda teknikerna är kryptering för att förhindra dataintrång.

Så mycket som du kan ha använt komplexa skyddsåtgärder, kan vissa personer fortfarande få tillgång till ditt system. Kryptering är ett extra lager av säkerhet. PostgreSQL erbjuder kryptering på olika nivåer förutom att ge flexibilitet när det gäller att skydda data från avslöjande som ett resultat av opålitliga administratörer, osäkra nätverksanslutningar och databasserverstöld. PostgreSQL tillhandahåller olika krypteringsalternativ såsom:

  • SSL-värdautentisering
  • Kryptera data över ett nätverk
  • Datapartitionskryptering
  • Kryptering för specifika kolumner
  • Lösenordslagringskryptering
  • Kryptering på klientsidan

Men ju mer sofistikerad krypteringsstrategi du använder, desto större är sannolikheten att du kommer att låsas ute från dina data. Dessutom kommer läsprocessen inte bara att vara svår utan också kräva massor av resurser för att fråga och dekryptera. Krypteringsalternativet du väljer beror på vilken typ av data du har att göra med när det gäller känslighet. Diagrammet nedan illustrerar den övergripande proceduren för datakryptering och dekryptering under servertransaktioner.

Den här artikeln diskuterar olika sätt på vilka ett företag kan säkra känslig information, men huvudintresset kommer att vara krypteringen på instansnivå som nämndes tidigare.

Kryptering

Kryptering är en metod för att koda data så att den inte längre är i sitt ursprungliga format och inte kan läsas. Det finns 2 typer av data vad gäller databasen:data i vila och data i rörelse. När data lagras i databasen kallas det data i vila. Å andra sidan, om en klient, till exempel, skickar en förfrågan till databasen, om en del data returneras och behöver nå klienten, så kallas det för data i rörelse. De två olika typerna av data måste skyddas med liknande teknik. Till exempel, om en applikation är utvecklad så att en användare behöver ange ett lösenord, kommer detta lösenord inte att lagras i databasen som vanlig text. Det finns några kodningsprocedurer som används för att ändra denna oformaterade text till en annan sträng innan lagring. Dessutom, om användaren behöver använda detta lösenord för till exempel ett inloggningssystem, behöver vi ett sätt att jämföra ett som kommer att skickas in i dekrypteringsprocessen.

Databaskryptering kan implementeras på olika sätt men många utvecklare tar inte hänsyn till transportnivån. Men de olika tillvägagångssätten är också förknippade med olika fallgropar bland långsammare dataåtkomsttider, särskilt när det virtuella minnet har stor åtkomst.

Kryptering av data i vila

Data i vila betyder inaktiv data som lagras fysiskt på disk. När det kommer till att vara värd för en databas i en molnmiljö, där molnleverantören har full tillgång till infrastrukturen, kan kryptering vara en bra åtgärd för att behålla kontrollen över data. Några av de krypteringsstrategier du kan använda diskuteras nedan.

Full diskkryptering (FDE)

Konceptet bakom FDE är generellt sett att skydda varje fil och temporär lagring som kan innehålla delar av data. Det är ganska effektivt speciellt när du har svårt att välja vad du vill skydda eller snarare om du inte vill missa en fil. Den största fördelen med denna strategi är att den inte kräver någon särskild uppmärksamhet från slutanvändarens sida efter att ha fått tillgång till systemet. Detta tillvägagångssätt har dock fått några fallgropar. Dessa inkluderar:

  • Krypterings- och dekrypteringsprocessen saktar ner den totala dataåtkomsttiden.
  • Data kanske inte är skyddad när systemet är på eftersom informationen kommer att dekrypteras och redo att läsas. Du måste därför använda några andra krypteringsstrategier som filbaserad kryptering.

Filbaserad kryptering

I det här fallet krypteras filerna eller katalogerna av själva det stapelbara kryptografiska filsystemet. I PostgreSQL använder vi ofta metoden pg_crypto som diskuteras i den här artikeln.

Några av fördelarna med filsystemskryptering inkluderar:

  • Åtgärdskontroll kan upprätthållas genom användning av kryptografi med publik nyckel
  • Separat hantering av krypterade filer så att säkerhetskopior av individuellt ändrade filer även i krypterad form, snarare än säkerhetskopiering av hela den krypterade volymen.

Detta är dock inte en mycket tillförlitlig krypteringsmetod som du kan använda för dina klustrade data. Anledningen är att vissa filbaserade krypteringslösningar kan lämna kvar en rest av krypterade filer som en angripare kan återhämta sig från. Det bästa kombinationssättet är därför att kombinera detta med full diskkryptering.

Kryptering på instansnivå

Instansnivån använder buffertar så att alla filer som utgör PostgreSQL-klustret lagras på disken som data-at-rest-kryptering. De presenteras sedan som dekrypteringsblock när de läses från disk till delade buffertar. Efter att ha skrivit ut dessa block till disk från de delade buffertarna, krypteras de igen automatiskt. Databasen initieras först med kryptering med kommandot initdb. För det andra, under uppstart, hämtas krypteringsnyckeln av servern på något av dessa två sätt; genom parametern pgcrypto.keysetup_command eller genom en miljövariabel.

Ladda ner Whitepaper Today PostgreSQL Management &Automation med ClusterControlLäs om vad du behöver veta för att distribuera, övervaka, hantera och skala PostgreSQLDladda Whitepaper

Ställa in instansnivåkryptering

En liten sammanfattning av hur du kan ställa in krypteringen på instansnivå beskrivs i stegen nedan:

  1. Kontrollera om du har "contrib" installerat med kommandot rpm -qa |grep contrib för RedHat-baserat OS eller dpkg -l |grep contrib för Debian-baserat OS. Om det inte finns i listan, installera det med apt-get install postgresql-contrib om du använder den Debian-baserade miljön eller yum install postgresql-contrib om du använder ett RedHat-baserat operativsystem.
  2. Skapa PostgreSQL-koden.
  3. Klusterinitiering genom att etablera krypteringsnyckeln och köra he initdb kommandot
    read -sp "Postgres passphrase: " PGENCRYPTIONKEY
    export PGENCRYPTIONKEY=$PGENCRYPTIONKEY
    initdb –data-encryption pgcrypto --data-checksums -D cryptotest
  4. Starta servern med kommandot
    $ postgres -D /usr/local/pgsql/data
  5. Ställa in miljövariabeln PGENCRYPTIONKEY med kommandot:
    export PGENCRYPTIONKEY=topsecret pg_ctl -D cryptotest start
    Nyckeln kan också ställas in genom en anpassad och säkrare nyckelläsningsprocedur via ovannämnda kommando "pgcrypto.keysetup_command" postgresql.conf parameter.

Prestandaförväntningar

Kryptering sker alltid på bekostnad av prestanda, eftersom det inte finns några alternativ utan kostnad. Om din arbetsbelastning är IO-orienterad kan du förvänta dig en avsevärt reducerad prestanda men så kanske inte är fallet. Ibland på den typiska serverhårdvaran, om datamängden är mindre delad i buffertarna eller dess vistelsetid i buffertarna är kort, kan prestandaträffen vara försumbar.

Efter att ha gjort krypteringen av min databas, körde jag ett litet test för att kontrollera om kryptering verkligen påverkar prestandan och resultaten listas nedan.

Arbetsbelastning Ingen kryptering Med kryptering Prestandakostnad
Massinsättningsoperation 26s 68s 161 %
Läs-skrivpassning i delade buffertar (i förhållandet 1:3) 3200TPS 3068TPS 4,13 %
Läs endast från delade buffertar 2234 TPS 2219 TPS 0,68 %
Skrivskyddat passar inte in i delade buffertar 1845 TPs 1434 TPS 22,28 %
Läs-skriv passar inte in i delade buffertar i förhållandet 1:3 3422 TPS 2545 TPS 25,6 %

Som visas i tabellen ovan kan vi se att prestandan är icke-linjär eftersom den ibland hoppar från 161 % till 0,7 %. Detta är en enkel indikation på att krypteringsprestandan är arbetsbelastningsspecifik förutom att den är känslig för mängden sidor som flyttas mellan delade buffertar och disk. Detta kan också påverka processorns kraft beroende på den inblandade arbetsbelastningen. Kryptering på instansnivå är ett ganska genomförbart alternativ och den enklaste metoden för ett antal miljöer.

Slutsats

Datakryptering är ett viktigt åtagande, särskilt för känslig information i databashantering. Det finns ett antal alternativ tillgängliga för datakryptering när det gäller PostgreSQL. När man bestämmer vilket tillvägagångssätt som ska användas är det viktigt att förstå data, applikationsarkitektur och dataanvändning eftersom kryptering sker på bekostnad av prestanda. På så sätt kommer du att kunna förstå:när du ska aktivera kryptering, var din data exponeras och var är den säker, vilket är det bästa krypteringssättet att använda.


  1. MySQL Ordna efter ett nummer, null sist

  2. Återställ sekvens i oracle 11g

  3. Beräkna antalet samtidiga händelser i SQL

  4. dynamisk fråga postgres