5) من يملك صلاحية تنفيذ دالة جديدة افتراضيًّا في PostgreSQL؟
2السؤال الثاني: صح أم خطأ
1) SECURITY DEFINER يُستحسن معه تثبيت search_path.
الصواب: صح
2) الافتراضي في PostgreSQL أن تعمل الدالة بصلاحيات مالكها.
الصواب: خطأ
3) يمكن منح دور صلاحية تنفيذ دالة دون صلاحية الجداول التي تقرؤها.
الصواب: صح
4) الإجراء المستدعى من داخل معاملة مفتوحة يستطيع COMMIT دائمًا.
الصواب: خطأ
5) فشل خطوة داخل إجراء يُلغي الخطوات التي قبلها.
الصواب: صح
3السؤال الثالث: أكمل الفراغات من القائمة المنسدلة
1) لمنح تنفيذ دالة نكتب GRANTON FUNCTION f(int) TO r;
الإجابة: EXECUTE
2) الدالة التي تعمل بصلاحيات مالكها تُعرّف بـ SECURITY .
الإجابة: DEFINER
3) لسحب صلاحية من الجميع: REVOKE ALL ON FUNCTION f FROM ;
الإجابة: PUBLIC
4السؤال الرابع: أسئلة عملية
1) ما مخزون المنتج 2 بعد هذا الكود؟
query.sql
CREATEPROCEDURE move_stock(from_id int, to_id int, n int)LANGUAGEplpgsqlAS $$BEGINUPDATE products SET stock = stock + n WHERE id = to_id; -- الإضافة أولًاUPDATE products SET stock = stock - n WHERE id = from_id; -- قد تخالف CHECK (stock >= 0)END;$$;CALL move_stock(1, 2, 3);SELECT stock FROM products WHERE id = 2;
الناتج الصحيح:
النتيجة · صف واحد
stock
15
2) ما ناتج هذا الكود؟
query.sql
CREATETABLE t (n int);CREATEPROCEDURE p() LANGUAGEplpgsqlAS $$BEGININSERTINTO t VALUES (1); COMMIT;INSERTINTO t VALUES (2); ROLLBACK;INSERTINTO t VALUES (3); COMMIT;END; $$;CALL p();SELECTsum(n) FROM t;