الانتقال إلى المحتوى

مقدمه عن الSQL


يحيى حماطي

Recommended Posts

--------------------------------------------------------------------------------

سلاااااااام عليكم ورحمة الله وبركاته ..

نظرا لانتشار ثغرات sql injection وسهوله اكتشافها .....
لابد نعطي فكره عن الــSQL لكي يتمكن الكل من كتابه استثمار لهذه الثغرات ..
راح ابدا بالتدرج وان شالله علي قد مايسمح الوقت نكتب ..

ماهي :
Structured Query Language لغه الاستعلام البنائيه تسمح لك بدخول قواعد البيانات وتنفيذ استعلامات عليها وهي لغه معياريه لــANSI .

مميزاتها :

1- تمكنك من تنفيذ استعلامات علي قواعد البيانات
2-ادراج ريكورد (صفوف) الي جدول ما
3-حذف ريكورد من جدول ما
4- تحديث ريكورد من جدول ما
5- سهله التعلم
كبدايه يجب ان تفهم ان قواعد البيانات مكونه من جداول الجدول يحتوي علي صفوف الصف يسمي ريكورد ويحتوي علي بيانات ..... لاتنسي ان الجدول يعرف باسمه .

ارسم علي ورقه قدامك جدول اسمة (خوياي) خليه اربع اعمده الاول اسمه الثاني ابوه الثالث تلفونه الرابع مدينته .

اوكيه خلي الجدول يحتوي علي ثلاث ريكورد وادخل في كل ريكود معلومات واحد من خوياك
نفرض ان الجدول التالي تكون :

=========================
اسمه | ابوه | تليفونه | مدينته
احمد | محمد | 555 | نواكشوط
يونس |شلبي | 545 | الجيزه
ريم | موسي |878 | دلهي
=========================

افرض انه جدول بقاعده بيانات وتبي تنفذ بعض الاستفسارات عن طريق SQL ......مثال
تبي تستفسر عن جميع اسماء خوياك .
اكيد راح تقول : اختر العامود اسمه من الجدول اخوياي ....... والاستعلام هذا راح يرجعلك كل اسماء خوياك
كيف هي صيغه SQL للامر اللي كتبنا ....كالتالي :

select column from table


طبعا column كان باستعلامنا (اسمه) والــtable (اخوياي ) ...... شفت سهله كيف ؟
---------------------

الان الــDML جزء من الــSQL وتعني Data Manipulation Language وهي اوامر الاستعلام والتحديث والادراج والحذف في لغه SQL
اوامرها :
SELECT استعلام جدول معين وعرض النتيجه
UPDATE تحديث الجداول في قاعده البيانات
DELETE حذف بيانات من جدول ما
INSERT INTO ادخال بيانات جديده لجدول ما
--------------------

وفيه الــDDL وتعني Data Definition Language وهي جزء من SQL مسوول عن انشاء وحذف الجداول في قاعده البيانات كما يتم من خلالها انشاء الفهارس وتحديد الروابط بين الجداول
اوامرها :
CREATE TABLE انشاء جدول
ALTER TABLE تغيير جدول
DROP TABLE حذف جدول
CREATE INDEX انشاء فهرس
DROP INDEX حذف فهرس
اولاااا :SELECT
استخدامه : اختيار بيانات من جدول معين
كود:

SELECT column_names
FROM table_name


شرح :
column_names ممكن يكون عامود واحد او عده اعمده
table_name اسم جدول في قاعده البيانات

سوال : من جدول (اخوياي) استعلم عن الاعمده (ابوه + رقمه) عن طريق اوامر SQL ?
كذلك تستطيع استبدال اسم العمود بــ (*) نجمه لاختيار جميع الاعمده
ملاحظه : اضافه الفاصله المنقوطه بعد الــ SQL statement تمكنك من كتابه اكثر من استعلام علي نفس السطر
معياريا لا يجب وضع فاصله منقوطه بعد كل SQL statement لكن تم الاعتياد علي هذا الشي فحاول انك تتعود علي
وضعها بعد كل SQL
statement حتي لو كانت وحدها في السطر
==============

الان SELECT DISTINCT نفس SELECT بس الفرق انه تمنع تكرار النتائج يعني اذا تطابقت نتيجتين تظهر وحده بس
==============

الان WHERE Clause تضاف لــSELECT لاختيار قيم تستوفي شروط معينه
صيغته

كود:

SELECT column FROM table WHERE column operator value



operator يكون واحد من التالي :
= يساوي
<> لايساوي
> اكبر من
< اصغر من
>= اكبر من او يساوي
<= اصغر من او يساوي
BETWEEN بين حدي نطاق معطي
LIKE مشابه لتخطيط معين
اوكيه تدريب اخر : من جدول (اخوياي) وباستعمال where حدد اقصر اسم في العامود (اسمة)؟
ملاحظه : الــvalue اذا كانت حرفيه يجب احاطتها بفواصل وفي بعض انظمه قواعد البيانات بفاصله مزدزجه اما
الرقميه فلا تحاط بفواصل
كلمة اخيره عن like تستطيع تحديد المخططات بالعلامه % يعني اذا تبي شي فيه الحرفين Op تستخدم %op %
ادراج ريكورد (صف) جديد الي جدول
صيغته :


INSERT INTO table_name VALUES (value1, value2,....)



وتقدر تحدد الاعامود اللي بتدرج فيه المعلومات بالصيغه التاليه :


INSERT INTO table_name (column1, column2,...)
VALUES (value1, value2,....)



===========================
الان جاء دور الستيتمنت update
استخدامه : لتعديل قيم موجوده في جدول معين وتحديثها
صيغتها


UPDATE table_name
SET column_name = new_value
WHERE column_name = some_value


=========================

الان Delete
استخدامه :حذف ريكورد من جدول
صيغته :

كود:

DELETE FROM table_name WHERE column_name = some_value



========================

بكذا اكون القيت الضوء علي ابرز الـstatement في الـSQL واللي راح تمكنك من فهم اي استعلام عند رويته ..

رابط هذا التعليق
شارك

شكرا لك اخي علي هذا الشرح السريع
في انتظار مشاركات افضل قريبا
مع تمنياتي بالتوفيق

رابط هذا التعليق
شارك

بناء على طلب الكثيرين ممن تواجههم هذه التساؤلات حال استخدامهم لتعليمات SQL في التعامل مع قواعد بيانات باللغة العربية كتبت فيما يلي ما حضر إلى ذهني من التلميحات التي أعتقد أنها ستكون مفيدة:

- لن أقوم هنا بشرح طريقة استخدام SQL، لمن يرغب في معرفة لغة SQL للتعامل مع قواعد البيانات أرجو زيارة الموقع http://www.mysql.com/doc/en/index.html (فيما يخص MySQL)

تأسيس الجدول ليناسب اللغة العربية
حروف اللغة العربية تعتبر من تلك الرموز الغير قياسية والتي تتجاوز قيمتها الرقمية في جدول ASCII الرقم 127، وبالتالي فإنها لا تعامل معاملة الحروف الهجائية مثلها مثل حروف اللغة الإنجليزية، لذلك فإن تأسيس جدول قاعدة بيانات يجب أن يتضمن تحديد صفة الثنائية BINARY للحقول التي ستحتوي على بيانات باللغة العربية، وإن كان ذلك غير ممكن لسبب ألآخر (كأن تكون الجداول قد تم تأسيسها فعلاً) فيمكن الاطلاع على التلميحات التالية والتي يمكن بواسطتها تجاوز هذه المشكلة.

ترتيب بيانات باللغة العربية أثناء العرض
يواجه العديد هذه المشكلة أثناء استخدامهم لتعليمة ORDER BY في ترتيب بيانات باللغة العربية (في جداول لم يتم استخدام صفة الثنائية) حيث أنهم يفاجؤن بظهور ترتيب الصفوف بشكل غير متوقع، حيث تظهر بعض حروف اللغة العربية في غير ترتيبها الصحيح، والسبب في ذلك كما ذكرنا من قبل أن العمود المستخدم لم يتصف بالثنائية BINARY، لذلك فإننا يجب أن نقوم بالتخصيص أثناء الترتيب كما في المثال التالي:

SQL
SELECT * FROM table ORDER BY BINARY field


حيث ان اسم الجدول table والحقل الذي يتم الترتيب بدلالته هو field، وقد تمت إضافة BINARY قبله حتى يتم تنبيه MySQL أن بيانات الحقل يجب أن تعامل معاملة بدلالة قيمتها الرقمية وليست كحروف.
وفيما يلي مثال آخر لترتيب البيانات بدلالة حقل من نوع آخر (تاريخ مثلاً) وحقل نص:

SQL
SELECT * FROM table ORDER BY datefield, BINARY title


حيث أن اسم الجدول table وحقل datefield حقل يمثل التاريخ، وحقل title حقل يمثل نص (باللغة العربية)

البحث عن كلمة أو جزء من كلمة
من المعروف أن معيار البحث للتساوي = يقوم بتصفية (فلترة) البيانات المعروضة بحسب الصيغة المذكورة، لكنها أيضاً ستواجه خللاً إذا كان أحد معايير البحث يمثل باللغة العربية، لذلك وجب أيضاً استخدام BINARY، كما في المثال التالي:

SQL
SELECT * FROM table WHERE BINARY field = 'كلمة'


كذلك الحال عند الرغبة في البحث باستخدام LIKE:

SQL
SELECT * FROM table WHERE BINARY field LIKE '%كلمة%'



البحث متعدد الشروط:
يمكن استخدام LIKE و RLIKE لعمل بحث متعدد الشروط، وسأقوم فيما يلي بذكر بعض الأمثلة الشائعة، مع شرح مقتضب لكل منها.
- الرموز المستخدمة مع LIKE
يمكن استخدام الرمز _ للدلالة على حرف واحد مجهول، ففي المثال التالي:

SQL
SELECT * FROM table WHERE BINARY field LIKE '_حمد'


تطابق معايير المثال كلاً من الكلمات التالية: أحمد ، احمد ، محمد ، نحمد ، بحمد
يمكن استخدام الرمز % للدلالة على حرف أو عدد من الحروف أو حتى لا شيء، كما في الأمثلة التالية:

SQL
للبحث عن الأسماء التي تبدأ بحرف الألف وتنتهي بحرف الميم
SELECT * FROM table WHERE BINARY field LIKE 'أ%م'
ويطابق البحث كلاً من الكلمات التالية: أم، أمام، أنغام،...

للبحث عن الأسماء التي الاسم الأخير فيها محدد
SELECT * FROM table WHERE BINARY field LIKE '% محمد'
ويطابق البحث كلاً من الأسماء: علي محمد، أحمد عبدالله محمد،...

البحث عن وجود كلمتين داخل مقطع من البيانات دون شرط تقاربهما:
SELECT * FROM table WHERE BINARY field LIKE '%الكلمة الأولى%الكلمة الثانية%'



وهكذا فإن الرمز % يستخدم بدلاً عن كمية مجهولة من الحروف

- عبارة RLIKE تستخدم للمقارنة باسلوب التعابير القياسية Regular Expressions باستخدام الرموز بشكل مشابه لطريقة pcre_match، يمكن معرفة المزيد عنها في http://www.mysql.com/doc/en/Regexp.html
وتعتبر RLIKE أفضل من LIKE في حالة البحث عن عبارات بشروط معقدة كالرغبة في استثناء رموز التشكيل مثلاً.

البحث باستثناء علامات التشكيل
نحتاج في بعض الأحيان إلى البحث عن عبارة داخل بيانات يحتمل وجود علامات التشكيل فيها، وبذلك لا يمكننا تنفيذ عبارة LIKE لأن التطابق غير تام بالنسبة للكلمة الواحدة، وهذا هو ما يدفعنا إلى استخدام REGEXP أو RLIKE لتنفيذ بحث يناسبنا.
والواقع أن استخدام REGEXP معقد كثيراً، ولكنني سأذكر هنا كيف بإمكاننا استخدامها للبحث عن عبارة باستثناء رموز التشكيل:
. هذا الرمز يقابل تماماً الرمز _ في LIKE لذلك سنستخدمه في بداية ونهاية نموذج البحث
* هذا الرمز يعني أي عدد من الرموز وسنستخدمه بجانب الرمز . ليماثل % في LIKE ، وكذلك سنستخدمه مع مربع نطاق الرموز لنحدد أننا نتوقع وجود أي عدد من رموز التشكيل
[...] سنستخدم هذا الشكل لتحديد نطاق رموز نتوقع وجودها أثناء البحث وهي هنا رموز التشكيل
سأستخدم هنا علامات التشكيل َ و ُ و ِ
فبالتالي فإن مربع نطاق الرموز سيكون بهذا الشكل [َُِ] (قد لا يكون واضحاً أن علامات التشكيل الثلاثة بين القوسين)
لذلك فإنني عندما أريد البحث عن كلمة ذهب مع توقعي وجود الكلمة مشكلة بالفتحة والضمة والكسرة فإنني سأقوم بعمل هذا:

SQL
SELECT * FROM table WHERE field RLIKE BINARY '.*ذ[َُِ]*ه[َُِ]*ب.*'

رابط هذا التعليق
شارك

في البداية ماهي الاس كيو ال ( SQL )؟؟

الاس كيو ال هي عبارة عن قاعد بيانات تحتوي على جداول واغلب المواقع التي تكون صفحاتها منتهية ب ASP هي صفحات تسحب بياناتها
من قاعدة SQL وصفحات ASP ممكن ان تكون كنز من المعلومات لاختراق قواعد بيانات SQL وهذا ماسوف اشير اليه لاحقا ، و SQL
تتنصت على البورت 1433

ايضا مااريد ان اخبرك به ان ال SQL قد تحتوي على اكثر من قاعدة بيانات وكل قاعدة بيانات تحتوي على عدد من الجداول يمكن
ان تتصور كبرقواعد بيانات SQL والعدد الكبير من البيانات التى تحتويها .

س : مالذي يمكن ان اس**يد منه اذا اخترقت قاعدة بيانات SQL ؟
هذا على حسب نشاط الموقع اذا كان هذا الموقع منتدى لا اقصد منتديات PHP بل منتديات ASP في الغالب سوف تحصل على جميع اسماء
المستخدمين وكلمات السر وبامكانك تعديل وحذف اي موضوع وصلاحيات لم تكن تحلم بها ، اما اذا كان الموقع يحتوي على ميزة
قائمة المراسلات فسوف تحصل على اعداد خيالية من الايميلات ، عندها قم بانشاء شركة للدعاية والاعلان وسوف تصبح ثريا اذن لاتنسى LinuxRay_
توقع ان تجد اي شئ داخل قواعد بيانات معلومات اشخاص - ارقام هوا** - عناوين - تورايخ الميلاد ، ممكن ان تصبح Administrator .


اعرف انه قد اصابك الملل الان لكن استعد نشاطك من جديد فالطريق مازال طويلا ...


س : مالذي تحتاجة للدخول على قواعد بيانات SQL ؟

تحتاج فقط لل User Name و Passwd

س : من اين احصل على اسم المستخدم وكلمة المرور ؟

هناك طرق عديدة للحصول على User name and Passwd منها كما اسلف صفحات ال ASP وملفات اخرى من نوع *.sql هناك ثغرات كثير يمكن
ان تحصل منها على كلمات المرور مثل ثغرة +.htr
كيف تستخدم هذه الثغرة :


http://target/page.asp+.htr
target : الموقع الهدف
Page : صفحة asp
+.htr : الثغرة


هذه الثغرة تقوم احيانا بفتح صفحة بيضاء لاتحتوي على اي حرف .... اعرف انك سوف تتساءل مالفائدة اذن منها الفائدة هو
خلف هذه الصفحة البيضاء اذهب الى View Source لكي ترى اوامر البرمجة الخاصة ب ASP التى لايمكن لك ان تراها في الوضع العادي : مثل


<%

Set DB= Server.CreateObject("ADODB.Connection")
DB.Open "DRIVER=SQL Server;SERVER=xxx;UID=sa;PWD=;APP=Microsoft ® Developer Studio;WSID=xxx;DATABASE=moe_dbs", "_LinuxRay", "6666666"


%>
-----------------------------------------------------------------
في الكود السابق ترى ان اسم المستخدم هو _LinuxRay
وكلمة السر هي 6666666

رابط هذا التعليق
شارك

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل
×
×
  • أضف...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية