קוד לדוגמא: פנייה ישירה ומהירה לSQL SERVER מאקסס
-
@דוד ל.ט.
ClickOne אם כבר כותבים את השאילתה וקוד, עדיף להפעיל SP מאשר שאילתה.
לא בחרתי בSP מכמה סיבות.
- לSP אם יש פרמטרים צריך לבנות COMMAND וזה כבר לא גנרי.
- רציתי להיצמד לאקסס ככל שניתן, כדי שברמה העקרונית תהיה אפשרות ברוב המקרים לשלוף את קוד הSQL ממקור הרשומה של הטופס. (אני זוכר שיש איזה פונקצייה שיודעת "לתרגם" את הפרמטרים הפנימיים של אקסס לערכים מוחלטים [זכרתי משום מה שזה Eval אבל זה לא.]), ואז תהיה אפשרות רק לתת את הטופס והקוד יעשה הכל.
- אני לא בטוח שיהיה אפשר אח"כ לערוך את הרשומות כטופס רגיל כמו בדוגמא (לא ניסיתי). אם לא יהיה אפשר, אין טעם לעשות את זה. כל הרעיון של הקוד הזה הוא הגמישות בעריכת הרשומות כמו באקסס רגיל.
- למתכנתי אקסס (ואני בתוכם) יש נטייה לכתוב קוד SQL בקוד, שם לא יעזור SP.
@דוד ל.ט.
זה יותר בטוח, יותר מהר, ויותר ממודל (המסד האמיתי מהתצוגה).
יותר מהיר אני מסכים (SP מקומפל בשרת) - אבל לא בטוח שההבדלים מאד גדולים.
יותר בטוח ויותר ממודל אני ישמח שתסביר למה?
לא מדובר כאן (לפחות במקרה שלי [לא יודע מה היו הכוונות של ארכיטקט]) על קוד SQL שאמור לעשות מי יודע מה על השרת, אלא רק להחזיר טבלה אחת או יותר, ולאפשר עריכה או תצוגה של הנתונים.במידה ואכן צריך להריץ SP אפשר בהחלט להשתמש בפונקצייה השנייה שהבאתי בקובץ - שמריצה כל קוד SQL אפשרי על השרת.
@דוד ל.ט.
אבל כל העסק הזה נראה לי כמו להתאים את האפקטים של Aero לתוכנת דוס...
ר' דוד, צר לי, אבל האובייקט RecordSet הוא ליבת המערכת באקסס, ואין כאן קוד "שחור" או"מלוכלך" שמעקם את הכל.
המחלקה שבה האובייקט הזה יושב היא ADODB - במקור זה הגיע מדוטנט (או התפתח ביחד עם דוטנט) - פשוט זו דרך אחרת לממש חיבור לSQLSERVER דרך ODBC.אני מאד מבין את הרצון שנעבור למערכות "מתוחכמות יותר", אבל תבין שכשיש לי פרוייקט עם 40 מודולים , 115 טפסים, למעלה מ80 טבלאות, ולא יודע כמה שורות קוד שכולו מחובר דרך ODBC, אל תצפה שאני יעביר את הפרוייקט לWPF (אין סיבה שהלקוח יסכים לשלם :x ) והצורך לחפש דרכים יותר זריזות וממילא יעילות בטפסים ובדוחות הוא הכרחי.
פורסם במקור בפורום CODE613 ב12/02/2014 18:14 (+02:00)
-
אני לא בסוגיא אז אל תטרח להסביר לי עוד.
הדברים ששאלת:-
SP יותר בטוח במידה ואתה נותן לו הרשאה נמוכה יותר. אם יש לתוכנה שלך הרשאת גישה לטבלאות, המשתמש (לא הלקוח, הבחור מול המחשב, פקיד גיק כזה) יכול לXXX. משא"כ בSP הוא מוגבל למה שהוא מספק.
דרך העבודה עם SP זה לא לכתוב את שמו כמו שאילתה, הוא אומר להיות אלגנטי יותר, אני לא יודע עד כמה אקסס תומך בזה, יעויין: http://support.microsoft.com/kb/185125
בקשר להרגל לSQL הרגיל ובקשר לגמישות אתה חופשי להמשיך זאת בצד המסד, תוך עריכת הSP. -
המשל של דוס זה לא לומר שזה קוד שחור אלא שזה נסיון התאמת ישן לחדש. באותו המאמץ שאתה שוקל להשקיע לשנות בתוכנת הענק שלך פה ושם לעבודה מול SQL SERVER דרך הקוד, תעשה את אותו היקף מזערי של עבודה עם כלים מהירים וחדשניים יותר.
פורסם במקור בפורום CODE613 ב12/02/2014 18:55 (+02:00)
-
-
@דוד ל.ט.
אני לא בסוגיא אז אל תטרח להסביר לי עוד.
הדברים ששאלת:- SP יותר בטוח במידה ואתה נותן לו הרשאה נמוכה יותר. אם יש לתוכנה שלך הרשאת גישה לטבלאות, המשתמש (לא הלקוח, הבחור מול המחשב, פקיד גיק כזה) יכול לXXX. משא"כ בSP הוא מוגבל למה שהוא מספק.
דרך העבודה כיום (בניגוד לעבר) היא לא לתת הרשאות ברמת הDB לפי שם משתמש בDB - אלא לתת שם משתמש בודד שיכול לשלוט על הכל, ורק בUI מחליטים לאן הוא ייגש ומה הוא יוכל לעשות.
אם אתה בדוטנט, (ואתה שם!) אז תשים לב במיוחד במערכת המשתמשים בASPX שכל המשתמשים מנוהלים ברמת הUI ולא ברמת הDB.
בנוסף, כמובן שלבחור שיושב מול המחשב בחיים, אבל בחיים לא אמורה להיות גישה לטבלאות האחוריות!@דוד ל.ט.
דרך העבודה עם SP זה לא לכתוב את שמו כמו שאילתה, הוא אומר להיות אלגנטי יותר, אני לא יודע עד כמה אקסס תומך בזה, יעויין: http://support.microsoft.com/kb/185125
בקשר להרגל לSQL הרגיל ובקשר לגמישות אתה חופשי להמשיך זאת בצד המסד, תוך עריכת הSP.אקסס לא החשבון כאן, כי הכל עובר כמות שהוא לשרת.
@דוד ל.ט.- המשל של דוס זה לא לומר שזה קוד שחור אלא שזה נסיון התאמת ישן לחדש. באותו המאמץ שאתה שוקל להשקיע לשנות בתוכנת הענק שלך פה ושם לעבודה מול SQL SERVER דרך הקוד, תעשה את אותו היקף מזערי של עבודה עם כלים מהירים וחדשניים יותר.
לא נריב. ממש לא היקף מזערי. ואני ממש לא זול בעלות לשעה ללקוח.
פורסם במקור בפורום CODE613 ב12/02/2014 19:13 (+02:00)
-
א. מעולם, אצלי לפחות :), לא הייתה גישה ליצור משתמש בDB פר משתמש בקליינט. כוונתי הייתה לעשות סה"כ שתי משתמשים, כשהתוכנה שלך היא המשתמש המוגבל ואתה המשתמש הלא מוגבל.
שים לב שלבחור שיושב מול המחשב, קל מאוד לעשות מה בא לו עם התוכנה שלך יכולה לעשות מב בא לה. הוא רק צריך לחץ ממנה את הקונקשיין, ותאמין לי שזה לא הכי מסובך. לך אולי זה לא אכפת, אבל יש לקוחות שהמידור במשרדם קריטי.ב. מה שהתכוונתי עם דרך הפעולה של הSP יעויין בקישור, זה מה שהתכוונתי.
פורסם במקור בפורום CODE613 ב12/02/2014 19:21 (+02:00)
-
@דוד ל.ט.
שים לב שלבחור שיושב מול המחשב, קל מאוד לעשות מה בא לו עם התוכנה שלך יכולה לעשות מב בא לה. הוא רק צריך לחץ ממנה את הקונקשיין, ותאמין לי שזה לא הכי מסובך. לך אולי זה לא אכפת, אבל יש לקוחות שהמידור במשרדם קריטי.
אז בא ונבדוק ביחד מה יש לנו.
לפני שאני מתחיל אני רק רוצה לזכור שבעבר כתבת כאן באחד האשכולות שאתה בעיקרון נוהג לתת בממוצע לא יותר מ5 שדות בטופס.אם אני מבין, אתה משתמש רק בSP ולא ח"ו בדאטאסט ודומיהם, אחרת יש גישה לטבלה גם בדאטאסט, לא?
נתחיל....
WPF וWINFORMS:
בWPF יש רפלקטור שיכול להוציא את קוד המקור.
יתרה מכך, בדוטנט בד"כ הקונקשיין נשמר בAPP.CONFIG.אז, אם העובד רוצה,הוא יכול לפתוח את הWPF ברפלקטור, לחלץ את הקונקשיין, אבל משם - אין לו לאן להתקדם. כי הנחת העבודה שלי (וגם שלך בהודעה שלך) היא שהיוזר שאתה מקצה לסביבת העבודה מוגבל ולא יכול לגשת לטבלאות אלא רק לSP מסויימים.
אני מבין שגם לאורך כל הדרך ככה אתה שולף את הנתונים (בקוד),ואת העידכון אתה מבצע עם הSP.בא ונראה איפה אבטחת המידע:
נניח שהID של היוזר הוא 2 - ועכשיו בא לו לקרוא את הנתונים שרק יוזר שהID שלו הוא 1 יכול לקרוא,כל מה שהוא צריך לעשות זה:- להעתיק את הקונקשיין.
- להעתיק דרך הרפלקטור את משפט הSP.
- להריץ את זה ממקום אחר ולשלוח בID של היוזר 1 במקום 2. (יש לו הרי שליטה על כל מה שזז.)
נכון, אפשר להגן ע"ז עם טוקנים וכו', אבל גם הקוד שמייצר את זה דיי חשוף כשאנחנו משתמשים ברפלקטור.
אז כנראה שגם זה לא כ"כ מאובטח.
אלא מאי, תגיד לי שיש טבלאות שאני בכלל לא רוצה שהוא יראה, ולכן זה חסום בסביבת העבודה, מנסיון, אתה גם יודע שבד"כ תכתוב גם SP לטבלאות שרק המנהל צריך, והפיתרון שתצטרך לעשות זה עוד משתמש בSQL SERVER בשביל המנהל,וזה סיכמנו שאתה לא עושה.עכשיו, בא נבדוק ביחד מה קורה באקסס:
הקונקשין נשמר בהגדרות הטבלה המקושרת.
אין רפלקטור לקוד (טוענים שיש איזו אפשרות לראות את הקוד, כמה שחיפשתי וחיפשתי מעולם עדיין לא מצאתי מישהו שמשחזר את הקוד למעט חברה אחת, שרוצה הוכחת בעלות גמורה על הקובץ לפני שהיא עושה את זה.)(ד"א, אני דוגל לתת למשתמש את כל השדות שרק יכול להיות, במקום לקבל אלף טלפונים על איזה כפתור ללחוץ כדי לקבל את המידע -- מה שכן, אני מסדר אותם בטאבים)
אם העובד יצליח לגשת לטבלה המקושרת ולחלץ את הקונקשיין (ותאמין לי שזה לא הכי מסובך), יש לו לכאורה לאן להתקדם.
הוא יפתח SQL מנג'מנט, ויראה את כל הטבלאות,ומשם הדרך פשוטה לטרור עסקי -- עד מחיקת טבלאות ונקמות.....בא ונראה איפה אבטחת המידע:
- אני לא שומר שם משתמש וסיסמא בטבלה המקושרת. מי שיצליח לחלץ את הקונקשיין - יהיה לו רק את השרת + שם הDB. (כל השאר לא רלוונטי בחיבור)
- החיבור לטבלאות המקושרות מתבצע אחרי הכניסה -- עם שם המשתמש והסיסמא של המסד, ואחרי שאני מוודא שאין לו גישה לטבלאות (כולל שהוא לא יכול להציג אותם ע"י F11)
- כל הקוד חסום וסגור ללא אפשרות רפלקטור.
כל מה שכתבתי כאן זה לגבי חיבור רגיל של ODBC עם אקסס. לגבי הדוגמא שהעלתי לעיל, אני מוסיף גם את הסעיף הבא:
4. אין טבלה מקושרת. אין איך להוציא את הקונקשיין. כי הוא יושב בתוך הקוד. (לגבי הפחד שמישהוא יריץ את הפונקצייה מבחוץ [זה אפשרי] - אני חושב להכניס אצלי עוד פרמטר של סיסמא פנימית, כדי שאף אחד לא יוכל לבצע את החיבור מבחוץ. [אני עושה את זה כיום כך בריענון של השרת -- בסעיף 2])אגב, האובייקט הנ"ל זמין גם בדוטנט וגם בC++ וכו'
ושכחתי דבר מאד חשוב.
תמיד יוכלו לשים סניפר ולראות את כל מה שעובר בTCP. אם לזה אתה מתכוון, תכתוב.
@דוד ל.ט.לך אולי זה לא אכפת, אבל יש לקוחות שהמידור במשרדם קריטי.
- אכפת לי מאד.
- הלקוחות שאני מכיר שהמידור אצלם קריטי - הסיסמא של הכניסה לווינדוס תהיה בד"כ 1234 או משהו דומה. מספרים ומספרים, אבל לא בטוח שהם גם מבצעים.
אגב מידור קריטי:
משרד החינוך מספר לנו כבר שנתיים שהוא הולך לשנות את כל הגישה של חיבור מתכנתים למנב"ס, ואחת הדרישות שלהם זו אבטחה מטורפת (אתה קראת לזה: "מידור קריטי") מאד מעניין שדווקא הקובץ של המנב"ס פתוח לעין כל ללא סיסמא או אבטחה מינימלית :x :x
מתנצל על התגובה הארוכה
ClickOneפורסם במקור בפורום CODE613 ב13/02/2014 00:30 (+02:00)
-
א. לא התכוונתי מידור בין עובד לעובד, זה בלתי אפשרי עם משתמש אחד, בתוכנה שניגשת לנתונים לא דרך תיווך של מידור משתמשים או בDB או בכל רכיב בתוכנה אחר [u:2ezjn93c]שאינו על המחשב המקומי[/u:2ezjn93c]. התכוונתי למידור שהעובד לא יוכל לעשות דברים גרועים יותר ממה שהתוכנה יכולה לעשות. הכלל: אם אין רמת משתמשים מרוחקת (בDB מרוחק, או כל שרת אחר כמו WebService או WCF או ASP כמו שאמרת), כל מהגבלה שרוצים להחיל על המשתמש מוכרחים להחיל גם על האפליקציה. וכל מה שהאפליקציה מסוגלת לעשות מבחינת הרשאות, המשתמש בה פוטנציאלית יכול גם.
ב. הנחת העבודה שלי היא שזה אפשרי להוציא מחרוזת טקסט מתוך תוכנה כל שהיא לא משנה איך היא קומפלה. יותר מזה, גם כשהמחרוזת איננה ליטרל אלא משתנה, אפשר לגשת לזיכרון של התוכנה או לעקוב אחרי התקשורת של התוכנה ולקבל את הקונקשיין המלא. איך? אני אפי' לא יודע, אבל זה בהכרח אפשרי. האבטחת המידע בקשר לטבלאות המקושרות לא משנה את ההנחה האמורה.
ג. אין שום סתירה בין שימוש בSP לDataSet, זה הולך יופי ביחד.פורסם במקור בפורום CODE613 ב13/02/2014 10:01 (+02:00)
-
@דוד ל.ט.
ב. הנחת העבודה שלי היא שזה אפשרי להוציא מחרוזת טקסט מתוך תוכנה כל שהיא לא משנה איך היא קומפלה. יותר מזה, גם כשהמחרוזת איננה ליטרל אלא משתנה, אפשר לגשת לזיכרון של התוכנה או לעקוב אחרי התקשורת של התוכנה ולקבל את הקונקשיין המלא. איך? אני אפי' לא יודע, אבל זה בהכרח אפשרי. האבטחת המידע בקשר לטבלאות המקושרות לא משנה את ההנחה האמורה.
את זה כתבתי בהדועה שלי. ע"י סניפר אתה יכול לראות כל מה שזז.
וכמובן שיש גם אסמבלר...
ובכל מקרה אתה קורה תיגר על הארכיקטורה של האקסס (ולא רק... כמדומני שגם בדוטנט הגישה שמלמדים היא ממש טבלאות בDS, וSP רק כשרוצים לעשות משהו מורכב.) אבל בוודאי שזה מותר לך, ואולי באמת נפתח ע"ז ועל אבטחת מידע בכלל דיון בנפרד בימים הקרובים.
אני מודה שאתה מעלה כאן נקודה מאד חשובה, ומעניין שלא כ"כ מתייחסים לכך בעולם התיכנות.פורסם במקור בפורום CODE613 ב13/02/2014 10:24 (+02:00)
-
ובכל מקרה אתה קורה תיגר על הארכיקטורה של האקסס (ולא רק... כמדומני שגם בדוטנט הגישה שמלמדים היא ממש טבלאות בDS, וSP רק כשרוצים לעשות משהו מורכב.) אבל בוודאי שזה מותר לך, ואולי באמת נפתח ע"ז ועל אבטחת מידע בכלל דיון בנפרד בימים הקרובים.
אני מודה שאתה מעלה כאן נקודה מאד חשובה, ומעניין שלא כ"כ מתייחסים לכך בעולם התיכנות.שים לב: אין קשר בין DataSet לבין שימוש או אי שימוש בSP.
אני אישית כמעט לא משתמש בSP ואני בכלל לא קורא תיגר על כלום.
ציינתי עובדות יבשות.
התשובה האמיתית לאבטחת מידע זה שרת. לא שרת נתונים (SQL SERVER) אלא שרת של התוכנה עצמה. וככה עושים כל הארגונים היום. אבל בתוך הארגון עצמו יש מתכנתים שהם בונים את צד השרת, ולהם יש גישה למסד. איזו גישה? SP... בגלל אבטחת מידע מפני המתכנתים. הם יכולים לעשות רק מה שמצפים שהקוד שלהם יידע, ובנוסף גם מה שהם מורשים מתועד בקלות רבה יותר בגלל שזה SP.פורסם במקור בפורום CODE613 ב13/02/2014 11:04 (+02:00)
-
מסכים.
העובדות היבשות שציינת קוראות תיגר :lol: :lol:
@דוד ל.ט.התשובה האמיתית לאבטחת מידע זה שרת. לא שרת נתונים (SQL SERVER) אלא שרת של התוכנה עצמה. וככה עושים כל הארגונים היום. אבל בתוך הארגון עצמו יש מתכנתים שהם בונים את צד השרת, ולהם יש גישה למסד. איזו גישה? SP... בגלל אבטחת מידע מפני המתכנתים. הם יכולים לעשות רק מה שמצפים שהקוד שלהם יידע, ובנוסף גם מה שהם מורשים מתועד בקלות רבה יותר בגלל שזה SP.
אם הבעייה היא המתכנתים (אני הבנתי שהבעייה היא משתמשי הקצה - ולא המתכנתים), כי למשתמשים סיכמנו שאין גישה (זה יושב על השרת - ולא משנה איזה (ווב או ווינפורם עם RDP וכו')) אז עדיין אני לא מבין.
בשביל זה יש מושג שנקרא סביבת ייצור.
בסביבת הייצור יש נתוני דמה,המתכנתים בונים מה שבא להם, ואין להם גישה לשום מידע רגיש (מלבד למבנה הטבלאות - שזה בעצם כלום כל עוד אתה לא מחובר למסד האמיתי) כשהמתכנתים מסיימים (או מעלים עידכון) מעבירים את הגירסה לשרת האמיתי, ושמנים אתה קונקשיין למסד האמיתי. -- לא אמורה להיות למתכנת גישה לשם בכלל. - אלא לDBA, (ואם אתה כבר לא סומך עליו זו אכן בעייה) אבל אני מניח שלפחות בשב"כ כן עושים להם בדיקה לפני :lol: :lol:פורסם במקור בפורום CODE613 ב13/02/2014 12:21 (+02:00)
-
אני הוספתי את עניין המתכנתים לספר למה SP משמש בעולם לצרכי אבטחה. כי לעניין משתמשים גם על הSP לא מסתמכים כפי שכתבתי.
ולגבי המתכנתים, א. לא מדובר רק על אבטחה מזדון, אלא גם מבאגים וטעיות מתכנת. רוצים לדעת מה מי ושלא יימחק כל המסד בגלל פאק.
ב. לאיש תוכנה כל שהוא בארגון בהכרח יש את הקונקשיין עם סיסמה לסביבת האמת. ואיש הDB לא רוצה שיאשימו אותו במידע שהלך לכן הוא ממדר את אותו איש תוכנה.פורסם במקור בפורום CODE613 ב13/02/2014 13:36 (+02:00)