Linux Server Deployment & SSH Mastery · Lekcja

Zabezpieczanie połączeń z bazą danych

Skonfiguruj bezpieczne połączenia z bazą danych przy użyciu SSL/TLS i ogranicz dostęp na podstawie adresów IP, aby zwiększyć bezpieczeństwo.

Lekcja 3 z 412 kroki

Zabezpieczanie połączeń z bazą danych to bezpłatna lekcja Linux Server Deployment & SSH Mastery na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Linux Server Deployment & SSH Mastery, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Linux Server Deployment & SSH Mastery zawiera 4 lekcji w sumie.

Dlaczego warto zabezpieczać połączenia z bazą danych

Gdy aplikacje łączą się z bazą danych, poufne dane często są przesyłane przez sieć. Bez odpowiednich zabezpieczeń dane te mogą zostać przechwycone lub zmodyfikowane.

  • Poufność: Zapobiega nieautoryzowanemu odczytowi danych.
  • Integralność: Zapewnia, że dane nie zostaną zmienione podczas przesyłania.
  • Uwierzytelnianie: Weryfikuje tożsamość zarówno klienta, jak i serwera.

Ta lekcja koncentruje się na dwóch kluczowych metodach: szyfrowaniu SSL/TLS i ograniczeniach dostępu opartych na adresach IP.

Zrozumienie SSL/TLS w bazach danych

SSL/TLS (Secure Sockets Layer/Transport Layer Security) to standardowa technologia służąca do ustanawiania szyfrowanego połączenia między serwerem internetowym a klientem (w naszym przypadku między serwerem bazy danych a klientem).

  • Szyfruje wszystkie wymieniane dane, chroniąc je przed podsłuchaniem.
  • Wykorzystuje certyfikaty cyfrowe do weryfikowania tożsamości serwera (i opcjonalnie klienta).
  • Ma kluczowe znaczenie dla ochrony haseł, danych finansowych i danych osobowych podczas przesyłania.

Generowanie certyfikatów SSL/TLS

Aby korzystać z SSL/TLS, serwer bazy danych potrzebuje certyfikatu cyfrowego i klucza prywatnego. Potwierdzają one tożsamość serwera.

  • Certyfikaty z podpisem własnym: Najłatwiejsze do utworzenia na potrzeby testów lub sieci wewnętrznych, ale domyślnie niezaufane.
  • Certyfikaty podpisane przez urząd certyfikacji: Wydawane przez urząd certyfikacji (CA) i globalnie zaufane, idealne do środowisk produkcyjnych.

Na potrzeby tej lekcji załóżmy, że masz gotowy certyfikat serwera (server.crt) i klucz prywatny (server.key).

PostgreSQL: włączanie SSL

Aby włączyć SSL w PostgreSQL, musisz edytować plik postgresql.conf. Informuje on serwer, aby nasłuchiwał bezpiecznych połączeń i wskazuje, gdzie znajdują się certyfikaty.

Najważniejsze parametry:

  • ssl = on: Włącza SSL.
  • ssl_cert_file: Ścieżka do certyfikatu serwera.
  • ssl_key_file: Ścieżka do klucza prywatnego serwera.

Po wprowadzeniu zmian uruchom ponownie PostgreSQL.

# Snippet from postgresql.conf

ssl = on
ssl_cert_file = '/etc/ssl/certs/postgresql/server.crt'
ssl_key_file = '/etc/ssl/private/postgresql/server.key'
ssl_crl_file = '' # Optional: Certificate Revocation List

# Remember to restart PostgreSQL after changes!

MySQL: Włączanie SSL/TLS

W przypadku MySQL skonfiguruje Pan/Pani SSL/TLS w pliku my.cnf (lub my.ini w systemie Windows), zazwyczaj w sekcji [mysqld].

Należy określić ścieżki do certyfikatu serwera, klucza prywatnego oraz opcjonalnie certyfikatu urzędu certyfikacji (CA), jeśli jest on używany do weryfikowania certyfikatów klientów.

Po wprowadzeniu zmian należy ponownie uruchomić usługę MySQL, aby zostały one zastosowane.

# Snippet from my.cnf

[mysqld]
ssl_ca = /etc/mysql/certs/ca.pem
ssl_cert = /etc/mysql/certs/server-cert.pem
ssl_key = /etc/mysql/certs/server-key.pem

# Restart MySQL after changes!

Połączenie klienta z użyciem SSL/TLS

Po skonfigurowaniu serwera należy poinformować klientów, aby podczas łączenia korzystali z SSL/TLS. Zwykle wymaga to określenia opcji SSL w parametrach połączenia lub poleceniu.

Oto przykład użycia klienta psql dla PostgreSQL z jawnym wymaganiem trybu SSL:

  • sslmode=require: wymusza połączenie SSL.
  • sslrootcert: ścieżka do certyfikatu CA używanego do weryfikacji serwera.
psql "host=your_db_host user=your_user dbname=your_db \
  sslmode=require sslrootcert=/path/to/ca.crt"

Ograniczanie dostępu według adresu IP

Oprócz szyfrowania ograniczanie dostępu na podstawie adresu IP klienta jest podstawową praktyką bezpieczeństwa. Dzięki temu tylko zaufane maszyny mogą nawet próbować połączyć się z bazą danych.

Można to skonfigurować:

  • Na poziomie serwera bazy danych (np. za pomocą pliku pg_hba.conf w PostgreSQL lub instrukcji GRANT w MySQL).
  • Za pomocą zapory sieciowej (takiej jak UFW lub firewalld), aby blokować ruch do portu bazy danych z nieautoryzowanych adresów IP.

Połączenie obu metod zapewnia wielowarstwową ochronę.

PostgreSQL: ograniczenia adresów IP w pliku pg_hba.conf

PostgreSQL używa pliku pg_hba.conf do uwierzytelniania opartego na hoście. Każdy wiersz określa typ połączenia, bazy danych, użytkowników oraz dozwolone adresy IP.

Typowe pola:

  • TYPE: host (TCP/IP), local (gniazdo Unix).
  • DATABASE: all, konkretna nazwa bazy danych.
  • USER: all, konkretny użytkownik.
  • ADDRESS: zakres adresów IP (np. 192.168.1.0/24) lub pojedynczy adres IP.
  • METHOD: scram-sha-256, md5, peer itd.

Po zakończeniu edycji należy ponownie uruchomić PostgreSQL.

# Snippet from pg_hba.conf

# Allow connections from localhost for all users/databases
host    all             all             127.0.0.1/32            scram-sha-256

# Allow 'app_user' from specific IP range to 'app_db'
host    app_db          app_user        192.168.1.0/24          scram-sha-256

# Deny all other connections (implicit if no other rules match)

MySQL: ograniczenia adresów IP za pomocą GRANT

W MySQL ogranicza się dostęp użytkownika, określając host, z którego może się on łączyć podczas tworzenia lub modyfikowania użytkownika za pomocą instrukcji GRANT.

Kluczowa jest składnia 'user'@'host':

  • 'localhost': tylko z samego serwera.
  • '192.168.1.100': tylko z określonego adresu IP.
  • '%': z dowolnego hosta (należy używać z najwyższą ostrożnością!).
  • '192.168.1.%': z dowolnego adresu IP z zakresu 192.168.1.x.

Zawsze należy używać najbardziej restrykcyjnego możliwego hosta.

CREATE USER 'app_user'@'192.168.1.10' IDENTIFIED BY 'StrongPassword!';
GRANT ALL PRIVILEGES ON app_db.* TO 'app_user'@'192.168.1.10';
FLUSH PRIVILEGES;

Najlepsze praktyki bezpieczeństwa

Zabezpieczanie połączeń z bazą danych to proces wymagający stałej uwagi. Oto kilka najlepszych praktyk:

  • Minimalne uprawnienia: należy przyznawać użytkownikom i aplikacjom tylko niezbędne uprawnienia.
  • Silne hasła: należy wymuszać złożone hasła i regularnie je zmieniać.
  • Reguły zapory sieciowej: należy używać zapory serwera (UFW/firewalld), aby ograniczyć dostęp do portów baz danych (np. 5432 dla PostgreSQL i 3306 dla MySQL) wyłącznie do zaufanych adresów IP.
  • Regularne audyty: należy okresowo przeglądać dzienniki bazy danych i konfigurację dostępu.
  • Aktualizowanie oprogramowania: należy niezwłocznie instalować poprawki bezpieczeństwa serwera bazy danych i systemu operacyjnego.

Sprawdź swoją wiedzę

Które z poniższych metod prawidłowo zwiększają bezpieczeństwo połączeń z bazą danych?

Podsumowanie: zabezpieczanie danych

W tej lekcji omówiliśmy najważniejsze techniki zabezpieczania połączeń z bazą danych:

  • SSL/TLS: szyfruje dane podczas przesyłania, zapewniając poufność i integralność. Zobaczyliśmy, jak włączyć tę funkcję w PostgreSQL i MySQL oraz jak klienci mogą łączyć się bezpiecznie.
  • Ograniczenia adresów IP: ograniczają możliwość łączenia się z bazą danych na podstawie adresu sieciowego, z użyciem pliku pg_hba.conf w PostgreSQL i instrukcji GRANT w MySQL.
  • Najlepsze praktyki: omówiliśmy również ogólne wskazówki dotyczące bezpieczeństwa, takie jak stosowanie silnych haseł i regularne audyty.

Wdrożenie tych rozwiązań znacznie zmniejsza ryzyko nieautoryzowanego dostępu i wycieku danych.

Bezpłatny start

Ucz się Linux Server Deployment & SSH Mastery dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
12
Lekcje
48

Często zadawane pytania

Czy lekcja „Zabezpieczanie połączeń z bazą danych” jest bezpłatna?

Tak — pełny tekst „Zabezpieczanie połączeń z bazą danych” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Linux Server Deployment & SSH Mastery, przejdź na CoddyKit PRO. Kurs Linux Server Deployment & SSH Mastery zawiera 4 lekcji w sumie.

Co nauczysz się w „Zabezpieczanie połączeń z bazą danych”?

Skonfiguruj bezpieczne połączenia z bazą danych przy użyciu SSL/TLS i ogranicz dostęp na podstawie adresów IP, aby zwiększyć bezpieczeństwo. Ćwiczysz Linux Server Deployment & SSH Mastery z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Linux Server Deployment & SSH Mastery?

Nie wymagamy żadnego doświadczenia. Linux Server Deployment & SSH Mastery w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Zabezpieczanie połączeń z bazą danych”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Linux Server Deployment & SSH Mastery?

Tak. Każda lekcja Linux Server Deployment & SSH Mastery zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Instalowanie PostgreSQL/MySQL
  2. Użytkownicy baz danych i kontrola dostępu
  3. Zabezpieczanie połączeń z bazą danych
  4. Strategie tworzenia i odtwarzania kopii zapasowych baz danych
← Powrót do Linux Server Deployment & SSH Mastery