2012-06-19 8 views
13

मैं एक आवेदन बना रहा हूं और मुझे डेटाबेस से कनेक्ट करने की आवश्यकता है। डेटाबेस को लॉगिन/पासवर्ड की आवश्यकता होती है ताकि एप्लिकेशन चुनिंदा और सम्मिलित करने जैसे संचालन कर सके।किसी डेटाबेस से कैसे कनेक्ट करें जिसके लिए पासवर्ड को उजागर किए बिना पासवर्ड की आवश्यकता है?

एप्लिकेशन में मुझे लॉगिन और पासवर्ड का उपयोग कर डेटाबेस से कनेक्ट करने की आवश्यकता है, इसलिए एप्लिकेशन डेटाबेस पर कुछ कार्य करने के लिए स्वतंत्र है। मेरा सवाल है: पासवर्ड को उजागर किए बिना डेटाबेस से कनेक्ट करने के लिए मैं पासवर्ड कैसे संग्रहीत और उपयोग कर सकता हूं?

मैं पासवर्ड को स्टोर करने के लिए केवल हैश या एन्क्रिप्शन का उपयोग नहीं कर सकता क्योंकि डेटाबेस को पासवर्ड पहचानना चाहिए (मुझे लगता है कि अधिकांश या सभी डेटाबेस को सादे पाठ के रूप में पासवर्ड प्राप्त करना होगा)।

नोट: कनेक्शन एप्लिकेशन द्वारा किया जाता है। कनेक्शन करने के लिए कोई मानव इनपुट नहीं।

(संपादित करें) आवेदन के बारे में अधिक जानकारी: यह servlets/jsp का उपयोग कर एक वेब अनुप्रयोग है। डेटाबेस एप्लिकेशन के उसी सर्वर पर है। एप्लिकेशन के लिए उपयोगकर्ता पूर्ण व्यवस्थापक शक्तियों के बिना एक डिफ़ॉल्ट उपयोगकर्ता है, लेकिन यह पंक्तियों को सम्मिलित/हटा सकता है और अधिकांश चीजें करता है जिसमें तालिकाओं में क्वेरी और डेटा संशोधन शामिल होता है।

+0

क्या आप एप्लिकेशन स्टार्ट-अप पर पासवर्ड के लिए ऑपरेटर को संकेत दे सकते हैं? – sarnold

+0

कनेक्शन द्वारा कनेक्शन बनाया गया है। कोई मानव इनपुट नहीं। – ceklock

+3

मुझे लगता है कि आपको अपने एप्लिकेशन के पर्यावरण के बारे में थोड़ा और वर्णन करने की आवश्यकता है। क्या यह एक सर्वर ऐप है, क्लाइंट ऐप, एक ही सर्वर पर डेटाबेस है, अलग सर्वर? क्या आपने उपयोगकर्ता को केवल सम्मिलित करने के लिए अनुमतियां बनाई हैं? (आप रूट के रूप में लॉग इन करने की कोशिश नहीं कर रहे हैं?) आम तौर पर, आपको 'कुछ जानकारी देना' देना होगा और आईपी रेंज में लॉगिन पहुंच प्रतिबंधित करना होगा। –

उत्तर

10

यह सामान्य तरीका है कि उपयोगकर्ता नाम/पासवर्ड को property/config file पर बाहरी करना है जिसे रनटाइम पर पढ़ा जाता है (चाहे आप मूल जेडीबीसी/जेएनडीआई/सीडीआई/जे 2 ईई डेटासोर्स/आदि का उपयोग करें)।

फ़ाइल sysadmins द्वारा ओ/एस सुरक्षा के माध्यम से संरक्षित है।

ओ/एस में ऐप कोड की तुलना में सुरक्षा के लिए बेहतर टूल हैं।

+1

इस फ़ाइल का उपयोग कैसे करें? क्या यह एन्क्रिप्टेड है? पासवर्ड को डिक्रिप्ट करना है? मैं डेटाबेस कनेक्शन में पासवर्ड कैसे पास करूं? – ceklock

+0

यह सुनिश्चित नहीं है कि यह क्लाइंट ऐप्स में सुरक्षित है (जहां तार तार पर है)? Elborate की देखभाल .... –

+1

यदि आप कॉन्फ़िगरेशन फ़ाइल संपादित करते समय किसी को अपने कंधे पर देखकर और पासवर्ड देखकर रोकना चाहते हैं, तो आप ['stringScrambler'] का उपयोग कर सकते हैं (https://github.com/kentcdodds/ जावा हेल्पर लाइब्रेरी में जावा-हेल्पर/ब्लॉब/मास्टर/src/com/kentcdodds/javahelper/helpers/OtherHelper.java # L66)। यह वास्तव में सरल है, लेकिन कंधे से लोगों को आपके पासवर्ड सर्फ करने से रोकने के लिए वास्तव में प्रभावी है ... – kentcdodds

4

यदि यह एक वेब ऐप है, तो इसे जावा ईई ऐप सर्वर पर तैनात करें और जेएनडीआई संसाधन का उपयोग करके कनेक्ट करें। केवल जेएनडीआई डेटा संसाधन स्थापित करने वाले व्यवस्थापक को कनेक्ट करने के लिए आवश्यक प्रमाण-पत्रों के बारे में जानना आवश्यक है। उपयोगकर्ताओं और डेवलपर्स को उन्हें भी नहीं जानना है; सिर्फ जेएनडीआई लुकअप नाम।

डेटाबेस मालिक के अलावा उपयोगकर्ता नाम और पासवर्ड जानने के लिए किसी की आवश्यकता को पूरी तरह समाप्त करना संभव नहीं है, लेकिन उस ज्ञान को ऐप सर्वर स्वामी को प्रतिबंधित करना संभव है।

आपको अच्छी तरह से उस एप्लिकेशन के लिए अलग-अलग प्रमाण-पत्र बनाने की सलाह दी जाती है और इसे अपने कार्यों को पूरा करने के लिए न्यूनतम पहुंच और अनुमतियां प्रदान की जाती हैं। आवेदन के प्रांत के बाहर सिस्टम टेबल या किसी अन्य संसाधन का कोई ज्ञान नहीं होना चाहिए। अगर अनुमति अनुमति आवश्यक नहीं है, तो इसे प्रदान न करें। अगर पहुंच केवल तभी पढ़ी जानी चाहिए, तो आपको यही प्रमाण पत्र देना चाहिए।

6

आप एन्क्रिप्शन के लिए jasypt का उपयोग कर सकते हैं। और उपयोगकर्ता नाम और पासवर्ड datasource.properties फ़ाइल में संग्रहीत करें।

public Connection getConnection() throws IOException{ 
    try{ 
     BasicTextEncryptor encryptor = new BasicTextEncryptor(); 
     encryptor.setPassword("jasypt"); 

     Properties props = new EncryptableProperties(encryptor); 
     props.load(this.getClass().getResourceAsStream("datasource.properties")); 

     String driver = props.getProperty("datasource.driver"); 
     String url = props.getProperty("datasource.url");   
     String userName = props.getProperty("datasource.userName");   
     String password = props.getProperty("datasource.password"); 

     Class.forName(driver); 
     Connection conn = DriverManager.getConnection(url, userName, password); 
     conn.setAutoCommit(false); 

     return conn; 
    } catch(ClassNotFoundException e) { 
     e.printStackTrace(); 
     return null; 

    } catch(SQLException e) { 
     e.printStackTrace(); 
     return null; 
    } 
} 
+0

jasypt लाइब्रेरी को जानना अच्छा लगा। क्या आपको पता है कि एन्क्रिप्शन/डिक्रिप्शन प्रक्रिया सुरक्षित है या नहीं? मैं सबसे पहले एक एन्क्रिप्टेड पासवर्ड की एक फ़ाइल में स्टोर करता हूं जो मुझे चाहिए, और फिर पासवर्ड को डिक्रिप्ट करने का प्रयास करें (डिक्रिप्ट समस्या है, क्योंकि मुझे लगता है कि मुझे एक और पासवर्ड चाहिए ...)। लेकिन ऐसा लगता है कि आपको इस पुस्तकालय के साथ कुछ भी डिक्रिप्ट करने की आवश्यकता नहीं है। अगर यह काम करता है तो यह बहुत अच्छा है। – ceklock

+0

जैसिप्ट यूनिडायरेक्शनल और बिडरेक्शनल एन्क्रिप्शन तकनीक प्रदान करता है। मैंने बस कनेक्शन स्ट्रिंग के लिए लाइब्रेरी का उपयोग किया। http://www.jasypt.org/features.html –

7

आपको इसके लिए एक कॉन्फ़िगरेशन फ़ाइल का उपयोग करना चाहिए। अपने जीवन को आसान बनाने के लिए जेडीबीसी के साथ वसंत का उपयोग करें!

http://www.youtube.com/watch?v=f-k823MZ02Q

चेकआउट स्प्रिंग ढांचे पर ऊपर भयानक ट्यूटोरियल और JDBC का उपयोग कर। अपने सभी जेडीबीसी और वसंत ट्यूटोरियल देखें। बीटीडब्ल्यू, वह कॉन्फ़िगरेशन फ़ाइलों और तार सेम आदि में पासवर्ड कैसे स्टोर करता है .. उम्मीद है कि इससे मदद मिलती है।

+0

वे ट्यूटोरियल्स की एक महान श्रृंखला हैं, लेकिन लिंक किए गए लिंक में पासवर्ड हैंडलिंग शामिल नहीं है। – dwjohnston

संबंधित मुद्दे

 संबंधित मुद्दे