MSSQL

amitelad

New member
MSSQL

מישהו יודע במקרה כיצד ניתן להתחבר לשרת MSSQL בחיבור מוצפן, אבל לא משרת אחר אלא מ-client כלשהו בסביבת dot NET.
 

גרי רשף

New member
מזתומרת מוצפן?

האם הכוונה שהמשתמש לא יראה את השם והסיסמה? זה הרי בקוד המקומפל..
 

nattygur

New member
זאת לא פרטיקה טובה

להחביא את שורת הקישור בקוד. כל פעם שתשנה בסיס נתונים תהדר מחדש ותפיץ ? ישנם מספר דרכים 1) להשתמש ב NameSpace של הצפנה ולרשום את הטכסט המוצפן ב Web.config. 2) להשתמש ב registry בכדי למפות ערכים ב web.config לרגיסטרציה שהגישה אליו יותר קשה.
password="registry:HKLM\Software\AspNetIdentity,Pwd"​
 

amitelad

New member
לא זאת הייתה הכוונה

התכוונתי לכך שהתקשורת בין שני המחשבים תהיה מוצפנת
 

amitelad

New member
וכשאין ברירה

וצריך לתקשר בין client ושרת SQL דרך האינטרנט?
 

gooshi

New member
תקרא את המאמר הבא

אני מקווה שזה מה שאתה מחפש:
Building Secure ASP.NET Applications: Authentication, Authorization, and Secure Communication http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnnetsec/html/SecNetHT19.asp​
 

pagis

New member
דווקא ב .NET זה ממש פשוט

אם אתה רוצה הצפנה, ולא רק (או לא בכלל) אבטחת כניסה, אתה פשוט יוצר איזה שרות שמקשר לשרת ה SQL ויושב על השרת (נאמר שאתה ניגש לשרת דרך איזשהו web service). הפניה הראשונית לשרת תעשה לאיזשהי פונקציה שתפקידה להחליף מפתחות הצפנה ולהתחיל את ההצפנה, נקרא לה handShake. הפונקציה הזו בעצם לא מקבלת כלום אבל היא מחזירה את מפתח ההצפנה שבעזרתו תצפין דברים שיישלחו לשרת. באובייקט שבתוכו יושבת handShake, והוא בעצם האובייקט המתווך בין ה Service ללקוח יהיה לך instance מסוג RSACryptoServiceProvider. כשתתבצע פניה ל handShake היא תחזיר string שיכיל את המפתח RSACryptoServiceProvider.ToXmlString הלקוח מצדו יוצר אובייקט RSACryptoServiceProvider, מיבא את המפתח שהוא מקבל מ handShake (RSACryptoServiceProvider.FromXmlString) ומעכשיו אתה יכל להצפין כל דבר שהלקוח שולח לשרת ע"י RSACryptoServiceProvider.Encrypt ולפענח ע"י RSACryptoServiceProvider.Decrypt. חשוב לזכור שאפשר להצפין (ולפענח) רק מערכים חד ממדים מסוג byte, כך שאתה פשוט צריך להמיר כל אובייקט שלך ל byte ולהכניס למערך, כאשר תמיד אתה יכל לעשות את זה דרך string כאובייקט מתווך. חוץ מזה, כדי שלא יהיה מיש-מש חשוב להקפיד על הפרדה של האובייקטים. תצפין ותשלח בכל פעם מערך אחד שמכיל משהו ברור, כך שלא יהיה מצד שבצד המקבל תתקשה לצקת את המידע המפוענח לתוך אובייקט מסוג מסויים. אני מצרף דוגמת קוד ב #C: הקוד בצד הלקוח יראה כך:
string RSAKey = mySQLservice.handShake(); System.Security.Cryptography.RSACryptoServiceProvider Lock = new System.Security.Cryptography.RSACryptoServiceProvider(); Lock.FromXmlString(RSAKey); byte[] SQLinfo = System.Text.Encoding.UTF8.GetBytes("stuff from your SQL DB in string form"); SQLinfo = Lock.Encrypt(SQLinfo,false);​
הקוד בצד השרת יראה כך:
public class DBmiddleman : System.Web.Services.WebService { private static RSACryptoServiceProvider serverLock = new RSACryptoServiceProvider(); public string handShake() { return serverLock.ToXmlString(false); } }​
החלפת המפתחות תעבוד בדיוק באותה הצורה גם בכיוון השני. כמובן שבמחלקה האמיתית יהיו גם האלמנטים שמאפשרים את כל התקשורת מול שרת ה SQL ואת כל שאר הפונקציות שיתקשרו בין הלקוח ל service אבל עכשיו כבר החלפת מפתחות הצפנה ואתה יודע איך להצפין ולפענח את המידע כך שתוכל לבצע את כל התקשורת שלך בצורה מאובטחת (אפילו שם משתמש וסיסמא אתה יכל להצפין כך שבעצם התקשורת היחידה שתעבור לא מוצפנת היא המפתחות הציבוריים). וואו! זה יצא ארוך הרבה יותר ממה שתכננתי (וגם לקח הרבה זמן, כנראה שנסחפתי) אני מקווה לפחות שזה עוזר.
 

pagis

New member
שכחתי לציין את ה namespace

שהוא כמובן: System.Security.Cryptography
 

amitelad

New member
שכחתי כמובן לציין

שאין לי גישה ישירה לשרת SQL עצמו או יותר נכון יכולת/הרשאות להתקין עליו דברים
 

pagis

New member
אין לך גישה לשרת הSQL ?

מה בדיוק אתה עושה? אתה אומר שאתה רוצה תקשורת מוצפנת בין שרת לבין לקוח אבל אם אין לך גישה לשרת אז השרת לא יוכל להצפין! אם יש לך גישה למכונה עליה מותקן השרת או למכונה שיושבת על אותה הרשת אתה יכול להשים עליה service ושהוא יפנה לשרת ה SQL בכל פעם שתגיע אליו דרישה, יצפין ויחזיר ללקוח. בכל מקרה, במימוש RSA, שהוא שיטת ההצפנה בין הכי חזקות היום והכימ טובה ונוחה ש NET. מציעה, זו הדרך הנוחה לעבוד. אם תפרט את צורת העבודה שלך אולי אני אוכל להציע משהו אחר.
 

amitelad

New member
הכוונה

שלי הייתה לא שאין לי גישה לשרת, במידה ואין לי גישה אין ממש משמעות לשאלה. הכוונה הייתה שאין לי גישה/הרשאות להתקין על שרת ה-SQL שירותים/services. הכוונה שלי הייתה אם יש דרך להצפין את המידע בעזרת שימוש במשהו שקיים בשרת MSSQL.
 

pagis

New member
שאלה כזו מקומה בפורום אחר

אולי בפורום ייעודי של MS SQL SERVER. למרות שאני מניח שקצת קריאה בתיעוד של השרת תענה לך על השאלה.
 

גרי רשף

New member
חלילה..

עד כה נהגתי להשתמש לשם כך (אחסון ה-connection string) בקובץ mdb מוגן סיסמה.
 
למעלה