PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Използване на криптиране за засилване на сигурността на базата данни на PostgreSQL

Моля, обърнете внимание:Части от блога съдържат препратки и примери от „ОБЯВЯВАНЕ НА НАЛИЧНОСТТА НА НИВО НА ИНСТАНЦИЯ НА POSTGRESQL“ от CyberTec, компания, която предоставя поддръжка, консултации и обучение за PostgreSQL.

Организациите се занимават с различни видове данни, включително много важна информация, която трябва да се съхранява в база данни. Сигурността е ключов аспект на внимание, за да се гарантира, че чувствителни данни като медицински досиета и финансови транзакции не се озовават в ръцете на хора с нечестиви средства. През годините разработчиците измислят множество мерки за подобряване на целостта и защитата на данните. Една от най-използваните техники е криптирането с цел предотвратяване на пробиви на данни.

Колкото и да сте използвали сложни мерки за защита, някои хора все пак може да получат достъп до вашата система. Шифроването е допълнителен слой за сигурност. PostgreSQL предлага криптиране на различни нива, освен че осигурява гъвкавост при защита на данните от разкриване в резултат на ненадеждни администратори, несигурни мрежови връзки и кражба на сървър на база данни. PostgreSQL предоставя различни опции за криптиране като:

  • Удостоверяване на SSL хост
  • Шифроване на данни в мрежа
  • Криптиране на дяла с данни
  • Шифроване за конкретни колони
  • Криптиране с парола за съхранение
  • Криптиране от страна на клиента

Въпреки това, колкото по-сложна стратегия за криптиране използвате, толкова по-голяма е вероятността да останете без достъп до данните си. Освен това процесът на четене не само ще бъде труден, но и ще изисква много ресурси за запитване и декриптиране. Избраната от вас опция за криптиране зависи от естеството на данните, с които работите по отношение на чувствителността. Диаграмата по-долу илюстрира цялостната процедура на криптиране и декриптиране на данни по време на транзакции на сървъра.

Тази статия обсъжда различни начини, по които едно предприятие може да защити чувствителна информация, но основният интерес ще бъде криптирането на ниво екземпляр, което беше споменато по-рано.

Шифроване

Шифроването е практика на кодиране на данни, така че те вече да не са в оригиналния си формат и да не могат да бъдат прочетени. Има 2 типа данни, що се отнася до базата данни:данни в покой и данни в движение. Когато данните се съхраняват в базата данни, те се наричат ​​данни в покой. От друга страна, ако клиент, например, изпрати заявка към базата данни, ако някои данни се връщат и трябва да достигнат до клиента, тогава това се нарича данни в движение. Двата различни типа данни трябва да бъдат защитени с помощта на подобна технология. Например, ако приложение е разработено така, че потребителят трябва да подаде парола, тази парола няма да се съхранява в базата данни като обикновен текст. Има някои процедури за кодиране, които се използват за промяна на този обикновен текст в различен низ преди съхранение. Освен това, ако потребителят трябва да използва тази парола например за система за вход, тогава имаме нужда от начин за сравняване на такава, която ще бъде предоставена в процеса на декриптиране.

Криптирането на базата данни може да бъде приложено по различни начини, но много разработчици не вземат предвид транспортното ниво. Различните подходи обаче са свързани и с различни капани сред забавените времена за достъп до данни, особено когато се осъществява тежък достъп до виртуалната памет.

Криптиране на данни в покой

Данни в покой означава неактивни данни, които се съхраняват физически на диск. Когато става въпрос за хостване на база данни в облачна среда, където доставчикът на облак има пълен достъп до инфраструктурата, криптирането може да бъде добра мярка за запазване на контрол върху данните. Някои от стратегиите за криптиране, които можете да използвате, са обсъдени по-долу.

Пълно дисково криптиране (FDE)

Концепцията зад FDE обикновено е да защитава всеки файл и временно съхранение, които могат да съдържат части от данните. Той е доста ефективен, особено когато ви е трудно да изберете какво искате да защитите или по-скоро ако не искате да пропуснете файл. Основното предимство на тази стратегия е, че не изисква специално внимание от страна на крайния потребител след достъп до системата. Този подход обаче има някои клопки. Те включват:

  • Процесът на криптиране и декриптиране забавя общото време за достъп до данни.
  • Данните може да не са защитени, когато системата е включена, тъй като информацията ще бъде декриптирана и готова за четене. Следователно трябва да използвате някои други стратегии за криптиране, като например криптиране, базирано на файлове.

Файлово базирано шифроване

В този случай файловете или директориите са криптирани от самата подреждаща се криптографска файлова система. В PostgreSQL често използваме подхода pg_crypto, както е обсъдено в тази статия.

Някои от предимствата на криптирането на файловата система включват:

  • Контролът върху действията може да бъде наложен чрез използване на криптография с публичен ключ
  • Отделно управление на криптирани файлове, така че архивирането на индивидуално променени файлове дори в криптирана форма, вместо архивиране на целия криптиран том.

Това обаче не е много надежден метод за криптиране, който можете да използвате за вашите клъстерирани данни. Причината е, че някакво решение за криптиране, базирано на файлове, може да остави остатък от криптирани файлове, от които нападателят може да се възстанови. Следователно най-добрият комбиниран подход е да комбинирате това с пълно криптиране на диска.

Шифроване на ниво екземпляр

Нивото на екземпляра използва буфери, така че всички файлове, съставляващи PostgreSQL клъстера, се съхраняват на диск като криптиране на данни в покой. След това те се представят като блокове за декриптиране, тъй като се четат от диск в споделени буфери. След изписването на тези блокове на диска от споделените буфери, те отново се криптират автоматично. Базата данни първо се инициализира с криптиране с помощта на командата initdb. Второ, по време на стартиране, ключът за криптиране се извлича от сървъра по един от тези два начина; чрез параметър pgcrypto.keysetup_command или чрез променлива на средата.

Изтеглете Бялата книга днес Управление и автоматизация на PostgreSQL с ClusterControl Научете какво трябва да знаете, за да внедрите, наблюдавате, управлявате и мащабирате PostgreSQLD Изтеглете Бялата книга

Настройване на криптиране на ниво инстанция

Малко обобщение за това как можете да настроите криптирането на ниво екземпляр е описано в стъпките по-долу:

  1. Проверете дали имате инсталиран “contrib”, като използвате командата rpm -qa |grep contrib за базирана на RedHat ОС или dpkg -l |grep contrib за базирана на Debian OS. Ако не е в списъка, тогава го инсталирайте с apt-get install postgresql-contrib, ако използвате базирана на Debian среда, или yum install postgresql-contrib, ако използвате базирана на RedHat OS.
  2. Създайте кода на PostgreSQL.
  3. Клъстер се инициализира чрез установяване на ключа за шифроване и изпълняваната команда he initdb
    read -sp "Postgres passphrase: " PGENCRYPTIONKEY
    export PGENCRYPTIONKEY=$PGENCRYPTIONKEY
    initdb –data-encryption pgcrypto --data-checksums -D cryptotest
  4. Стартирайте сървъра с командата
    $ postgres -D /usr/local/pgsql/data
  5. Задаване на променливата на средата PGENCRYPTIONKEY с командата:
    export PGENCRYPTIONKEY=topsecret pg_ctl -D cryptotest start
    Ключът може също да бъде зададен чрез персонализирана и по-сигурна процедура за четене на ключ чрез споменатата по-горе команда „pgcrypto.keysetup_command“ параметър на postgresql.conf.

Очаквания за производителност

Шифроването винаги идва с цената на производителността, тъй като няма опции без цена. Ако работното ви натоварване е ориентирано към IO, може да очаквате значително намалена производителност, но това може да не е така. Понякога при типичния сървърен хардуер, ако наборът от данни е по-малко споделен в буферите или времето му на престой в буферите е малко, ударът в производителността може да е незначителен.

След като извърших криптирането на моята база данни, проведох малък тест, за да проверя дали криптирането наистина влияе върху производителността и резултатите са представени в таблица по-долу.

Работно натоварване Без криптиране С криптиране Разходи за производителност
Операция за групово вмъкване 26 секунди 68s 161%
Поставяне на четене-запис в споделени буфери (в съотношение 1:3) 3200TPS 3068TPS 4,13%
Само за четене от споделени буфери 2234 TPS 2219 TPS 0,68%
Само за четене, без да се вписва в споделени буфери 1845 TPs 1434 TPS 22,28%
Четене-запис не се вписва в споделените буфери в съотношение 1:3 3422 TPS 2545 TPS 25,6%

Както е показано в таблицата по-горе, можем да видим, че производителността е нелинейна, тъй като понякога скача от 161% на 0,7%. Това е проста индикация, че производителността на криптирането е специфична за натоварването, освен че е чувствителна към количеството страници, преместени между споделените буфери и диска. Това може също да повлияе на мощността на процесора в зависимост от включеното работно натоварване. Шифроването на ниво екземпляр е доста жизнеспособна опция и най-простият подход за редица среди.

Заключение

Криптирането на данни е важно начинание, особено за чувствителна информация в управлението на база данни. Съществуват редица опции за криптиране на данни, що се отнася до PostgreSQL. Когато се определя кой подход да се използва, е важно да се разберат данните, архитектурата на приложението и използването на данни, тъй като криптирането идва с цената на производителността. По този начин ще можете да разберете:кога да активирате криптирането, къде са изложени вашите данни и къде са безопасни, кой е най-добрият подход за криптиране.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как работи функцията to_number() в PostgreSQL

  2. Получаване на име на текущата функция вътре във функцията с plpgsql

  3. Как работи функцията Power() в PostgreSQL

  4. Rails отчетите не могат да намерят колона, която е там

  5. SQLAlchemy множество външни ключове в един съпоставен клас към същия първичен ключ