Rol PostgreSQL-də ya ayrıca bir istifadəçini, ya da istifadəçilər qrupunu ifadə edə bilər. O, verilənlər bazalarına, cədvəllərə, sxemlərə və digər obyektlərə çıxışı idarə edir.
Rol yaradanda, o, default olaraq heç bir istifadəçiyə və ya qrupa bağlı olmur, amma sən ona istədiyin xüsusiyyətləri və hüquqları verə bilərsən.
Rollar və istifadəçilər arasındakı fərq
Bəs istifadəçilər necə? Burda qarışdırmaq olmaz. PostgreSQL-də istifadəçilər də rol sayılır, amma bir fərqlə: istifadəçilərin həmişə sistemə daxil olmaq imkanı olur. Yəni hər bir rol istifadəçi ola bilər, əgər onun LOGIN atributu varsa. Əgər rol sadəcə istifadəçiləri qrupa birləşdirmək üçündürsə və ya ona login imkanı vermək istəmirsənsə, LOGIN atributunu əlavə etməyə ehtiyac yoxdur.
Nümunə:
LOGINatributu olan rol = istifadəçi.LOGINolmadan rol = qrup və ya "xidmət rolu".
Rol yaradırıq
Rol yaratmaq üçün CREATE ROLE komandası istifadə olunur. Sintaksisi belədir:
CREATE ROLE <rol_adı> [WITH] [parametrlər];
Burda parametrlər — rolun xüsusiyyətləridir, məsələn:
LOGIN— verilənlər bazasına daxil olmaq imkanı.CREATEDB— verilənlər bazası yaratmaq imkanı.CREATEROLE— başqa rollar yaratmaq imkanı.SUPERUSER— tam çıxış (ən təhlükəli rollardır, ehtiyatlı istifadə et).PASSWORD— avtorizasiya üçün parol.
Gəlin istifadəçi rolu yaratmağa nümunə baxaq. Tutaq ki, sən student adlı istifadəçi yaratmaq istəyirsən, ona login hüququ və parol vermək istəyirsən. Bunun üçün belə sorğu yazırsan:
CREATE ROLE student WITH LOGIN PASSWORD 'securePassword123';
Bu komanda student adlı rol yaradacaq və o, verilənlər bazasına qoşula biləcək.
İndi isə teachers adlı qrup rol yaradaq. Qrup rol üçün LOGIN atributu lazım deyil, çünki qrupa daxil olan istifadəçilər öz hesabları ilə daxil olacaqlar.
CREATE ROLE teachers;
Rollara imtiyazların verilməsi
PostgreSQL-də rollar resurslara çıxışı vermək və ya məhdudlaşdırmaq üçün yaradılır. Bunun üçün GRANT və REVOKE komandalarından istifadə olunur.
GRANT ilə hüquqların verilməsi
Komandanın sintaksisi:
GRANT <imtiyazlar> ON <obyekt> TO <rol>;
Gəlin courses adlı cədvəl yaradaq və teachers roluna bu cədvəldə oxuma və dəyişmə hüquqları verək.
-- Cədvəl yaradırıq
CREATE TABLE courses (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
teacher_id INT
);
-- Çıxış veririk
GRANT SELECT, INSERT, UPDATE ON courses TO teachers;
İndi teachers roluna daxil olan bütün istifadəçilər bu cədvəli oxuya, əlavə edə və dəyişə biləcəklər.
REVOKE ilə hüquqların ləğvi
Hüquqları ləğv etmək üçün REVOKE komandası istifadə olunur. Sintaksis:
REVOKE <imtiyazlar> ON <obyekt> FROM <rol>;
teachers qrupunun courses cədvəlində məlumatları yeniləməsini qadağan etmək üçün belə yazırsan:
REVOKE UPDATE ON courses FROM teachers;
Rolların iyerarxiyası: irsiyyət
İstifadəçilər qrup rolundan "irsən" hüquqlar ala bilərlər ki, idarəetmə asan olsun. Bu, bir növ "irs" kimi bir istifadəçidən digərinə hüquqların ötürülməsidir.
INHERIT açar sözü rola başqa roldan hüquqları irsən almağa imkan verir. Bu davranış default olaraq aktivdir, amma dəyişmək olar.
Nümunə:
-- `john` istifadəçisini `teachers` qrupuna əlavə edirik
GRANT teachers TO john;
İndi john istifadəçisi avtomatik olaraq teachers qrup roluna verilmiş bütün hüquqları alacaq.
Hüquqları yoxlayaq:
\du john
Əgər irsiyyəti söndürmək lazımdırsa, rol NOINHERIT atributu ilə yaradılır.
CREATE ROLE admin NOINHERIT;
İndi admin rolunda olan istifadəçilər default olaraq onun hüquqlarından istifadə edə bilməyəcəklər.
Çıxışın idarə olunması üçün qrup rollar yaratmaq
Qrup rollar çıxışın idarə olunmasını asanlaşdırır, xüsusən böyük layihələrdə. Hər istifadəçiyə ayrıca hüquq vermək əvəzinə, onları qrupa əlavə edirsən, qruplara isə lazım olan imtiyazları verirsən.
Sadə qrup rol nümunəsi göstərək. Bunun üçün qruplar yaradaq:
students— tələbələr üçün qrup.teachers— müəllimlər üçün qrup.
CREATE ROLE students;
CREATE ROLE teachers;
İstifadəçiləri qruplara təyin edirik:
-- john istifadəçisini students qrupuna təyin et
GRANT students TO john;
-- jane istifadəçisini teachers qrupuna təyin et
GRANT teachers TO jane;
İndi students və teachers qruplarına cədvələ çıxış verəndə, avtomatik olaraq bütün üzvlərinə də vermiş oluruq!
Praktiki tapşırıq
examsadlı cədvəl yarat, sahələri belə olsun:id: əsas açar;subject: mətn;teacher_id: müəllimin ID-si.
CREATE TABLE exams (
id SERIAL PRIMARY KEY,
subject TEXT NOT NULL,
teacher_id INT
);
studentsvəteachersqrup rollarını yarat.
CREATE ROLE students;
CREATE ROLE teachers;
teachersqrupunaexamscədvəlində məlumat əlavə etmək və dəyişmək hüququ ver.
GRANT INSERT, UPDATE ON exams TO teachers;
studentsqrupuna yalnız oxuma hüququ ver.
GRANT SELECT ON exams TO students;
aliceadlı istifadəçi yarat və onustudentsqrupuna əlavə et.
CREATE ROLE alice WITH LOGIN PASSWORD 'alicePassword';
GRANT students TO alice;
alicehansı hüquqlara malikdir, onun hesabı ilə qoşulub yoxla.
Artıq sən rolları necə yaratmaq, onların hüquqlarını idarə etmək və qrup rolları ilə admin işini necə asanlaşdırmaq lazım olduğunu bilirsən. Növbəti dərsdə biz GRANT və REVOKE komandaları ilə verilənlər bazası, sxem və cədvəl səviyyəsində çıxışın daha dəqiq idarə olunmasını öyrənəcəyik.
GO TO FULL VERSION