Təsəvvür elə ki, sənin database-in elə bir klubdur ki, orda üzvlük qaydaları çox sərtdir. Ora ancaq öz adamlar girə bilər, amma biz bilmək istəyirik ki, kim gəlib, nə vaxt gəlib, nə qədər qalıb və nə iş görüb. Bax, PostgreSQL-də audit məhz bunun üçündür. Onun köməyi ilə sən bunları edə bilərsən:
İstifadəçi fəaliyyətini izləmək. Məsələn, kim və nə vaxt vacib bir sorğu işlədib.
Şübhəli aktivliyi aşkar etmək. Bu, məsələn, kiminsə icazəsi olmayan məlumatları oxumağa cəhd etməsi ola bilər.
Qanunvericilik və standartlara əməl etmək. Bir çox sahələrdə (məsələn, maliyyə və ya tibb) istifadəçi fəaliyyətinin detallı auditi aparılmalıdır.
Sistemi içəridən başa düşmək. Loglama kömək edir ki, hansı sorğular daha çox işlədilir, harada dar boğazlar var və performansı necə optimallaşdırmaq olar.
Loglama parametrlərinin qurulması
PostgreSQL audit üçün konfiqurasiya parametrləri ilə işləməyə imkan verir, məsələn log_statement və log_connections. Gəlin bunlara bir az yaxından baxaq.
log_statement: nəyi yazırıq?
log_statement parametri müəyyən edir ki, hansı SQL-sorğular loglara yazılacaq. Bu, sistemdə nə baş verdiyini anlamaq üçün çox faydalıdır.
log_statement üçün dəyərlər:
none— heç nə yazılmasın (əgər riskli yaşamağı sevirsənsə, bu sənin üçündür).ddl— yalnız database strukturunu dəyişən komandalar yazılsın (məsələn,CREATE TABLE).mod— məlumatı dəyişən komandalar yazılsın (məsələn,INSERT,UPDATE,DELETE).all— hər şeyi yaz.
Quruluş nümunəsi: bu parametri dəyişmək üçün postgresql.conf faylını redaktə etməlisən:
# Bütün SQL-sorğuları loglamaq üçün qururuq
log_statement = 'all'
Bundan sonra dəyişiklikləri yadda saxla və PostgreSQL serverini yenidən başlad:
pg_ctl reload
İndi sənin klubun hər bir hərəkəti, içki sifarişindən tutmuş rəqs addımlarına qədər, jurnala yazacaq.
log_connections: kluba kim girir?
log_connections parametri hər yeni database bağlantısı barədə loglara məlumat yazır. Bundan əlavə, log_disconnections adlı bağlı bir parametr də var, o da bağlantının bağlanma anını qeyd edir.
Quruluş nümunəsi: Yenə də postgresql.conf faylını redaktə edirik:
# Bağlantıları loglayırıq
log_connections = on
# Bağlantıların kəsilməsini loglayırıq
log_disconnections = on
Bu bizə nə verir? Məsələn, loglarda görə bilərsən ki, sənin menecer iki saat səhv parolla database-ə qoşulmağa çalışıb. Hə, gecə saat 3-də.
Logların analizi: nə tapmaq olar?
log_statement və log_connections parametrlərini qurduqdan sonra PostgreSQL log yazmağa başlayacaq. Budur, log_statement = 'mod' aktiv olanda log-fayl necə görünə bilər:
2023-11-01 12:45:01 UTC [12345] LOG: connection authorized: user=admin database=university
2023-11-01 12:46:15 UTC [12345] STATEMENT: INSERT INTO students (name, age) VALUES ('Alice', 22);
2023-11-01 12:47:30 UTC [12345] STATEMENT: UPDATE students SET age = 23 WHERE name = 'Alice';
2023-11-01 12:48:45 UTC [12345] LOG: disconnection: session time: 2:45 connection: 1/5
Maraqlı məqamlar:
- Kim qoşulub:
user=admin database=university— bu bizim boss-dur. - Nə edib:
Aliceadlı sətri əlavə edib və onun yaşını yeniləyib. - Nə vaxt çıxıb: 12:48:45, iki yarım dəqiqəlik aktivlikdən sonra.
Praktik nümunələr: audit necə istifadə olunur?
Gəlin bir neçə ssenariyə baxaq, harada audit və loglama faydalı ola bilər.
Ssenari 1: məlumat dəyişikliklərini izləmək
Şübhələnirsən ki, kimsə students cədvəlindəki qeydləri dəyişir. Audit belə qurula bilər:
log_statement = 'mod'qoy ki, bütün dəyişdirici sorğular yazılsın.- Logları analiz et:
cat /var/log/postgresql/postgresql.log | grep "UPDATE students"
İndi görə biləcəksən ki, kim, nə vaxt və hansı dəyişiklikləri edib.
Ssenari 2: şübhəli bağlantıları aşkar etmək
Əgər loglarda müxtəlif IP-lərdən tez-tez bağlantılar görünürsə, bu nəsə qəribədir. Analiz üçün istifadə et:
- Bağlantı logları (
log_connections). - IP-lərə görə filtrasiya:
cat /var/log/postgresql/postgresql.log | grep "connection authorized"
Ssenari 3: sorğu performansının analizi
Server niyə ləngiyir, başa düşmək istəyirsən? Sadə yol — qısa müddətə (məsələn, bir saatlıq) log_statement = 'all' aç, logları topla və bax, server ən çox harada vaxt keçirir.
Ən yaxşı təcrübələr
Hər şeyi loglama. log_statement-i elə qur ki, yalnız vacib hərəkətlər — DDL və məlumat dəyişiklikləri yazılsın.
Log analizini avtomatlaşdır. Logları müntəzəm oxumaq və analiz etmək üçün skriptlər və ya alətlərdən istifadə et, məsələn grep, awk və ya hətta ELK Stack (Elasticsearch, Logstash, Kibana).
Log ölçüsünü idarə et. Log rotasiyasını PostgreSQL parametrləri və ya əməliyyat sistemi alətləri ilə qur (məsələn, Linux-da logrotate).
Ümid edirəm, indi öz database-nin əsl şerifi kimi hiss edirsən. Loglama və audit təkcə qoruma deyil, həm də sistemində nə baş verdiyini daha yaxşı anlamaq üçün əla üsuldur. Gəl, bu bilikləri real layihələrdə necə tətbiq edəcəyimizi görək!
GO TO FULL VERSION