الجزء الثانى
الأسئلة العملى
1)أسئلة فى تصاريخ الدخول على SQLServer
ما هى أساسيات تصريح الدخول ومستوياتها, مع عرض قائمة جميع تصاريح الدخول, وكيفية إنشاء مستخدم بكلمة مرور وما هى سياسات كلمة المرور وكيفية الاستعلام عن المستخدمين.
أساسيات تصريح الدخول:
§ تمنح حق الدخول (Grant)
§ تلغى حقوق الدخول (Deny)
§ تلغى عمل الكلمتين السابقتين (Revoke)
مستويات تصريح الدخول:
§ منح تصريح على مستوى الخدمة
§ منح تصاريح على مستوى قواعد البيانات
§ حق الدخول على بيانات محددة
§ حق الدخول لمستخدم محدد
§ حق ملكية العناصر
قائمة جميع تصاريح الدخول
Select *
From sys.fn_builtin_permissions(‘Database’)
لعرض وحدة الخدمة: تصاريح الدخول
Select *
From sys.server_permissions
where class=100
لاستعراض تصاريح الدخول للنقاط الطرفية فى وحدة الخدمة
Select *
From sys.server_permissions
where class=105
لإنشاء مستخدم
Create Login أسم المستخدم
with password=’باسورد’
لتحديد دخول مستخدم على قاعدة بيانات معينة
Use أسم قاعدة بيانات
Create Userأسم المستخدم
كيفية الاستعلام عن المستخدمين (مخطط قواعد البيانات)
1. استعراض جميع المستخدمين وعمليات تسجيل الدخول لنسخة SQL
Select *
From sys.server_principals
1. أستعراض جميع المستخدمين لقاعدة البيانات
Use أسم قاعدة البيانات
Select *
From sys.database_principals
2. عرض جميع مخططات قواعد البيانات الموجودة
Select * From sys.schemas
سياسات كلمة المرور
1. كلمة يصعب اختراقها
2. كلمة لها مدة وتتغير
3. تامين حق الدخول من المهاجمين بنظام out Lock
2) مجموعة من الأستعلامات على
SQLServer (Northwind) Database
س: اعرض من جدول المنتجات Products الحقول: كود المنتج ProductID ، اسم المنتج ProductName و ثمن الوحدة UnitPrice ، سعر الوحدة مضافا إليه 10% ضريبة و أستخدم اسم معبر للحقل المحسوب TotalPrice
USE Northwind
SELECT ProductID, ProductName,
UnitPrice, (1.1*UnitPrice) as TotalPrice
FROM Products ;
س: أعرض أسم المنتج (ProductName) و أسم المورد (ContactName) الذى قام بتوريد المنتج ؟
select Products.ProductName,
Suppliers.ContactName
From Suppliers,Products
Where Products.SupplierID=
Suppliers.SupplierID
س: أعرض رقم الطلبية (OrderID) و أسم العميل (ContactName) لكل طلبية باستخدام الربط الداخلي (inner join) ؟
select orders.OrderID,
customers.ContactName
From customers inner join orders
on ( orders.customerid =
customers.customerid )
س: أستخدم استعلام فرعى لعرض بيانات طلبيه العميل (Thomas Hardy) ؟
Select Orders.*
From Customerid = ( Select Customerid
From Customers
Where Customername=’Thomas Hardy’ )
3) سؤال على الـ Transaction ممكن يجى صحح خطأ أو تتبع أو كما يلى
س: ما هى وحدة العمل Transaction
مع شرح مبسط لوحدات التحكم؟
ثم قم بكتابة كود لوحدة عمل بالاسم New_Account
يضيف صف فى جدول العميل Customer(CustID,
CustName,Phone) ثم يتأكد من
وجود العميل المضاف إن كان موجودا يضاف صف أخر فى جدول الحساب برقم 5 Account(AccountID, CustID)
إن لم يكن العميل موجودا يتم التراجع عن العمليات, وفى نهاية الوحدة يتم حفظ
الوحدة كاملة إن تم إضافة العميل برقم الحساب 5 وإن لم يضاف يتم التراجع عن كل
العمليات التى تمت بالوحدة؟
وحدة العمل (Transaction): هى مجموعة من العمليات المشتركة التى تتعامل مع
بعضها وفقا لشروط فيمكن التراجع عن بعضها وحفظ البعض الأخر أو تشغيل عملية معينة
بناءا على عملية أخرى او العكس.
وحدات التحكم :
§
لبدء عملية (Begin transaction)
§
حفظ وحدة عمل (Commit
Transaction)
§
إلغاء عمليات وحدة
عمل (Rollback Transaction)
§
حفظ مؤقت لوحدة
عمل (أسمSave transaction
) .
Begin Transaction
New_Account
Insert Into Customer
Values(1,’Kareem’,’0123333233’)
If exists( Select * From Customer
where CustId=1
)
Begin Transaction
Insert into Account Values(5,1);
Else
Rollback Transaction
If exists( Select *
From Account
where CustId=1 and
AccountID=5 )
Commit
Transaction
Else
Rollback Transaction
Go
4) سؤال عن الـ View
س: لماذا نستخدم المشهد View فى
إعداد التقارير المختلفة. أشرح باختصار أنواع المشاهد في قواعد البيانات.
أنشئ
المشهد المسمى View1 من جدولى Employees , Department بقاعدة البيانات Northwind
ليعرض اسم العائلة ( Last_Name
) و الأسم الأول ( First_Name ) للموظف و كد الموظف ( SSN
) من جدول الموظف , و كود القسم ( Department_ID ) و أسم القسم ( Department_name
) من جدول القسم .
المشهد : هو عبارة عن جملة أستعلام محفوظة بداخل قاعدة البيانات يتم تنفيذها
عند الأستدعاء .
نستخدم المشهد فى أعداد التقارير: إنشاء View على اساس عرض
البيانات المجمعة من اكثر من جدول لتبسيط الكود فى برنامج إنشاء التقارير,
أنواع المشاهد:
Create View View1
As
( Select E.lastname, E.firstname, E.SSN,
D.department_ID,
D.department_name
From Employees as E, Department as D
Where E.department_ID=D.department_ID );
5) سؤال عن الـ Index
س: ما هى وظيفة الفهرس (Index)
وماهى انواعه وما
هى أسباب أستخدامه ومتى يستحب أستخدامه ومتى لا؟
§
إنشئ الفهرس
Index-a على الحقل CustID فى جدول العميل
Customer بحيث لا يسمح بالتكرار.
§ عدل الفهرس ليصبح فهرسا مركبا ليرتب أسماء العملاء طبقا للأسم
Custname تنازلى و الشركة (Compname)
تصاعدى.
وظيفة
الفهرس: هى تصنيف للبيانات حتى يتم تسهيل البحث فلا
يمر الجهاز على كل البيانات المسجلة بل يصل مباشرة من خلال التصنيف الذى تم وهو ما
يعرف بطريقة (Direct Access)
التى تشبة تفرعات الشجرة (Tree-Like Structure).
أنواع
الفهارس: يمكن تصنيفها فهارس بسيطة (على حقل واحد)
وفهارس معقدة (على اكثر من حقل) كما يمكن تصنيفها فهارس غير مرتبة وفهارس مرتبة
(وهى الأكثر شيوعا).
أسباب
استخدامه:
1- تيسير ترتيب البيانات
2- زيادة سرعة تنفيذ الأستعلامات
3- ضبط البيانات باستخدام (Primary Key, Unique)
متى يستحب
استخدامه ومتى لا:
1- لا يستحب إن كان الجدول صغير
2- لا يستحب مع الحقول التى يتم التعديل فيها بصورة كبيرة
3- لا يستحب مع الحقول التى تحتوى على قيم Null
كثيرة.
4- يستحب مع الحقول التى تحتوى على بيانات مختلفة ومتغيرة.
5- يستحب مع البيانات المستخرجة من بيانات كثيرة.
6- يستحب مع حقول المفاتيح (رئيسية و خارجية)
Create unique index index-a
On customer( CustID )
Go
Drop Index index-a
GO
Create Index index-a
On
customer( custname desc,
compname asc )
6) سؤال عن الـ Trigger
س: ما هو الحدث ؟ ولماذا ننشئه؟ Trigger و كيف يعمل ؟ وما هى قواعد
استخدامه؟
أنشئ كود حدث يسمى Trig1 يقوم بإلغاء عملية حذف أكثر من سجل موظف واحد من
جدول الموظفين Employees بقاعدة بيانات Northwind
التى دراستها على أن يظهر رسالة التحذير التالية :
" لقد حاولت إلغاء سجلات أكثر من موظف واحد . العملية ألغيت " , أستخدم
لغة SQL ببرنامج SQL
Server
الحدث : هو نوع خاص من العمليات يحدث عن محاولة لتنفيذ
أو تغيير بيانات جدول مرتبط بالحدث.
ننشئة : لكى يقوم بتنفيذ عمليات ما تلقائيا بناءا على
حدث فعله المستخدم.
يعمل الـ trigger:
§
قبل ما فعله المستخدم (Before)
§
أو بعد (After)
§
أو بدلا من ما فعله المستخدم (Instead of)
يتم تنفيذ : الحدث تلقائيا عند
§
إدخال بيانات ( Insert
)
§
أو تحديث بيانات ( Update )
§
أو حذف بيانات ( Delete ) .
USE Northwind
GO
CREATE TRIGGER trig1
ON Employees
For Delete
AS
IF (Select count (*) From deleted) > 1
Begin Transaction
Raiserror ( 'you cannot
delete more than one employee at a time', 16,1)
Roll back transaction
End
شرح لكل سطر
1- استخدام قاعدة بيانات Northwind
2- بدء تنفيذ البرنامج GO
3- إنشاء الحدث باسم
trig1 بالأمر CREATE TRIGGER
4- يتم الحدث علي جدول Employees
5- بدء شرط حدوث الحدث
For Delete عند الإلغاء
6،
7- - شرط تنفيذ الحدث
IF : عند الإلغاء لأكثر من سجل واحد
8- بدء تنفيذ الحدث (الشرط (Begin
9- أمر كتابة رسالة خطأ Raiseerror بمستوي خطأ 16
10- أمر الرجوع في عملية إلغاء البيانات Rollback
11- نهاية تنفيذ الحدث End
7) سؤال عن الـ Cursor
عرف المؤشر
(Cursor) ؟ و الإجراء
(Procedure) ؟ وأكتب إجراء بالاسم Print_Books كما يلى.
يعرف بداخله
مؤشر (Cursor) بالأسم Books يسترجع عنوان
الكتاب Title من جدول Store ثم يطبع وهكذا
حتى يتم طبع كل عناوين الكتب ثم غلق المؤشر ويحذف؟
المؤشر: يفتح بيانات فى شكل جدول من ناتج جملة
Select ويسمح لنا بالتجول فى السجلات والتعامل معها.
الإجراء: مجموعة من الاوامر التى يتم تنفيذها
بصفة مستمرة فنكتبها بداخل أجراء مرة واحدة لتأخذ اسم ثم نستخدمها ونستدعيها فيما
بعد بهذا الاسم, كما أنه يزيد من سرعة تنفيذ هذه العمليات.
Create Procedure print_books
As
Declare Books Cursor
For select title from store
Declare @title varchar(40)
Open books -- لفتح المؤشر
Fetch next from books Into @title
--استخراج أول صف من المؤشر
While @@fetch_status =0 - - أى كرر لو تم أسترجاع بيانات بنجاح
Begin
Print @title
Fetch next from books into @title
End
Close books - - لإغلاق المؤشر
Dellocate cursor books - - يحذف المؤشر
Go
8) سؤال عملى عن إعداد تقرير (مهم جدا جدا)
تمرين : إنشئ تقرير "كشف غياب" طبقا لما يلى:
علما بأن طول صفحة الرسم 1170 و عرضها 825
- العنوان بخط Arial بحجم 18 وباقى النصوص بحجم 14
- ينتهى المستطيل الرئيسى قبل نهاية الصفحة بـ 70 نقطة ويترك هوامش جانبية مقدارها 50
- موضع الكلمة "أسم الطالب" (650,110)
- الخطوط الأفقية تبدأ من 550 وتنتهى بـ 100 وتبعد عن بعضها بـ 50 نقطة
- الخطوط الرئسية تبدأ من 150 وتنتهى 1100 وتبعد عن بعضها بـ 50 نقطة
- البعد X للكلمة "معمل" 590 وللكلمة "قسم" 390 وللكلمة "مادة" 200
الأبعاد الأفقية على الترتيب فى الرسم 10 و 35 و 40 و 100
الحل
e.Graphics.DrawString("كشف غياب معمل", New Font("Arial", 18), Brushes.Blue, 325, 10);
e.Graphics.DrawLine(Pens.Black, 200, 35, 625, 35);
e.Graphics.DrawString("معمل", New Font("Arial", 14), Brushes.Black, 590, 40);
e.Graphics.DrawString("قسم", New Font("Arial", 14),
Brushes.Black, 390, 40);
e.Graphics.DrawString("المادة", New Font("Arial", 14),
Brushes.Black, 200, 40);
e.Graphics.DrawRectangle(Pens.Black, 50, 100, 725, 1000);
e.Graphics.DrawString("أسم الطالــــب", New Font("Arial", 14),
Brushes.Black, 650, 110);
for(int x = 550; x>=100; x-=50)
e.Graphics.DrawLine(Pens.Black, x, 100, x, 1100);
for(int x = 150; x>=1100; x+=50)
e.Graphics.DrawLine(Pens.Black, 50, x, 775, x);