אנטיטי ב C# - שאלות
-
@dovid תודה על המחמאות והתשובה המושקעת. לפני שאבקש עוד הסברים, אני רוצה לעיין היטב בדבריך. כרגע אשמח לדון בתחילת דבריך אודות מסד הנתונים. התוכנה שלי יועדה להיות מותקנת במחשבים רבים בלי אינטרנט כלל או רק מייל. ולכן יש לכל התקנה מסד נתונים מקומי (אקסס כרגע) לה אני קורא "הזנת נתונים", וחוץ מזה יש מחשב מרכזי (כרגע שרת SqlServer) שמכיל את הנתונים כולם "המחשב הראשי"
כל מחשב של הזנת נתונים שולח עדכונים מידי פעם באמצעות קובץ מוצפן ומקודד שהתוכנה יוצרת. השליחה מתבצעת גם דרך מייל או אפילו - דיסק און קי. אני מניח שאתה כבר משער לעצמך איזה טלפונים אני מקבל על בעיות משונות יש במחשבי הזנת הנתונים. בעיה נוספת ועיקרית- מאחר והמחשבים הנ"ל אינם מחוברים לאינטרנט, תוספת של התקנת הדרייבר של אקסס מגדילה את קובץ ההתקנה שלי במאות אחוזים, ומסרבלת מאוד.
ולשאלתי- כתבת שאפשר בודאי לחסוך את הצורך בהתקנת Db. הכיצד? -
@חבלזון אמר באנטיטי ב C# - שאלות:
@dovid תודה על המחמאות והתשובה המושקעת. לפני שאבקש עוד הסברים, אני רוצה לעיין היטב בדבריך. כרגע אשמח לדון בתחילת דבריך אודות מסד הנתונים. התוכנה שלי יועדה להיות מותקנת במחשבים רבים בלי אינטרנט כלל או רק מייל. ולכן יש לכל התקנה מסד נתונים מקומי (אקסס כרגע) לה אני קורא "הזנת נתונים", וחוץ מזה יש מחשב מרכזי (כרגע שרת SqlServer) שמכיל את הנתונים כולם "המחשב הראשי"
כל מחשב של הזנת נתונים שולח עדכונים מידי פעם באמצעות קובץ מוצפן ומקודד שהתוכנה יוצרת. השליחה מתבצעת גם דרך מייל או אפילו - דיסק און קי. אני מניח שאתה כבר משער לעצמך איזה טלפונים אני מקבל על בעיות משונות יש במחשבי הזנת הנתונים. בעיה נוספת ועיקרית- מאחר והמחשבים הנ"ל אינם מחוברים לאינטרנט, תוספת של התקנת הדרייבר של אקסס מגדילה את קובץ ההתקנה שלי במאות אחוזים, ומסרבלת מאוד.
ולשאלתי- כתבת שאפשר בודאי לחסוך את הצורך בהתקנת Db. הכיצד?בקשר לDB לך על Sqlite עם אנטיטי, ככה לא צריך שום הגדרה ושום התקנה. ותקבע סיסמה בקונקשיין סטרינג.
כדי לעשות חיים קשים לפורצים כדאי שהסיסמה תיוצר בצורה לא הכי ברורה, מצוה מן המבחר להעביר ערפול.
בקשר למיזוג הקבוע עם המסד לא שאלת על זה אבל אם יש לך בעיות תפרט את התהליך. -
-
התקדמתי ב"ה בתוכנית, ועכשיו ברצוני להכין תוכנה (Wpf) עבור ניהול של מסד הנתונים הראשי.
גיליתי שיש לי חור בהשכלה... איך ליצור נכון את החיבור למסד הנתונים שנמצא באתר (sql server)?
כלומר, אני יכול להכניס בConnectionString שם משתמש וסיסמא קבועים, אבל "ליבי אומר לי" שזה גרוע מאוד....
מצד שני, אני אמור ליצור שם משתמש (לוגין בעצם) שונה לכל עמדת מחשב? ואם כן איך אני שומר ומנהל את זה (כאמור בחיבור על ידי EnitityFramework)? הרי לא יתכן שצריך לקמפל קוד נפרד לכל אחד...
בחיפוש ברשת נאבדתי בין התוצאות, אודה לכם מאוד לכל מידע / הכוונה להדרכה מסודרת בנושא / תיקון שגיאות בשאלה עצמה וכדומה -
@חבלזון אמר באנטיטי ב C# - שאלות:
כלומר, אני יכול להכניס בConnectionString שם משתמש וסיסמא קבועים, אבל "ליבי אומר לי" שזה גרוע מאוד....
את זה אתה ממקם בתוך הקוד או בקובץ קונפיגורציה (כנראה App.config) חיצוני.
אם זה בקוד אתה באמת בבעיה שהזכרת,
אבל בקונפיגורציה פשוט מגדירים לכל משתמש. -
@yits אמר באנטיטי ב C# - שאלות:
@חבלזון אמר באנטיטי ב C# - שאלות:
כלומר, אני יכול להכניס בConnectionString שם משתמש וסיסמא קבועים, אבל "ליבי אומר לי" שזה גרוע מאוד....
את זה אתה ממקם בתוך הקוד או בקובץ קונפיגורציה (כנראה App.config) חיצוני.
אם זה בקוד אתה באמת בבעיה שהזכרת,
אבל בקונפיגורציה פשוט מגדירים לכל משתמש.אם הבנתי נכון- ליצור לוגין אחר לכל מחשב, ולשים את המידע הזה בקובץ חיצוני?
ואיך זה מאובטח? -
עקרונית, בתוכנה שולחנית, אתה לא אמור ליצור לוגין שונה לכל מחשב, וגם לא אמור לשמור את הפרטים הללו בסוד.
בשביל הגמישות - שמים את המחרוזת חיבור בApp.config.
אבל זה נכון שמתי שכן רוצים לשמור את פרטי החיבור ב"סוד", אז זה אפשרי, ראה כאן
https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/connection-strings-and-configuration-filesאתה גם יכול לתת את מחרוזת החיבור בזמן ריצה כתגובה לסיסמה של המשתמש או משהו דומה.
-
@dovid אמר באנטיטי ב C# - שאלות:
וגם לא אמור לשמור את הפרטים הללו בסוד
אשמח להרחבה בנושא הזה. אני בהחלט לא בענין של "לשמור הכול בסוד", אבל כשמדובר במסד נתונים רציני עם מידע רגיש, אז מה הכללים? זה תקין שיש קובץ טקסט קריא עם פרטי החיבור והסיסמא? או שזה תלוי אם אני יודע שזה מותקן על מחשב מאובטח כראוי, ואני סומך על המשתמשים? יש בזה אי אילו כללים פשוטים?
תודה רבה! -
@חבלזון בא נאמר ככה, מחשב אישי זה לא משהו שהולך ברחובות.
כשאתה חושש שהמידע ידלוף אתה צריך לדעת על מי אתה מגן, עליך או על המשתמש.
אם אתה מגן עליך (אפשר עם השם והסיסמה לגשת לכל החומר), עליך ליצור במסד משתמש שלא חשוף ליותר ממה שהתוכנה אמורה להיות חשופה.
אם אתה מגן על המשתמש אתה יכול להדריך אותו איפה החומר הרגיש או פשוט לבקש ממנו את הסיסמה בהפעלת התוכנה ולא לשמור אותה בAppConfig.
אם אתה צריך גמישות רבה יותר - למשל אתה מרשה למשתמש רק 10 שורות בכל פעם, אתה חייב לעשות תוכנת ווב מתווכת בין התוכנה למסד, ולא לחשוך את התוכנה ישירות למסד. כי כפי שאתה חושש, גם עם התוכנה מוגנת כי הרי אתה פיתחת אותה עם ההגבלות, פרטי החיבור חשופים.
אמנם נתתי לך לינק להצפין את פרטי החיבור אבל אני לא מאמין שזה עזור מאומה מהרגע בו אפשר לצוטט לתוכנה (זה כנראה רק מגן מפני מי שיש לו גישה למערכת הקבצים). -
@dovid אמר באנטיטי ב C# - שאלות:
בקשר למיזוג הקבוע עם המסד לא שאלת על זה אבל אם יש לך בעיות תפרט את התהליך
הגעתי לשלב הזה בשעה טובה, ואשמח לקבל ממך עצה טובה בנושא. הצורה בה עבדתי עד היום היא שתחנת הקצה (מסד Access) יוצרת קובץ XML עם הנתונים, אותו שולחים במייל. בקצה השני יש מחשב הקורא את המיילים ומזין את הנתונים לשרת (Sql Server)
קובץ ה XML מחולק לשלוש שלוחות עיקריות - רשומות חדשות, עדכונים, ומחיקות
בהנחה שאני עובר לעבוד עם Sqlite בתחנות הקצה, יש לך הדרכה - הצעה - עבורי איך לבצע מיזוג קל ומהיר?
תשובתך תעזור לי מאוד להחליט על עצם השינוי. תודה רבה מראש! -
@dovid לא אמרתי (שאמרת) שלא טוב. לי עצמי זה קצת מסורבל (המרה במקור לאקסמל ואחר כך להיפך) והיו לי כמה תקלות שכמעט גרמו לאובדן מידע בדרך
ומתוך ההצעה שלך היה נראה שיש לך הצעה פשוטה על קצה הלשון, וגם אם לא התכוונת לכך אשמח לשמוע אם יש לך דרך אחרת להציע, או איזו מוסכמה קבועה ויעילה שיכולה לעזור לי בעניין. תודה! -
אתה צודק, מיפוי אוטומטי קל מXML לאבוייקטים ולהיפך נעשה באמצעות סריאליזציה כבדה, אבל בשביל הבעיה הזאת תוכל להשתמש בJSON עם הספריה JSON.NET.
לגבי הסנכרון אין חיים קלים, אבל יש כל מיני רעיונות לפתור כל מיני בעיות שיכולות להיות לפי העניין - לכן אם ישנה בעיה תעלה אותה לדיון.
Sqlite שימושי רק אם מדובר בכמות מידע גדולה, שאתה מבצע עליה שאילתות ואתה לא רוצה לטעון את כולה לזיכרון. אחרת אין בו תועלת.