sql >> Databáze >  >> RDS >> PostgreSQL

Využití šifrování k posílení zabezpečení databáze PostgreSQL

Upozornění:Části blogu obsahují odkazy a příklady od „OZNAMOVÁNÍ DOSTUPNOSTI ŠIFROVÁNÍ INSTANCE ÚROVNĚ POSTGRESQL“ od společnosti CyberTec, která poskytuje podporu, konzultace a školení pro PostgreSQL.

Organizace pracují s různými typy dat, včetně velmi důležitých informací, které je třeba uložit do databáze. Bezpečnost je klíčovým aspektem, který je třeba vzít v úvahu, aby se zajistilo, že citlivá data, jako jsou lékařské záznamy a finanční transakce, neskončí v rukou lidí s nekalými prostředky. V průběhu let vývojáři přišli s řadou opatření ke zlepšení integrity a ochrany dat. Jednou z nejpoužívanějších technik je šifrování, aby se zabránilo narušení dat.

I když jste možná použili složitá ochranná opatření, někteří lidé mohou stále získat přístup k vašemu systému. Šifrování je další vrstvou zabezpečení. PostgreSQL nabízí šifrování na různých úrovních kromě toho, že poskytuje flexibilitu při ochraně dat před prozrazením v důsledku nedůvěryhodných správců, nezabezpečených síťových připojení a krádeží databázového serveru. PostgreSQL poskytuje různé možnosti šifrování, například:

  • Ověření hostitele SSL
  • Šifrování dat v síti
  • Šifrování datového oddílu
  • Šifrování pro konkrétní sloupce
  • Šifrování úložiště hesla
  • Šifrování na straně klienta

Čím sofistikovanější šifrovací strategii však použijete, tím větší je pravděpodobnost, že vám budou vaše data zablokována. Kromě toho bude proces čtení nejen obtížný, ale také bude vyžadovat spoustu zdrojů k dotazování a dešifrování. Volba šifrování, kterou vyberete, závisí na povaze dat, se kterými pracujete, pokud jde o citlivost. Níže uvedený diagram znázorňuje celkový postup šifrování a dešifrování dat během serverových transakcí.

Tento článek pojednává o různých způsobech, jak může podnik zabezpečit citlivé informace, ale hlavním bodem zájmu bude šifrování na úrovni instance, které bylo zmíněno dříve.

Šifrování

Šifrování je způsob kódování dat tak, že již nejsou v původním formátu a nelze je číst. Pokud jde o databázi, existují 2 typy dat:data v klidu a data v pohybu. Když jsou data uložena v databázi, označují se jako data v klidu. Na druhé straně, pokud klient například odešle požadavek do databáze, pokud se nějaká data vrátí a potřebují se dostat ke klientovi, pak se to nazývá data v pohybu. Dva různé typy dat je třeba chránit pomocí podobné technologie. Pokud je například aplikace vyvinuta tak, že uživatel potřebuje zadat heslo, nebude toto heslo uloženo v databázi jako prostý text. Existují některé procedury kódování, které se používají ke změně tohoto prostého textu na jiný řetězec před uložením. Kromě toho, pokud uživatel potřebuje toto heslo použít například pro přihlašovací systém, pak potřebujeme způsob, jak porovnat heslo, které bude předloženo v procesu dešifrování.

Šifrování databáze lze implementovat různými způsoby, ale mnoho vývojářů nebere v úvahu úroveň přenosu. Rozdílné přístupy jsou však také spojeny s různými úskalími mezi zpomalenými časy přístupu k datům, zvláště když je virtuální paměť intenzivně využívána.

Šifrování dat v klidu

Data v klidu znamenají neaktivní data, která jsou fyzicky uložena na disku. Pokud jde o hostování databáze v cloudovém prostředí, kde má dodavatel cloudu plný přístup k infrastruktuře, může být šifrování dobrým opatřením k udržení kontroly nad daty. Některé ze strategií šifrování, které můžete použít, jsou popsány níže.

Full Disk Encryption (FDE)

Koncept FDE je obecně chránit každý soubor a dočasné úložiště, které může obsahovat části dat. Je to docela efektivní, zvláště když máte potíže s výběrem toho, co chcete chránit, nebo pokud nechcete, aby vám unikl soubor. Hlavní výhodou této strategie je, že nevyžaduje žádnou zvláštní pozornost ze strany koncového uživatele po přístupu do systému. Tento přístup má však určitá úskalí. Patří mezi ně:

  • Proces šifrování a dešifrování zpomaluje celkovou dobu přístupu k datům.
  • Když je systém zapnutý, data nemusí být chráněna, protože informace budou dešifrovány a připraveny ke čtení. Proto musíte použít některé další šifrovací strategie, jako je šifrování založené na souborech.

Šifrování založené na souborech

V tomto případě jsou soubory nebo adresáře šifrovány samotným stohovatelným kryptografickým souborovým systémem. V PostgreSQL často používáme přístup pg_crypto, jak je popsáno v tomto článku.

Některé z výhod šifrování systému souborů zahrnují:

  • Kontrolu akcí lze vynutit pomocí kryptografie s veřejným klíčem
  • Samostatná správa šifrovaných souborů, takže zálohování individuálně změněných souborů i v zašifrované podobě, spíše než zálohování celého šifrovaného svazku.

Toto však není příliš spolehlivá metoda šifrování, kterou můžete použít pro svá data v clusteru. Důvodem je, že některá řešení šifrování založená na souborech mohou zanechat zbytky zašifrovaných souborů, ze kterých se může útočník zotavit. Nejlepším kombinovaným přístupem je proto kombinovat toto s úplným šifrováním disku.

Šifrování na úrovni instance

Úroveň instance používá vyrovnávací paměti, takže všechny soubory tvořící cluster PostgreSQL jsou uloženy na disku jako šifrování dat v klidu. Poté jsou prezentovány jako dešifrovací bloky při čtení z disku do sdílených vyrovnávacích pamětí. Po vypsání těchto bloků na disk ze sdílených vyrovnávacích pamětí jsou opět automaticky zašifrovány. Databáze je nejprve inicializována pomocí šifrování pomocí příkazu initdb. Za druhé, během spouštění je šifrovací klíč načten serverem jedním z těchto dvou způsobů; prostřednictvím parametru pgcrypto.keysetup_command nebo prostřednictvím proměnné prostředí.

Stáhněte si Whitepaper Today Správa a automatizace PostgreSQL s ClusterControlZjistěte, co potřebujete vědět k nasazení, monitorování, správě a škálování PostgreSQLStáhněte si Whitepaper

Nastavení šifrování na úrovni instance

Malá rekapitulace toho, jak můžete nastavit šifrování na úrovni instance, je popsána v následujících krocích:

  1. Zkontrolujte, zda máte nainstalovaný „contrib“ pomocí příkazu rpm -qa |grep contrib pro OS založený na RedHat nebo dpkg -l |grep contrib pro OS založený na Debianu. Pokud není v seznamu, nainstalujte jej pomocí apt-get install postgresql-contrib, pokud používáte prostředí založené na Debianu, nebo yum install postgresql-contrib, pokud používáte operační systém RedHat.
  2. Vytvořte kód PostgreSQL.
  3. Inicializace klastru vytvořením šifrovacího klíče a spuštěním příkazu initdb
    read -sp "Postgres passphrase: " PGENCRYPTIONKEY
    export PGENCRYPTIONKEY=$PGENCRYPTIONKEY
    initdb –data-encryption pgcrypto --data-checksums -D cryptotest
  4. Spusťte server příkazem
    $ postgres -D /usr/local/pgsql/data
  5. Nastavení proměnné prostředí PGENCRYPTIONKEY pomocí příkazu:
    export PGENCRYPTIONKEY=topsecret pg_ctl -D cryptotest start
    Klíč lze také nastavit pomocí vlastní a bezpečnější procedury čtení klíče pomocí výše uvedeného příkazu „pgcrypto.keysetup_command“ parametr postgresql.conf.

Očekávání výkonu

Šifrování je vždy na úkor výkonu, protože neexistují žádné možnosti bez nákladů. Pokud je vaše pracovní vytížení orientované na IO, můžete očekávat značně snížený výkon, ale nemusí tomu tak být. Někdy na typickém serverovém hardwaru, pokud je datová sada méně sdílena ve vyrovnávací paměti nebo je doba jejího setrvání ve vyrovnávací paměti krátká, může být zásah do výkonu zanedbatelný.

Poté, co jsem provedl šifrování mé databáze, provedl jsem malý test, abych zkontroloval, zda šifrování skutečně ovlivňuje výkon, a výsledky jsou uvedeny v tabulce níže.

Pracovní zátěž Žádné šifrování Se šifrováním Náklady na výkon
Operace hromadného vkládání 26s 68 161 %
Vkládání pro čtení a zápis do sdílených vyrovnávacích pamětí (v poměru 1:3) 3200TPS 3068TPS 4,13 %
Pouze pro čtení ze sdílených vyrovnávacích pamětí 2234 TPS 2219 TPS 0,68 %
Pouze čtení se nevejde do sdílených vyrovnávacích pamětí 1845 TP 1434 TPS 22,28 %
Čtení a zápis se nevejde do sdílených vyrovnávacích pamětí v poměru 1:3 3422 TPS 2545 TPS 25,6 %

Jak je znázorněno v tabulce výše, můžeme vidět, že výkon je nelineární, protože někdy vyskočí ze 161 % na 0,7 %. To je jednoduchá indikace toho, že výkon šifrování je specifický pro pracovní zatížení, kromě toho, že je citlivý na množství stránek přesouvaných mezi sdílenými vyrovnávací paměti a diskem. To může také ovlivnit výkon CPU v závislosti na příslušné zátěži. Šifrování na úrovni instance je docela životaschopnou možností a nejjednodušším přístupem pro řadu prostředí.

Závěr

Šifrování dat je důležitým počinem zejména pro citlivé informace při správě databází. Pokud jde o PostgreSQL, existuje řada možností pro šifrování dat. Při určování, který přístup použít, je důležité porozumět datům, architektuře aplikací a využití dat, protože šifrování je na úkor výkonu. Tímto způsobem budete schopni pochopit:kdy povolit šifrování, kde jsou vaše data vystavena a kde jsou v bezpečí, což je nejlepší způsob šifrování.


  1. 3 způsoby, jak extrahovat hodnotu z dokumentu JSON v SQLite

  2. Protokolování auditu pro PostgreSQL

  3. Jak zrušíte všechna aktuální připojení k databázi SQL Server 2005?

  4. Seřadit posledních N řádků v databázi?