בסיס נתונים - database - מה זה ומה אני צריך לדעת?

אני בכוונה "קופץ" רגע לסוף, לבסיס הנתונים, כי התקשורת שלנו היא תמיד:

פרונט <---> בק <---> DB
שימו לב ש DB זה DATABASE.

למה זה ככה? כי הפרונט זה הדבר הבלתי מאובטח לעולם ולעולמי עולמים. אפילו מתכנתים טועים בזה לפעמים, המילה אבטחה והמילה פרונט זה ממש בשר וחלב, פשוט לא הולך יחד, ולעולם לא ילך יחד. 

מהסיבה הפשוטה - הפרונט כולו, כל הקוד שלו, תוכן השפת תיאור (html), תוכן השפת עיצוב (css) ותוכן הקוד דפדפן (javascript) הכל מגיע ללקוח (משתמש הקצה) ורץ על הדפדפן שלו, על המחשב שלו, הוא רואה הכל, מכיר הכל, שולט על הכל, ויכול לשנות הכל כרצונו.

אמנם המשתמש הממוצע לא יודע לעשות עם זה שום דבר, אבל משתמש מתכנת או האקר יודע גם יודע וזה ממש ממש קל.

 

אבל הDB שלנו זה הלב של כל המערכת שלנו, וזה מוצר ואזור מאוד מאוד רגיש, ולכן יש פשוט החלטה ברורה של מפתחי מוצרי הפרונט בעולם, אם זה חלון וינדוס, אם זה דף בדפדפן, או מסך אפליקציה, באופן נורמאלי פשוט מונעים מאיתנו להשתמש ישירות בDB.

ברור שיש מלא דרכים לעקוף את זה ולהשתמש בכח בDB, אבל כל הרעיון שזה אבי אבות פירצת האבטחה, הDB שלנו הולך לשמור את כל הנתונים שלנו, למה שניתן לכל משתמש את האפשרות לשלוט על זה, אם זה לגנוב את זה, אם זה לשנות את זה, אם זה לנצל את זה?

 

ממש לא!

 

אנחנו רוצים לשלוט בתהליכים שלנו, כל משתמש יכול לראות רק את הנתונים שלו, כל משתמש יכול לעשות רק פעולות שאנחנו מרשים לו, כל זה ועוד זה תפקידו של הבק, ובשיעור הבא נשוחח על זה יותר.

 

אבל מבחינת הDB, אנחנו צריכים 3 דברים, בד"כ:

  1. להגדיר את הטבלאות שלו, בד"כ נקרא בשפה המקצועית "יישויות"
  2. להגדיר את ההרשאות שלו, בד"כ מי שרוצה להיות צדיק יעשה משתמש DB מיוחד עבור האפליקציה עם הרשאות נמוכות
  3. לעבוד אך ורק עם sql parameters - להגיד לAI

כן, שמעתם נכון, אנחנו לא חייבים לעבוד תמיד רק עם היוזר שלנו. אנחנו יכולים לעשות יוזרים נוספים על השרת או המחשב עם הרשאות מוגבלות, וככה אפילו אם האקר מצליח למצא פירצת אבטחה, היכולות של הפרצה מוגבלות.

 

גם בתוך הDB עצמו אפשר לעשות יוזרים של הDB עצמו, ובד"כ בשלב הפיתוח נשתמש ביוזר של המחשב להכל, והוא למעשה "סופר יוזר" ובסוף כשנתקין נעבור לחלוקת יוזרים חכמה.

 

האם יש סוגי databases? כן!

הפופולריים והמרכזיים מתחלקים ל2 מפלגות:

  1. טבלאיים - מלא מלא טבלאות והקשר בין טבלאות הוא עם "מפתח"
  2. קבצים - מלא מלא קבצים שמכילים את כל המידע על יישות מסויימת, בד"כ הגישה היא ע"י חיפוש בלבד, נקראים גם NoSQL (כי SQL הבסיס לכל הטבלאיים)

אני אתחיל להסביר את הקבצים, כי בד"כ לא משתמשים בזה, אבל אם תכירו, ביום שיופיע הצורך אתם פשוט מיד תבינו שאתם צריכים את זה.

נניח אני אוסף נתונים על אנשים, נניח אפליקציית שידוכים, אנחנו אוספים המון מידע על כל משתמש ולדוגמא תחביבים, כל אחד והשטויות שלו, אז אנחנו רוצים לבנות "מסמך" על כל משתמש כדי לחפש התאמות לפי תכונות, עדות (חרדים גזענים, לא? שניצל....), תחביבים, עיר מגורים, העדפות ועוד. 

קצת קשה לארגן את כל זה לטבלאות, אא"כ נגביל את האפשרויות

ואז עושים מה שנקרא "אינדוקס" מלשון index שמריצים מנוע חיפוש שרץ קובץ קובץ ולוקח את כל המילים ובעצם כשאני אחפש אח"כ "שניצל", כי המאכל השלישי האהוב עלי הוא שניצל, הוא מיד יקפיץ את כל הקבצים, כלומר המשתמשים, שאוהבים שניצל.

הפופולרי ביותר לנושא הוא  mongo db

 

יש דברים יותר מורכבים כמו וקטוריים, או graph, ועוד, ואני לא אסביר עליהם, רק בכמה מילים, וקטור זה שמילים יש להם משקל, אז רכב או אוטובוס זה משקל דומה. גרף זה קשרים אז אם אני עבדתי פעם בחברה X ואתה עכשיו עובד בחברה X אז יש בינינו סוג של קשר.

 

בכל שאר המקרים נשתמש בDB טבלאיים

הפופולרים והמוכרים הם mssql, mysql, postgresssql , כל אחד עם האידיאולוגיה שלו, אחד קוד פתוח, אחד של מיקרוסופט, ואחד... האמת לא יודע.

אבל גם פה אני אישית אוהב ללכת אחורה לפשוט ביותר שנקרא LiteSQL שזה פשוט DB ממשפחת הSQL סופר בסיסי וקליל, וכל עוד לא הגעתם לאיזה צורך או מגבלה, זה ממש מצויין.

 

אז למה אני לקחתי אותנו מה SKETCH, שיא הפרונט, ישירות לצד שני החלק הכי פנימי, הDB? כי כאשר 2 הדברים האלו ברורים נהיה מאוד קל להבין מה אנחנו צריכים מה"בק-אנד" שלנו, כלומר כל הקוד צד שרת שתפקידו לעטף ולהגן על הDB, ולשרת כראוי את הפרונט.

 

חשוב ביותר sql parameters

שימוש בצורת הכתיבה הזו פותרת 99% מבעיות ההזרקה (sql injection) ואתם חייבים להגיד לAI שלכם להקפיד לעבוד ככה אפילו על שאילתאות פנימיות או של קריאה, תמיד תמיד תמיד.

תבקשו ממנו להסביר איך זה עובד, זה מגניב.

 

 

 

 

 

«    (1...)   7  8  9   (...16)    »