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

Защита на базата данни 101:Сигурност в бази данни с отворен код

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

Обща сигурност

След като инсталираме софтуера на базата данни, трябва да направим някои предварителни проверки, за да избегнем най-често срещаните грешки в сигурността.

Общите  насоки са както следва:

  • Никога не давайте на никого root/admin достъп до други! Това е критично.

  • Научете как работи системата за права за достъп до базата данни. Не предоставяйте повече привилегии от необходимото. Никога не предоставяйте привилегии на всички хостове.

  • Не съхранявайте пароли с чист текст във вашата база данни. Вместо да използвате SHA2() или някаква друга еднопосочна функция за хеширане и съхранявайте хеш стойността.

  • Не използвайте портове по подразбиране и се уверете, че избраният порт не е достъпен от ненадежден хост.

  • Поставете базата данни с отворен код зад защитна стена. Това ви предпазва от поне 50% от всички видове експлоати във всеки софтуер.

Контрол на достъпа и управление на акаунти

Една от основните функции на базата данни е да удостоверява потребител, който се свързва от даден хост, и да свързва този потребител с привилегии в база данни. За да контролирате кои потребители могат да се свързват, на всеки акаунт могат да бъдат присвоени идентификационни данни за удостоверяване, като например парола.
 

Потребителски роли 

Ролята на база данни е колекция от произволен брой привилегии, които могат да бъдат присвоени на един или повече потребители. В съвременните бази данни с отворен код повечето потребители идват с предварително дефинирани роли.

Управление на пароли 

Достъпът до базата данни изисква техните потребители да се удостоверят с потребителско име и парола. Базата данни прилага същата хеш функция към паролата, която е въвел потребителят, и я сравнява с хеша, съхранен в базата данни. Ако и двете съвпадат, тогава се дава разрешение. Изтичането на паролата е необходимо за всички потребители на базата данни, за да променят паролите периодично. И произволно генериране на парола е необходимо за изрично посочени от администратора буквални пароли. Едно важно нещо, което трябва да наблюдавате, е неправилно проследяване на парола/удостоверяване. Препоръчително е да активирате временно заключване на акаунта след твърде много последователни грешки при влизане с неправилна парола.

Обработка на пароли с изтекъл срок

След като паролата изтече, сървърът на базата данни прекъсва клиентска връзка с изтекла парола.

Пример 
[[email protected] vagrant]# mysql -u severalnies -p
Password: ******
ERROR 1862 (HY000): Your password has expired. To log in you must
change it using a client that supports expired passwords.

 

Ограничаване на ресурсите 

Ограничете използването от страна на клиента на ресурсите на сървъра на базата данни, като ограничите броя на едновременните връзки, които могат да бъдат направени от всеки потребителски акаунт. Например, можем да ограничим броя на заявките, които потребителят може да изпълни на час, или броя пъти, когато потребителят може да се свърже със сървъра на час.

Шифровани връзки 

Базите данни обикновено поддържат криптирани връзки между клиентите и сървъра, използвайки някои протоколи за сигурност. Използвайки SSL, той ще криптира връзките между клиентите и сървъра. Това превръща данните в нечетлив формат през мрежовия слой и избягва подслушването в мрежата. След като активираме SSL в базата данни, тя започва да поддържа криптирани връзки и няма да позволява некриптирани връзки.

Компоненти и плъгини за сигурност

Компонентите за сигурност се интегрират лесно с базата данни. Например mysql включва няколко компонента и плъгини, които внедряват функции за сигурност.

Плъгини за удостоверяване – Тези плъгини представляват опити за удостоверяване на клиентите да се свържат с MySQL сървъра. Можем лесно да се интегрираме с нашия сървър на база данни.

Password Plugin – Този плъгин проверява дали текущата парола е силна и отхвърля всички пароли, които се считат за слаби.

Плъгин за ключодържатели – Този плъгин криптира пространствата за таблици. Тази техника за криптиране работи на базата на въртящи се ключови файлове. Ето пример за това как да криптирате MySQL 8.0.

Регистър на одита – одитът е процесът на наблюдение и записване на дейността, случваща се на сървъра на базата данни. Използва се за регистриране кой какво прави, напр. операции с база данни от потребители, връзки или неуспешни опити за влизане. Ако използвате балансьор на натоварване за достъп до базата данни, ще трябва да наблюдавате и това. По подразбиране регистрационните файлове за одит се съхраняват в директорията с данни на mysql.

Примерни регистрационни файлове 
20210306 02:30:06,centos14,root,localhost,519,1832,QUERY,,'select sleep(5)',0
20210306 02:30:08,centos14,s9smysqlchk,localhost,571,0,DISCONNECT,,,0
20210306 02:30:09,centos14,root,localhost,519,1867,QUERY,,'show schemas',0

Ако искате да съхранявате регистрационните файлове за одит на различни места, можете да добавите този параметър във вашия конфигурационен файл „server_audit_file_path“.

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

Приставка за валидиране на парола

Паролата е като думи, числа и низ от знаци. От страна на базата данни и сървъра, потребителското име и паролата бяха необходими за определен достъп. Например, ако паролата е предоставена като стойност на чист текст, приставката validate_password проверява паролата спрямо текущата политика за пароли и отхвърля паролата, ако е слаба.

Политиката validate_password_policy има три стойности LOW, MEDIUM или STRONG. Стойността на LOW проверява само дължината на паролата, политиката MEDIUM добавя някои условия, а политиката STRONG добавя условието, че поднизовете на паролата, които се състоят от 4 или повече знака, не трябва да съвпадат с думи в речников файл, който може да бъде посочен чрез промяна на променливата validate_password_dictionary_file.

LDAP Plugin

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

 Конфигурацията на LDAP е много ясна в ClusterControl. В тази публикация обяснихме стъпките за конфигуриране с помощта на ClusterControl.

Осигуряване на резервни копия на база данни 

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

VPN достъп до прескачащата хост мрежа 

За достъп до базата данни с отворен код на частната мрежа от локален най-добрият метод е да използвате VPN. VPN осигурява поверителност и сигурност на потребителите за изграждане на лична мрежова връзка в обществена мрежа. Хостът за прескачане е междинен хост или SSH шлюз за достъп до отдалечени мрежови сървъри. Jump сървърът действа като посредник, за да свърже двата края, като по този начин го прави "скачащ" хост за достъп до другата страна. Това е един от популярните начини за защита на сървъра от външния свят. Можем да използваме SSH тунелиране за достъп до отдалечена мрежа по сигурен начин, като полагаме по-малко усилия от конфигурирането на VPN сървър.

Управление на достъпа до базата данни чрез Jump host

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

Как можем да постигнем това?

Най-добрата практика е да настроите сървър за прескачане, който да се свързва с вашите бази данни от Linux машина, въпреки че DB екземплярът е в частна мрежа. След като създадете хоста на Jump, следвайте указанията по-долу,

  • Ограничете обществено достъпното във вашите бази данни с частни подмрежи.

  • Ограничете интернет шлюза в таблиците с маршрути.

  • Създайте нов VPC или добавете вашия хост за прескачане към същия VPC като вашия екземпляр на базата данни. След това добавете интернет шлюз към вашия jump сървър с публични подмрежи.

  • Разрешаване само на определени портове на база данни към изискваните IP адреси.

След това можем да създадем SSH тунел за достъп до сървър на база данни по защитен начин.

SELinux

SELinux е набор от модификации на ядрото и инструменти за потребителско пространство и има някои модули за политика. Модулите на политиката са контексти на SELinux за дефиниране на правила за това как процеси, файлове, портове и други системни обекти взаимодействат помежду си. Взаимодействието между системни обекти е разрешено само ако правилото на политиката позволява.

Потребителите на системата до голяма степен няма да знаят за SELinux. Само системните администратори трябва да обмислят колко стриктна политика да се прилага за тяхната сървърна среда. Тази подробност дава на ядрото на SELinux пълен, детайлен контрол върху цялата система.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySql Единична таблица, Изберете последните 7 дни и включете празни редове

  2. Как да се свържете с база данни с помощта на NaviCat MySQL клиент

  3. Как да съхранявате Emoji символ в MySQL база данни

  4. Разлика между две дати в MySQL

  5. Защо целите числа в кортежа от редове в базата данни имат суфикс 'L'?