אחסון ושימוש בדאטה בייס SQL על כונן חיצוני
-
יש לי פרויקט עם שרת C#, לקוח javascript ומסד נתונים SQL (כתבתי אותו ב SSMS) אני רוצה להשתמש בו בצורה שלא תהיה אפשרות לגשת לנתונים דרך ה SSMS (כמובן) ויותר מזה, אני רוצה לאחסן אותם בכונן חיצוני כיון שהמחשב אינו פרטי ואני לא רוצה שמשתמשים אחרים יוכלו לגשת לנתונים.
אני מחפש דרך שתאפשר לתוכנה להיות מותקנת על המחשב אבל האונקי יהיה בידיים של המנהל וכאשר הוא מחבר אותו למחשב תהיה לו גישה לדאטה בייס (באופן מידי, בלי להריץ קובץ וכדו').
בעצם יש כאן 2 שאלות-- האם ואיך אפשר לאחסן data base על כונן חיצוני?
- איך חוסמים את הגישה של משתמש לנתונים בדרך עוקפת לממשק שאני יצרתי? (גם למנהל לא אמורה להיות דרך להכניס לנתונים בלי לעבור את הבדיקות תקינות וכו')
-
@pancake אם אתה מדבר על SqlServer בדווקא, הוא מבוסס שרת, כך שאי אפשר לגשת לקובץ הדאטא בלי מנוע ה-Server. אכן אפשר למקם את קובץ הנתונים שלו במיקום ברצונך, ולהפנות אליו על ידי פרמטר במחרוזת החיבור:
AttachDbFilename=D:\MyApp\AppData.mdf;
(אפשרות אחרת היא להשתמש ב-DB של SqlLite שהוא SelfContained (לא מצריך התקנת שרת), ומאוחסן כקובץ יחיד. אמנם אין בו את כל האפשרויות שמגיעות עם SqlServer כמו StoredProcedures.)
לגבי חסימת הגישה, למי שיש גישה ל-ConnectionString תהיה כמובן גם גישה לנתונים. אם תגן על ה-DB בעזרת סיסמה מורכבת, ותשמור את מחרוזת החיבור בצורה מאובטחת, למשתמש הפשוט לא תהיה גישה לנתונים.
-
@dovid לא, המחשבים לא מחוברים לאינטרנט
@OdedDvir הוספתי למחרוזת הקישור את המיקום החדש של הקבצים, נראה שזה באמת מתחבר לקובץ אבל ברגע שהוא מנסה לקרוא את הנתונים מתקבלת כזו שגיאה:
הקוד:public static List<Students> GetAllStudents() { try { using (MyDb db = new MyDb()) { var list1 = db.Students.ToList();//השגיאה מופיעה בשורה הזו כלומר עבר את ההתחברות return list1; } } catch(Exception ex) { return null; } }