Təsəvvür elə ki, sənin dataların bir qala kimidir və hər bir sakin öz hüquqlarına malikdir: kimisi sadəcə həyətə çıxa bilər, kimisi xəzinənin açarlarını saxlayır, kimisi isə taxt zalında oturub hər şeyi idarə edir. Bizim verilənlər bazasında bu rolları GRANT və REVOKE komandaları yerinə yetirir. Məhz onlar qərar verir: kim, hara və niyə gedə bilər.
GRANT komandası, adından da göründüyü kimi, resurslara (məsələn, verilənlər bazası, cədvəllər, sxemlər) müəyyən rollara giriş imkanı verir. Bu bir növ "party-yə dəvət" kimidir, burada sən qərar verirsən: kim oxuya, yaza və ya mebeli sındıra bilər.
REVOKE komandası isə, əksinə, əvvəl verilmiş hüquqları geri alır. Bu, sanki: "Ey, party sənin üçün bitdi, açarları çıxışda qoy" deməkdir.
GRANT ilə hüquqların verilməsi
Gəlin ən yuxarı səviyyədən başlayaq — verilənlər bazası. İstifadəçi bazaya qoşula bilsin deyə, ona qoşulma hüququ vermək lazımdır. Bunun üçün belə bir komanda var:
GRANT CONNECT ON DATABASE database_name TO role_name;
Məsələn, əgər bizdə university adlı verilənlər bazası və student rolu varsa, tələbələrə qoşulmağa icazə vermək üçün belə sorğu yazırıq:
GRANT CONNECT ON DATABASE university TO student;
Amma sadəcə qoşulmaq hələ hər şeyi etmək demək deyil. İstifadəçi bazada obyektlər yarada bilsin deyə, ona əlavə olaraq yaratmaq hüququ da vermək lazımdır:
GRANT CREATE ON DATABASE university TO student;
Bazadakı hüquqları belə yoxlaya bilərsən:
\l+ university
REVOKE ilə hüquqların geri alınması
Əgər tələbə birdən şübhəli hərəkətlər etməyə başlasa (məsələn, gözlədiyimizdən çox cədvəl yaratmağa çalışsa), onun yaratmaq hüququnu belə geri ala bilərik:
REVOKE CREATE ON DATABASE university FROM student;
Bundan sonra tələbə sadəcə qoşula biləcək, amma artıq "yaradıcılıq sərbəstliyi" olmayacaq.
Sxem səviyyəsində giriş hüquqlarının tənzimlənməsi
Sxem — əslində, verilənlər bazasının içində bir "otaq"dır, burada cədvəllər, görünüşlər və başqa obyektlər saxlanılır. İstifadəçi sxemdəki obyektlərlə işləyə bilsin deyə, oxuma, yazma və ya obyekt yaratmaq hüquqlarını tənzimləmək olar.
Sxemə hüquqların verilməsi
Tutaq ki, bizdə public sxemi var (bu, hər bazada default olaraq yaradılır). İstifadəçiyə sxemin içindəkiləri görməyə icazə verə bilərik:
GRANT USAGE ON SCHEMA public TO student;
Amma təkcə USAGE cədvəllərlə işləmək üçün kifayət deyil. İstifadəçi yeni obyektlər yarada bilsin deyə əlavə olaraq belə yazırıq:
GRANT CREATE ON SCHEMA public TO student;
Beləliklə, tələbə public sxemində həm oxuya, həm də yeni cədvəllər yarada bilər.
Sxemdə hüquqların ləğvi
Əgər tələbə birdən qəribə adlarla cədvəllər (məsələn, bad_idea_01) yaratmağa başlasa, onun hüquqlarını məhdudlaşdıra bilərik:
REVOKE CREATE ON SCHEMA public FROM student;
İndi tələbə artıq yeni cədvəl əlavə edə bilməyəcək. Qayda-qanun bərpa olundu!
Cədvəl səviyyəsində giriş hüquqlarının tənzimlənməsi
Cədvəl — yəqin ki, verilənlər bazasında ən məşhur obyektlərdəndir. Gəlin baxaq, cədvəllərə giriş necə tənzimlənir. Burada əsasən üç kateqoriya var: oxuma, yazma və dəyişmə.
Oxuma hüquqları
İstifadəçiyə cədvəlin içindəkiləri oxumağa icazə vermək üçün belə yazılır:
GRANT SELECT ON TABLE table_name TO role_name;
Məsələn, tələbələr courses cədvəlini oxuya bilsin deyə:
GRANT SELECT ON TABLE courses TO student;
İndi student istifadəçisi courses cədvəlindən SELECT sorğuları işlədə bilər.
Yazma hüquqları
İstifadəçi cədvələ yeni sətrlər əlavə edə bilsin deyə, belə tənzimləmək olar:
GRANT INSERT ON TABLE table_name TO role_name;
Nümunə:
GRANT INSERT ON TABLE courses TO student;
İndi tələbələr cədvələ yeni kurslar əlavə edə bilər. Amma bir dəqiqə... Əminik ki, bu yaxşı fikirdir?
Dəyişmə və silmə hüquqları
İstifadəçi mövcud sətrləri yeniləyə və ya silə bilsin deyə, ona UPDATE və DELETE hüquqları vermək lazımdır.
GRANT UPDATE ON TABLE courses TO student;
GRANT DELETE ON TABLE courses TO student;
Məsləhət: bu hüquqları çox vermə, yoxsa tələbələr təsadüfən (ya da bilərəkdən) hər şeyi poza bilər.
Nümunə: məhdud hüquqlu rol yaratmaq
Təsəvvür elə ki, müəllimlər üçün bir rol yaradırıq və onlar tələbələr və kurslar haqqında məlumatları oxuya bilərlər, amma heç nə silə bilməzlər. Bunu belə edirik:
- Rol yaradırıq:
CREATE ROLE teacher;
studentsvəcoursescədvəllərini oxumaq hüququ veririk:
GRANT SELECT ON TABLE students, courses TO teacher;
- Silmə hüququnu məhdudlaşdırırıq:
REVOKE DELETE ON TABLE students, courses FROM teacher;
İndi müəllimlərdə yalnız lazım olan hüquqlar var, artıq heç nə yoxdur.
GRANT və REVOKE ilə çevik tənzimləmə
Tutaq ki, bizdə intern adlı rol var və onu məhdudlaşdırmaq istəyirik. O, yalnız kurslar haqqında məlumatlara giriş imkanı olmalıdır, amma tələbə datalarına heç bir halda yox. Belə görünür:
- Yalnız
coursescədvəlinə giriş veririk:
GRANT SELECT, INSERT ON TABLE courses TO intern;
internrolununstudentscədvəlinə heç bir hüququ olmadığından əmin oluruq:
REVOKE ALL ON TABLE students FROM intern;
Bu kombinasiyaya görə hüquqları dəqiq tənzimləmək olur.
Real layihələrdə istifadə nümunələri
Bu giriş idarəetmə mexanizmi real layihələrdə tez-tez istifadə olunur. Məsələn:
- Online mağazalarda istifadəçi və sifariş cədvəllərinə hüquqlar "administrator", "operator" və "qonaq" rolları arasında bölüşdürülür.
- Universitet sistemlərində administratorlar kursları əlavə edə və dəyişə bilər, tələbələr isə sadəcə baxa bilər.
- Bank sistemlərində müştəri hesablarına giriş müxtəlif şöbə əməkdaşları arasında bölünür.
GO TO FULL VERSION