Twoje Centrum Szkoleniowe

Nauczmy się dziś czegoś nowego!

Kurs programowania - SQL

Bezpieczeństwo na poziomie danych

Bezpieczeństwo danych w bazie MySQL jest kluczowe, aby chronić informacje przed nieuprawnionym dostępem, wyciekiem lub manipulacją. Możemy zabezpieczać dane na różne sposoby: szyfrując je w spoczynku, podczas transmisji, maskując dane oraz zarządzając kluczami szyfrowania. Poniżej opisano te techniki oraz przykłady ich zastosowania.

Szyfrowanie Danych w Spoczynku

Szyfrowanie danych w spoczynku oznacza zabezpieczanie danych przechowywanych na dysku, na przykład w tabelach lub plikach dziennika. MySQL oferuje różne metody szyfrowania danych.

Transparent Data Encryption (TDE)

Transparent Data Encryption (TDE) umożliwia szyfrowanie danych bez konieczności modyfikowania aplikacji. Dzięki TDE dane w tabelach lub na dyskach są zabezpieczone nawet wtedy, gdy ktoś uzyska fizyczny dostęp do serwera.

Przykład: Szyfrowanie tabeli w MySQL przy użyciu TDE:

ALTER TABLE nazwa_tabeli ENCRYPTION='Y';

Szyfrowanie Plików Dziennika

MySQL pozwala również szyfrować pliki dziennika, takie jak dzienniki binarne oraz dzienniki transakcji, aby zabezpieczyć dane przed nieautoryzowanym dostępem.

Przykład: Włączenie szyfrowania plików dziennika binarnego w pliku konfiguracyjnym my.cnf:

[mysqld]
binlog_encryption = ON

Szyfrowanie Danych w Tabelach

MySQL umożliwia szyfrowanie danych w tabelach za pomocą funkcji AES_ENCRYPT() oraz AES_DECRYPT(), co pozwala zaszyfrować konkretne kolumny.

Przykład: Szyfrowanie i deszyfrowanie wartości w kolumnie:

INSERT INTO users (username, password)
VALUES ('uzytkownik', AES_ENCRYPT('haslo', 'klucz'));

SELECT AES_DECRYPT(password, 'klucz') FROM users WHERE username = 'uzytkownik';

Szyfrowanie Danych Podczas Transmisji

Szyfrowanie danych podczas transmisji zapewnia ochronę informacji przesyłanych między klientem a serwerem, aby nie mogły zostać przechwycone przez nieuprawnione osoby.

Konfiguracja SSL/TLS w MySQL

MySQL umożliwia konfigurację połączeń z użyciem protokołów SSL/TLS, co zabezpiecza przesyłane dane.

Przykład: Konfiguracja serwera MySQL do używania SSL/TLS:

[mysqld]
ssl-ca=/path/to/ca-cert.pem
ssl-cert=/path/to/server-cert.pem
ssl-key=/path/to/server-key.pem

Wymuszanie Szyfrowanych Połączeń

Możemy wymusić, aby użytkownicy łączyli się z serwerem tylko przez szyfrowane połączenia.

Przykład: Tworzenie użytkownika, który może łączyć się tylko przez SSL:

CREATE USER 'bezpieczny_uzytkownik'@'localhost' REQUIRE SSL;

Maskowanie Danych w MySQL

Maskowanie danych to technika, która ukrywa wrażliwe informacje przed osobami, które nie powinny mieć do nich dostępu. MySQL nie oferuje wbudowanej funkcji maskowania danych, ale można to zrealizować za pomocą widoków lub funkcji.

Maskowanie Danych za Pomocą Widoków

Widoki w MySQL mogą być używane do maskowania danych poprzez ograniczenie dostępu do wybranych kolumn lub zmodyfikowanie sposobu ich wyświetlania.

Przykład: Maskowanie numeru karty kredytowej:

CREATE VIEW MaskowaneDane AS
SELECT id, CONCAT('****-****-****-', SUBSTRING(numer_karty, 13, 4)) AS numer_karty
FROM Klienci;

Maskowanie za Pomocą Funkcji i Procedur

Możemy również stworzyć funkcje lub procedury, które maskują dane dynamicznie, pokazując tylko część informacji, np. numer telefonu.

Przykład: Funkcja maskująca numer telefonu:

CREATE FUNCTION MaskujNumerTelefonu(numer VARCHAR(12))
RETURNS VARCHAR(12)
DETERMINISTIC
BEGIN
RETURN CONCAT('***-***-', SUBSTRING(numer, 9, 4));
END;

Zarządzanie Kluczami Szyfrowania

Klucze szyfrowania odgrywają kluczową rolę w zabezpieczaniu danych i muszą być przechowywane w sposób bezpieczny, aby zapobiec ich kradzieży lub nieautoryzowanemu użyciu.

Przechowywanie Kluczy Szyfrowania

Klucze szyfrowania w MySQL mogą być używane do szyfrowania tabel przy użyciu TDE lub funkcji takich jak AES_ENCRYPT(). Zaleca się przechowywanie kluczy w bezpiecznych lokalizacjach, takich jak narzędzia do zarządzania tajemnicami.

Przykład: Przechowywanie kluczy w narzędziu do zarządzania tajemnicami, takim jak HashiCorp Vault:

curl --header "X-Vault-Token: " --request POST \
--data '{"data": {"key": "my-secret-key"}}' \
http://127.0.0.1:8200/v1/secret/data/myapp

HashiCorp Vault pozwala na bezpieczne przechowywanie kluczy i innych tajemnic, co minimalizuje ryzyko nieautoryzowanego dostępu.

Testy przypięte do lekcji
Aby uzyskać dostęp do testów i ćwiczeń interaktywnych - Zaloguj się
Aby widzieć ocenę lekcji - Zaloguj się