طَبِّقْهاتعلّم المبدأ، وطبّقه بيدكمقرر 122 · برمجة قواعد البيانات
تقييم الدرس 16

المعاملات والأمان في البرامج المخزنة

أجب عن الأسئلة ثم اضغط «صحّح ورقتي» في آخر الصفحة. ← العودة إلى الدرس

أسئلة التقييم

تقييم الدرس 16: المعاملات والأمان في البرامج المخزنة. إجاباتك تُحفظ تلقائيًّا على هذا الجهاز؛ أجب ثم اضغط «صحّح ورقتي».

1السؤال الأول: اختر الإجابة الصحيحة

1) ماذا يضمن تنفيذ البرنامج المخزن داخل معاملة؟
2) ما نتيجة تنفيذ هذا الكود؟
query.sql
CREATE FUNCTION f() RETURNS int LANGUAGE plpgsql AS $$BEGIN INSERT INTO categories (name) VALUES ('س'); COMMIT; RETURN 1; END; $$;SELECT f();
3) لماذا نعالج ملايين الصفوف على دفعات مع COMMIT؟
4) في Oracle تُكتب صلاحيات المستدعي:
5) من يملك صلاحية تنفيذ دالة جديدة افتراضيًّا في PostgreSQL؟

2السؤال الثاني: صح أم خطأ

1) SECURITY DEFINER يُستحسن معه تثبيت search_path.
الصواب: صح
2) الافتراضي في PostgreSQL أن تعمل الدالة بصلاحيات مالكها.
الصواب: خطأ
3) يمكن منح دور صلاحية تنفيذ دالة دون صلاحية الجداول التي تقرؤها.
الصواب: صح
4) الإجراء المستدعى من داخل معاملة مفتوحة يستطيع COMMIT دائمًا.
الصواب: خطأ
5) فشل خطوة داخل إجراء يُلغي الخطوات التي قبلها.
الصواب: صح

3السؤال الثالث: أكمل الفراغات من القائمة المنسدلة

1) لمنح تنفيذ دالة نكتب GRANT ON FUNCTION f(int) TO r;
الإجابة: EXECUTE
2) الدالة التي تعمل بصلاحيات مالكها تُعرّف بـ SECURITY .
الإجابة: DEFINER
3) لسحب صلاحية من الجميع: REVOKE ALL ON FUNCTION f FROM ;
الإجابة: PUBLIC

4السؤال الرابع: أسئلة عملية

1) ما مخزون المنتج 2 بعد هذا الكود؟

query.sql
CREATE PROCEDURE move_stock(from_id int, to_id int, n int)LANGUAGE plpgsqlAS $$BEGIN  UPDATE 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
CREATE TABLE t (n int);CREATE PROCEDURE p() LANGUAGE plpgsql AS $$BEGIN  INSERT INTO t VALUES (1); COMMIT;  INSERT INTO t VALUES (2); ROLLBACK;  INSERT INTO t VALUES (3); COMMIT;END; $$;CALL p();SELECT sum(n) FROM t;
الناتج الصحيح:
النتيجة · صف واحد
sum
4
أجب عن الأسئلة ثم اضغط «صحّح ورقتي».

📝 معلم؟ أرسل ملاحظة للمؤلف عن هذا الدرس