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

הבעיה
הבעיה עליה אני מדבר היא פירצות SQL Injections , שמאפשרות דרך האפליקציה שלכם להריץ שאילתות על מסד הנתונים שלכם (לקריאה מעמיקה על הנושא לחצו כאן ).
הסכנה היא שאפשר לאבד כך נתונים או לאפשר גניבת נתונים ממסד הנתונים שלכם, לעקוף מסכי LOGIN ועוד. מרבית המתכנתים החדשים לא יודעים כיצד להתמודד עם הבעיה, או ששוכחים להתמודד איתה באזורים מסויימים. אם תגדירו את המשתמשים של מסד הנתונים בצורה נכונה, תוכלו להימנע מכמה מעשים לא חביבים במיוחד שמשתמשים יוכלו לבצע במידה וינצלו את הפירצה באפליקציה שלכם.
הפתרון
מה שאני ממליץ לעשות זה ליצור 2 משתמשים עבור מסד הנתונים שלכם. האחד שמשמש אתכם לעבודה השוטפת, והשני שמשמש את האפליקציה שלכם.
יוזר אפליקציה
לכל מסד נתונים יש לכם משתמש אחד לפחות. כברירת מחדל ברוב חברות האחסון, המשתמש שאתם יוצרים מקבל את כל ההרשאות: הזנה, עדכון, מחיקה [שורות, עמודות..].
במרבית האפליקציות אתם לא באמת צריכים להשתמש בDROP, ALTER ואפילו DELETE. תאפשרו למשתמש של הDB לבצע הזנה ועדכון בלבד.
אבל רגע! אני כן צריך DELETE, איך אמחק נתונים?
ממליץ להשתמש במחיקה בינארית. תשתמשו בעמודה is_deleted שתקבל 1 או 0 במידה ומוחקים את השורה. גם יותר בריא לאינדקוס של המסד נתונים, וגם יותר מאובטח.
כך שכאשר אתם טוענים נתונים, אתם כותבים WHERE is_deleted = 0 על מנת לקבל נתונים פעילים, ולא כאלו שהמשתמש מחק.
יוזר למתכנת
כאן אתם יכולים לקבוע הרשאות שאתם רוצים, לא משנה לגמרי.
השימוש שלי במשתמש כזה הוא במערכת ניהול של האפליקציות [Back Office, מערכת ניהול אחורית, Control Panel.. תקראו לזה איך שבא לכם], במערכת הזאת למשל אני אכניס כלי למחיקת כלל שורות שהם is_deleted = 1, ואריץ אותו מידי חודש [תלוי ברמת הפעילות של מסד הנתונים שלכם].
הסידור הזה, במידה ונמצאה פירצה, לא תאפשר לגולש לא תמים במיוחד להריץ שאילתות מחיקה על מסד הנתונים שלכם, שזה אחד המקרים הכואבים.