Հետագա հոդվածներում, եթե կա ազատ ժամանակ, այս թարգմանությունըվերջ կդրվի։
P.S. Թարգմանությունն առավել կհետաքրքրի կրթական և պատմական նպատակներով։
Հոդվածի բնօրինակ անվանումը՝ Ընդլայնված SQL ներարկում SQL հավելվածներում:
անոտացիա
Այս հոդվածը մանրամասնորեն քննարկում է «SQL ներարկման» ընդհանուր մեթոդները հայտնի հարթակի համար Microsoft ինտերնետՏեղեկատվական սերվեր/Ակտիվ սերվերի էջեր/SQL սերվեր: Այն քննարկում է տարբեր տարբերակներինչպես օգտագործել SQL ներարկումը հավելվածներում և բացատրում է տվյալների վավերացման տեխնիկան և ինչպես ապահովել տվյալների բազաները, որտեղ ներարկումները կարող են օգտագործվել:
Ներածություն
Structured Query Language (SQL) կառուցվածքային լեզու է, որն օգտագործվում է տվյալների բազաների հետ փոխազդելու համար: SQL լեզվի բազմաթիվ «բարբառներ» կան, բայց այսօր, ընդհանուր առմամբ, դրանք բոլորը հիմնված են SQL-92 ստանդարտի վրա, որը վաղ ANSI ստանդարտներից է: SQL-ի հիմնական գործառնական միավորը հարցումն է, որը արտահայտությունների հավաքածու է, որը սովորաբար վերադարձնում է արդյունքների հավաքածու: SQL արտահայտությունները կարող են փոխել տվյալների բազաների կառուցվածքը (օգտագործելով տվյալների սահմանման լեզուների արտահայտություններ - DLL) և կառավարել դրանց բովանդակությունը (օգտագործելով տվյալների մանիպուլյացիայի լեզուների արտահայտություններ - DML): Այս հոդվածում մենք կանդրադառնանք Microsoft SQL Server-ում օգտագործվող transact-SQL-ին:
SQL ներարկումը հնարավոր է, երբ հարձակվողը կարող է տեղադրել իր սեփական SQL կոդը հարցման (հարցման) մեջ՝ վերահսկելու հավելվածին ուղարկվող տվյալները:
Սովորական SQL հայտարարությունը հետևյալն է.
Հեղինակներից ընտրեք id, անունը, ազգանունը
Այս արտահայտությունը վերցնում է «id», «անունը» և «ազգանունը» «հեղինակներ» աղյուսակի սյունակներից և վերադարձնում աղյուսակի բոլոր տողերը: Նմուշը կարող է սահմանափակվել կոնկրետ «հեղինակով», օրինակ.
Ընտրեք id, անունը, ազգանունը հեղինակներից, որտեղ նախանուն = «Ջոն» և ազգանուն = «Սմիթ»
Հարկ է նշել, որ ին տրված խնդրանքըլարային տառերը բաժանվում են մեկ մեջբերումով: Ենթադրվում է, որ «անունը» և «ազգանունը» տվյալներ են, որոնք մուտքագրվում են օգտագործողի կողմից: AT այս դեպքըհարձակվողը կկարողանա ներարկել սեփական SQL հարցումը՝ հավելվածին ավելացնելով սեփական արժեքները: Օրինակ:
Հետո արտահայտությունը դառնում է հաջորդ տեսքը:
Ընտրեք id, անունը, ազգանունը հեղինակներից, որտեղ նախանուն = "jo"hn" և ազգանուն = "smith"
Այն բանից հետո, երբ տվյալների բազան կփորձի մշակել նման հարցումը, կվերադարձվի հետևյալ սխալը.
Սերվեր՝ Msg 170, Level 15, State 1, Line 1 Line 1. Սխալ շարահյուսություն «hn»-ի մոտ:
Սխալի պատճառն այն կլինի, որ մուտքագրված մեկ մեջբերումը կխաթարի հարցման մեջ սահմանազատող կառուցվածքը: Այսպիսով, տվյալների բազան անհաջող կերպով կփորձի կատարել «hn» հրամանը, որը կհանգեցնի սխալի: Արդյունքում, եթե հարձակվողը ձևաթղթում մուտքագրում է հետևյալ տեղեկատվությունը.
Անուն՝ jo"; աղյուսակի հեղինակներ-- Ազգանուն.
«Հեղինակների» աղյուսակը կջնջվի, թե ինչու է դա տեղի ունենում, կտեսնենք ավելի ուշ։
Դուք կարող եք մտածել, որ եթե մենք հանենք եզակի մեջբերումները մուտքագրման ձևից և նաև «փոխարինենք», դա կարող է լուծել մեր խնդիրը: Եվ դուք ճիշտ կլինեք, սակայն այս մեթոդը որպես այս խնդրի լուծում օգտագործելու հետ կապված որոշ խնդիրներ կան: Նախ, օգտվողի բոլոր մուտքերը «տողեր» չեն: Եթե օգտագործողի ձևը կպարունակի հեղինակի «id»-ը, որը սովորաբար թիվ է: Օրինակ, մեր հարցումը կարող է այսպիսի տեսք ունենալ.
Ընտրեք id, անունը, ազգանունը հեղինակներից, որտեղ id=1234
Այս դեպքում կոտրիչը կարող է ազատորեն ավելացնել ցանկացած SQL արտահայտություն թվային տվյալներից հետո։ SQL հարցումների այլ տեսակներում օգտագործվում են տարբեր սահմանազատիչներ: Օրինակ, Microsoft Jet DBMS-ում սահմանազատիչը կլինի «#»: Երկրորդ, միայնակ չակերտներից «փախչելը» պաշտպանվելու ամենահեշտ ձևը չէ, ինչպես կարող է թվալ սկզբում: Այս մասին ավելի ուշ կխոսենք:
Եկեք օրինակ բերենք Active Server Pages (ASP) վրա հիմնված մուտքի էջի վրա, որն օգտագործում է SQL տվյալների բազա մուտք գործելու համար՝ հավելվածում օգտագործողին լիազորելու համար:
Ահա մուտքի ձևը պարունակող էջի կոդը, որում մուտքագրված են օգտանունը և գաղտնաբառը։
Մուտք գործել
Ստորև բերված է կոդը (process_login.asp), որը որոշում է մուտքագրված տվյալների ճիշտությունը։