
.../students/1. זה route parameter. אפשר גם להעביר ערך ב-query string אחרי סימן שאלה, כמו studentID=1.NewID(). הדאטאבייס מייצר ערך חדש בעצמו.NewID().הטקסט המלא של הדקות הראשונות בהרצאה «מזהה ייחודי - SQL GUID» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
דבר נוסף ומאוד מעניין שחשוב להכיר בעולם המסדי נתונים זה משהו שקשור קצת לאבטחה של האפליקציה לא של הדאטה בייס של האפליקציה. בואו נראה רגע משהו מעניין אני הולך רגע לטבלת התלמידים הנה המידע של תלמידים זה בסדר לכל תלמיד יש מזהה ייחודי המפתח הראשי שלו והמפתח והיה מאוד מאוד נכון להכיל אותו או להגדיר אותו כמספור אוטומטי רץ.
אני לא רוצה לספק את הנתון הזה, הדאטאבייס אמור לספק לי, הוא ממציא לי מספר שהוא רץ, רץ, רץ, הכל בסדר. אבל בואו רגע נחשוב מבחינת פיתוח מהצד של האפליקציה.
הולכים לבדוק, בואו נניח אתר ולתלמידים יש גישה לאתר לראות את הציונים שלהם. בואו נניח שהאתר נמצא ב-http www.praticu.com/ בוא נניח שלסטודנטים יש איזה דף משלהם שנקרא סטיודנטס והם צריכים להיכנס רק אם הם נכנסים עם יוזרניים ופסוורד שכמובן יכול להיות שנגדיר בדאטאבייס ואז אני רוצה להראות כאן את הציונים
של התלמידים איך אנחנו אומרים לאתר להציג ציונים של תלמיד ספציפי. מה, לא הגיוני שפה אני אגדיר שאני רוצה לראות את הציונים של קופארט?
אז מה שאנחנו רוצים לעשות זה לתת כאן בשורת ה-URL איזשהו מזהה ייחודי של תלמיד ואז אם נניח זאת שורת ה-URL אז האתר יודע ללכת ולהביא לנו את הפרטים של התלמיד הספציפי הזה.
והוא פשוט מראה לנו פה את הציונים של בארט, את המבחנים שהוא עשה, את רשימת הקורסים שהוא לקח וכולי וכולי, כל הפרטים לגבי בארט, זה דבר שהוא מאוד מאוד מקובל, ככה אפשר לגשת ולהראות מידע ספציפי של תלמיד, מוצר, ספק,
מה שבא לנו. חלק מהמידע של ה-URL. לפעמים עושים את זה במה שנקרא query string. query string זה פרמטרים שאנחנו שולחים אחרי סימן שאלה, לדוגמה, student ID שווה 1. אז זה טיפה פורמט שונה, אבל אפשר לעשות את זה גם עם query string, הרשימה של הפרמטרים שקשורים לדף הזה בשביל לדעת איזה מידע להציג.
בואו נישאר עם הפורמט הזה, זה נקרא ראוט פרמטר מבחינת טרמינולוגיה ובניגוד לקווירי סטרינג שזה שם שווה לוואליו אבל זה פחות משנה. מה שמשנה זה הוואליו הזה.
ופה יש בעיית סקיוריטי די חמורה. הבעיית סקיוריטי הזאת אומרת שתלמיד בארט, ואתם יודעים שבארט הוא קצת שובב, הוא נכנס לדף שלו ואומר, איזה יופי, הכנסתי את ה-user name וה-password שלי של הבכללה, והנה אני מגיע לדף שמראה את כל הציונים שלי, ופה למעלה באמת אני רואה שזה אני.
זהו, אני לא יודע באמת שזה הקוד שלי, אבל הנה הוא מציג לי אחד. מה בארט אומר לעצמו, או לחילופין האקר? אה, אחד זה אני. בואו נשנה לשתיים, ונלחץ Enter, זה URL אחר, ואז האתר יציג לו את כל ההיסטוריה של המבחנים והציונים של ליסה תהי שתיים ואם הוא עושה שלוש אז הוא רואה את כל הציונים של הומר.
אוי אוי אוי ישנו פה בעיה security חמורה זה בעצם סוג של פריצה שנקראת איידור שזה insecure direct object reference זה אומר שיש איזה מידע שאם אני משנה אותו המערכת מציגה לי מידע שאסור היה לי לראות מראש. איך בעצם פותרים את זה ברמת הדאטאבייס? אז כמובן מי שעשה פה את הפדיחה זה לא הדאטאבייס אלא מי שבנה את התוכנה אישר לעשות את הדבר הזה אבל בשביל לפתור את
זה אנחנו צריכים ללכת לדטאבייס ולהוסיף עוד משהו. מה שאנחנו צריכים להוסיף זה איזשהו מזהה נוסף עבור כל תלמיד לא לגעת במפתח הראשי המפתח הראשי הוא מעולה הוא מספור אוטומטי רץ בשביל שהוא ישוכפל לטבלאות אחרות אבל עוד איזשהו מזהה לתלמיד בדרך כלל עושים את זה מיד אחרי המפתח הראשי והמזהה הזה לא ניתן להגיע אליו למזהים אחרים.
ראינו את זה במצגת של סוגי הנתונים וזה היה Unique Identifier. בואו ניגש ונוסיף עוד עמודה, אני רגע אוסיף אותה פה, נקרא לה Unique Code לדוגמה, שזה בעצם קוד ייחודי עבור התלמיד אבל הרבה פעמים מבלבלים את זה עם סטודנט איי-די ולכן אני לא אקרא לה Unique Code, מה שבדרך כלל נהוג לקרוא
לה זה OUUID שזה קיצור של Universal Unique Identifier אבל במערכות של מייקרוסופט זה נקרא גויד. גויד זה ראשי תיבות של Global Unique Identifier שזה בעצם אותו הדבר כמו UUID פשוט נקרא קצת במונח שונה.
מייקרוסופט קוראת לזה גויד כל העולם קוראים לזה UUID אנחנו כרגע מסדנו את זה במיקרוסופט אז נישאר עם גויד. ברגע שמתכנת רואה את המילה גויד הוא יודע טוב מאוד מה זה הסוג שאנחנו רוצים זה Unique Identifier, איפה הוא מתחבא לי?
הנה הוא. ואנחנו לא רוצים לספק את המידע הזה בעצמנו, אנחנו רוצים שהדאטאבייס יגדיר את המידע הזה, ולכן אני אגדיר כאן שזה עלה או נעל,