Foydalanuvchilar, huquqlar, zaxira nusxa
267 daq
Haqiqiy bazada ma’lumot qimmatli: shaxsiy ma’lumotlar, pul, baholar. Uni ruxsatsiz kirishdan va yo‘qolishdan himoya qilish — bazani yuritishning ajralmas qismi.
Foydalanuvchilar va rollar
Har bir dastur va odam o‘z hisobi bilan ulanadi va faqat kerakli ishni qila oladi.
PostgreSQL’da hammasi rol: foydalanuvchi ham, guruh ham.
CREATE ROLE report_reader LOGIN PASSWORD 'kuchli-parol';
GRANT CONNECT ON DATABASE university TO report_reader;
GRANT SELECT ON students, grades TO report_reader;Huquqlar
| Huquq | Ruxsat beradi |
|---|---|
SELECT |
o‘qish |
INSERT, UPDATE, DELETE |
yozish, o‘zgartirish, o‘chirish |
CREATE, DROP, ALTER |
tuzilmani o‘zgartirish |
ALL PRIVILEGES |
hammasi |
Huquqni olib qo‘yish: REVOKE INSERT ON students FROM report_reader;
Eng kam huquq tamoyili: hisobotlar uchun — faqat SELECT; veb-sayt uchun — o‘z jadvallariga yozish, lekin DROP emas; administrator hisobi — faqat administratorlar uchun. SQLab’dagi umumiy bazalarga aynan shunday faqat o‘qish huquqi berilgan — shuning uchun ularda DELETE xato beradi.
SQL injection
Eng mashhur hujum. Dastur foydalanuvchi kiritgan matnni to‘g‘ridan-to‘g‘ri so‘rovga qo‘shsa:
-- dastur shunday so‘rov yasaydi:
SELECT * FROM users WHERE email = '<kiritilgan matn>';
-- hujumchi email o‘rniga shuni kiritadi: ' OR '1'='1
SELECT * FROM users WHERE email = '' OR '1'='1'; -- hamma foydalanuvchi!Himoya — parametrli so‘rovlar: qiymat so‘rovdan alohida yuboriladi va hech qachon SQL sifatida o‘qilmaydi.
db.query('SELECT * FROM users WHERE email = $1', [email]) -- PostgreSQL
db.query('SELECT * FROM users WHERE email = ?', [email]) -- MySQLQoidasi oddiy: foydalanuvchi matnini hech qachon so‘rovga satr sifatida yopishtirmang.
Parollar
Bazada parol hech qachon ochiq holda saqlanmaydi — faqat uning xeshi (bcrypt, scrypt, argon2). Baza o‘g‘irlansa ham, parollarni bilib bo‘lmaydi.
Zaxira nusxa (backup)
Disk buzilishi, xato DELETE, viruslar — zaxira nusxasiz bularning har biri falokat.
pg_dump -U postgres university > university.sql # nusxa olish
psql -U postgres -d university_new < university.sql # tiklashYaxshi amaliyot: avtomatik kundalik nusxa, boshqa serverda saqlash va tiklashni muntazam sinab ko‘rish — tekshirilmagan zaxira nusxa — zaxira nusxa emas.
Esda qoldiring
- Har bir dastur — o‘z hisobi va faqat kerakli huquqlar (
GRANT/REVOKE). - SQL injection’dan himoya — parametrli so‘rovlar.
- Parol — faqat xesh; zaxira nusxa — muntazam va tekshirilgan.