CodeGym /Kurslar /SQL SELF /Giriş icazələrinin idarə olunması və təhlükəsizlik

Giriş icazələrinin idarə olunması və təhlükəsizlik

SQL SELF
Səviyyə , Dərs
Mövcuddur

Təsəvvür elə, gecə kabusu: sən database administratorusan və vacib müştəri məlumatları olan cədvəl birdən... yoxa çıxır. Kim etdi bunu? Niyə? Ola bilər ki, bu, təsadüfən DROP TABLE yazan təcrübəsiz praktikantın səhvidir. Bəlkə də, bu, bazaya giriş imkanı olan pis niyyətli istifadəçidir... Nə olursa olsun, artıq gecdir! Yalnız ayılıb, özünə gəlmək və database təhlükəsizliyini öyrənməyə başlamaq qalır. Çünki təhlükəsizliyi olmayan database – təməlsiz ev kimidir.

Database-lər üçün qoruma yüksək səviyyədə olmalıdır ki, belə təhlükələrin qarşısı alınsın:

  • İcazəsiz giriş: kimsə, hüququ olmadığı məlumatlara çıxış əldə edir.
  • Məlumat sızması: şifrələr, kredit kartları və ya məxfi məlumatlar yad əllərə keçir.
  • SQL-injection: hiyləgər üsul, hansı ki, zəif qorunan sorğular vasitəsilə sənin bazanı manipulyasiya etməyə imkan verir.
  • İnsan səhvləri: təsadüfi məlumat silinməsi və ya geri qaytarılması mümkün olmayan dəyişikliklər.

PostgreSQL-də təhlükəsizlik bir neçə səviyyədə həyata keçirilir: rolların yaradılması və hüquqların idarə olunmasından tutmuş şəbəkə girişinin məhdudlaşdırılmasına qədər. Bu, sənə imkan verir ki, kim və nə edə bilər – hamısını çevik şəkildə tənzimləyəsən.

PostgreSQL-də əsas təhlükəsizlik səviyyələri

PostgreSQL-də sən girişə nəzarət edə biləcəyin üç əsas səviyyə var:

1. Database səviyyəsində girişin idarə olunması. Bu səviyyədə sən qərar verirsən ki, kim sənin database-ə qoşula bilər və qoşulduqda istifadəçi nə edə bilər. Məsələn, bəzi istifadəçilərə ümumiyyətlə baza daxil olmağı qadağan edə bilərsən. Başqalarına isə yalnız oxumağa icazə verə bilərsən. Bunun üçün əsas alət rollar-dır.

2. Cədvəl, sətr və sütun səviyyəsində girişə nəzarət.

PostgreSQL-də məlumatlara çıxışı çox dəqiq məhdudlaşdırmaq olar. Sən edə bilərsən:

  • İstifadəçiyə yalnız müəyyən sütunları oxumağa icazə ver.
  • Cədvəldəki məlumatları yalnız istifadəçi sətrin sahibi olduqda oxumağa icazə ver. Buna ROW LEVEL SECURITY (RLS) deyilir və biz bunu növbəti mühazirələrdə ətraflı öyrənəcəyik.
  • Yalnız vacib məlumatların olduğu database bölmələrinə (sxemlərə) çıxışı məhdudlaşdır.

3. Şəbəkə girişinin tənzimlənməsi. Database elə qurula bilər ki, yalnız etibarlı müştərilərdən sorğuları qəbul etsin. Bu, PostgreSQL-in pg_hba.conf adlı konfiqurasiya faylı vasitəsilə tənzimlənir. Bu fayl vasitəsilə, məsələn, yalnız lokal maşından və ya müəyyən IP ünvanlarından qoşulmağa icazə verə bilərsən.

PostgreSQL-in təhlükəsizlik alətləri

Gəlin baxaq, PostgreSQL hansı təhlükəsizlik vasitələrini təklif edir və onlar praktikada necə işləyir.

Başlayaq rollar və imtiyazlar-dan – bu, girişə nəzarət sisteminin əsasını təşkil edir. PostgreSQL-də rol – sadəcə istifadəçi deyil, daha çevik bir anlayışdır. O, həm bir nəfəri, həm də bütöv qrupu təmsil edə bilər. Məsələn, sən manager adlı rol yarada bilərsən, hansı ki, sifarişlər cədvəlinə tam giriş hüququna malik olacaq, praktikanta isə intern rolu uyğun olar, hansı ki, yalnız oxumaq hüququna malik olacaq – ki, təsadüfən heç nəyi pozmasın.

Rolları kifayət qədər çevik tənzimləmək olar: kiməsə daha çox hüquq vermək, kiməsə az, hətta bir rolun digərinin hüquqlarını miras almasına icazə vermək. Məhz rollar vasitəsilə müəyyən olunur ki, kim baza ilə qoşula bilər, hansı sxem və cədvəllər əlçatandır, hətta hansı sətrləri görmək və ya dəyişmək olar.

Sonra gəlir konfiqurasiya faylları. PostgreSQL-də təhlükəsizlik üçün iki əsas konfiqurasiya faylı var.

Birincisi – pg_hba.conf. O, database-ə şəbəkə girişinə cavabdehdir. Məhz burada tənzimlənir ki, ümumiyyətlə kim serverə qoşula bilər, hansı IP-dən və autentifikasiya necə aparılacaq. Əgər yalnız müəyyən maşınlar və ya istifadəçilər üçün giriş məhdudlaşdırılmalıdırsa – məhz burada edilir.

İkinci fayl – postgresql.conf. O, serverin ümumi ayarlarını idarə edir və burada, o cümlədən, log və audit parametrləri təyin olunur. Bu, kim nə edir izləməyə, şübhəli aktivliyi vaxtında görməyə və lazım gəldikdə detalları araşdırmağa imkan verir.

Nəhayət, loglama və audit. "Loglar – sənin ən yaxşı dostundur". Qəribə səslənir, amma database administratoru üçün bu, bir nömrəli qaydadır. PostgreSQL-də bütün sorğuları və istifadəçi fəaliyyətlərini loglamaq olar. Əgər nəsə düz getməsə, kim nə edib – bunu anlamağa kömək edəcək.

Nümunə: SQL-injection-dan məlumatların qorunması

SQL-injection – database-ə hücumun ən populyar üsullarından biridir. Və ondan qorunmağı bilmək çox vacibdir. Təsəvvür elə, səndə bir tətbiq var, istifadəçi öz hesabının ID-sini daxil edir ki, profilinə baxsın. Və tətbiq belə bir sorğu göndərir:

SELECT * FROM users WHERE id = 123;

Bəs istifadəçi rəqəm əvəzinə 123 OR 1=1 daxil etsə? Onda sorğu belə olacaq:

SELECT * FROM users WHERE id = 123 OR 1=1;

Və bir sətrin əvəzinə bütün users cədvəli əlçatan olacaq.

Bəs necə qorunmalı? PostgreSQL sənə parametrik sorğular və ya hazırlıqlı komandalar (PREPAREEXECUTE) istifadə etməyə imkan verir ki, istifadəçi məlumatları heç vaxt SQL kodu ilə qarışmasın. Bu, belə görünür:

PREPARE get_user_by_id (int) AS
SELECT * FROM users WHERE id = $1;

EXECUTE get_user_by_id(123);

Daha real təhlükə nümunələri

Təhlükəsizliyin niyə lazım olduğunu aydın başa düşəsən deyə, iki real ssenari gətirirəm:

Nümunə 1: "İşçi bütün cədvəli sildi"

Bir dəfə bir şirkətdə (əslində, bir dəfə yox, belə şirkətlər çox olub...) praktikant təsadüfən konsolda belə bir komanda yazdı:

DROP TABLE employees;

Və 10 illik əməkdaş məlumatları yoxa çıxdı. Bunu necə önləmək olar?

  • Hüquqları idarə et! Məsələn, intern roluna yalnız oxumaq icazəsi ver.
  • Audit qur! Loglar göstərir, kim o fəlakətli sorğunu işlədib.

Nümunə 2: "Məlumatların şifrəsiz bağlantı ilə sızması"

Əgər istifadəçi PostgreSQL serverinə şifrələnmə olmadan qoşulursa, onun login və şifrəsi pis niyyətli biri tərəfindən ələ keçirilə bilər. SSL qur və əmin ol ki, bağlantılar qorunur.

Administratorlar üçün əsas vəzifələr

Bu girişin sonunda PostgreSQL administratorunun üç əsas vəzifəsini qeyd edək:

  • Girişin məhdudlaşdırılması. Əmin ol ki, yalnız səlahiyyətli istifadəçilər müəyyən əməliyyatları yerinə yetirə bilər.
  • Şifrələmə. Məxfi məlumatlar həmişə şifrəli saxlanmalı və ötürülməlidir.
  • Monitorinq. Audit qur və loglarda şübhəli aktivliyi izləməyə başla.

Növbəti mühazirələrdə sən öyrənəcəksən ki, rollar necə yaradılır, GRANTREVOKE ilə giriş necə idarə olunur, sətr səviyyəsində girişə nəzarət necə tətbiq edilir və məlumatların qorunması üçün şifrələmə necə istifadə olunur.

2
Tapşırıq
SQL SELF, səviyyə, dərs
Bağlanıb
pgAdmin-dan tranzaksiyaların monitorinqi üçün istifadə
pgAdmin-dan tranzaksiyaların monitorinqi üçün istifadə
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION