2012-04-17 23 views
5

डेटाफ़ैप का उपयोग करके अपेक्षाकृत सरल डेटाबेस ऐप बनाने के लिए डेल्फी एक्सई का उपयोग करना।डेल्फी डेटासैप सर्वर पर SQL लॉगिन प्रमाण-पत्र पास करने का सबसे प्रभावी तरीका?

चूंकि मेरे आवेदन में कुछ सुरक्षा डेटाबेस स्तर पर संभाली जाती है, इसलिए मुझे अपने क्लाइंट ऐप से उपयोगकर्ता के SQL प्रमाण-पत्र को अपने डेटासैप सर्वर पर पास करने की आवश्यकता होती है।

(मैं Datasnap सर्वर यदि संभव हो तो राज्यविहीन बनाने की कोशिश कर रही है, इसलिए समझते हैं कि मैं हर कॉल के लिए ऐसा करना होगा।)

मैं ग्राहक पक्ष पर ClientDatasets (सीडीएस) का उपयोग कर रहा तो मैं सर्वर पर संबंधित TDataSetProvider से क्लाइंट पर सीडीएस से मालिक डेटा ओलेरिएरिएंट में डेटा पास करने के लिए OnBeforeGetRecords का उपयोग कर सकता है। लेकिन इसका मतलब है कि प्रत्येक डेटा मॉड्यूल पर प्रत्येक सीडीएस में ऐसा कोई ईवेंट होता है जो ऐसा करता है, जो गन्दा और अनावश्यक लगता है। मैं यह महसूस करने में मदद नहीं कर सकता कि सर्वर से संदेशों को उच्च स्तर पर पास करने का कोई तरीका होना चाहिए।

सर्वर साइड पर DSServerClass स्तर पर कुछ इस तरह क्या मैं सच में करना चाहते हैं:

Procedure TMyServerContainer.MyServerClassCreateInstance(DSCreateInstanceEventObject: TDSCreateInstanceEventObject); 
begin 
// Server detects request for data from client app 
fUsername := GetUsernameFromClientSomehow; 
fPassword := GetPasswordFromClientSomehow; 

// create data modules and initialise 
MyDataModule := TMyDataModule.Create(nil); 
MyDataModule.InitialiseWithSQLCredentials(fUsername, fPassword); 
DSCreateInstanceEventObject.ServerClassInstance := MyDataModule; 
End; 

प्रमाणीकरण प्रबंधक घटक मुझे यहाँ मदद कर सकता है? कोई अन्य विचार? या मैं OnBeforeGetRecords के साथ अटक गया हूँ?

बहुत धन्यवाद।

उत्तर

3

आप डेटा स्नैप सर्वर से कनेक्ट करने के लिए SQLNentials को उपयोगकर्ता नाम और पासवर्ड के रूप में उपयोग कर सकते हैं। इन मानों को प्रमाणीकरण प्रबंधक में सत्यापित किया जा सकता है और/या SQL सर्वर से कनेक्ट करने के लिए अंतर्निहित SQLConnection घटक को अग्रेषित किया जा सकता है।

+0

धन्यवाद, ऐसा लगता है - यह स्पष्ट है कि अब आप इसे इंगित करते हैं लेकिन शायद मुझे दिन बचाए हैं। – RichardS

3

सबसे सुरक्षित तरीका उपयोगकर्ता सुरक्षा टोकन (एन्क्रिप्टेड) ​​के साथ पास करना होगा और फिर उपयोगकर्ता सुरक्षा संदर्भ को थ्रेड में सर्वर के पक्ष में एकीकृत सुरक्षा का उपयोग करना होगा। इस तरह तार पर कोई उपयोगकर्ता/पासवर्ड कभी नहीं भेजा जाएगा। अनजाने में एमएस/डीसीई आरपीसी प्रत्येक कॉल (और डीसीओएम, आरपीसी के ऊपर बनाया जा रहा है) के लिए ऐसा कर सकता है, डेटासेट नहीं कर सकता है (एसपीएनईजीओ/जीएसएसएपीआई/एसएसपीआई एम्बरकेडेरो में लोगों के लिए जटिल दिखता है, उन्हें सरल, असुरक्षित प्रोटोकॉल पसंद हैं)। अन्यथा नेटवर्क पर क्रेडेंशियल भेजने के तरीके से बहुत सावधान रहें, जब तक ठीक से सुरक्षित नहीं किया जाता है, तब तक उन्हें आसानी से स्नीफ किया जा सकता है।

मैं आपको सलाह देता हूं कि अगर आपको (और सबसे सुरक्षित तरीके से आप कर सकते हैं) में उन्हें केवल एक बार भेजने की सलाह दी जाए, और फिर उन्हें सर्वर की ओर सुरक्षित रखें (विंडोज़ सुरक्षित स्टोरेज सुविधाओं पर मुकदमा करें), और वापस भेजें क्लाइंट को एक हैंडल/सत्र टोकन (मूल आईपी से बंधे हुए), प्रत्येक बार क्रेडेंशियल्स को फिर से भेजने के बजाय बाद में कॉल में उपयोग किया जाता है। उपयोगकर्ता लॉग ऑफ या सत्र टाइमआउट के दौरान जानकारी साफ़ कर दी जाती है।