2010-01-07 15 views
21

पर भौतिक सर्वर परिवर्तन पर परिवर्तन मैंने एक सिस्टम से अगले, समान सेटअप, लेकिन पूरी तरह से अलग भौतिक मशीन पर एक SQL सर्वर डेटाबेस की प्रतिलिपि बनाई। मैंने Norton Ghost और फ़ाइलों को मैन्युअल रूप से पुनर्प्राप्त किया, उदाहरण के लिए, SQL Server 2008 एक्सप्रेस को पुन: स्थापित करने के बाद c: \ प्रोग्राम फ़ाइलों में पाया गया संपूर्ण SQL Server 2008 फ़ोल्डर।SQL सर्वर 2008 ओपन मास्टर कुंजी त्रुटि

मेरे डेटाबेस में से एक में इसकी एक तालिका, कॉलम पर AES_256 एन्क्रिप्शन सक्षम है।

Server Error in '/' Application. Please create a master key in the database or open the master key in the session before performing this operation. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Data.SqlClient.SqlException: Please create a master key in the database or open the master key in the session before performing this operation.

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

मैं कुछ पढ़ने कैसे एईएस एन्क्रिप्शन के साथ जुड़ा हुआ है के बारे में कुछ लिंक किया है और पाया है कि: मैं अपने IIS7 resetup और कहा कि डेटाबेस का उपयोग, डेटा पुन: प्राप्त करने पर अनुप्रयोग चलाने के लिए करने की कोशिश की, मैं इस त्रुटि मिलती है मशीन कुंजी, लेकिन यह एक नुकसान पर है कि इसे नई प्रणाली में कैसे कॉपी करें। या शायद यह मामला भी नहीं है।

नोट: मैंने सममित कुंजी, प्रमाणपत्र और मास्टर कुंजी को छोड़ने और उन्हें फिर से बनाने की कोशिश की है। यह त्रुटि से छुटकारा पाता है, लेकिन डेटा के मुकाबले एईएस_256 के माध्यम से एन्क्रिप्टेड में दिखाई नहीं देता है। कॉलम जो एन्क्रिप्टेड नहीं हैं, हालांकि।

किसी भी मदद की बहुत सराहना की जाएगी। अग्रिम में धन्यवाद!

उत्तर

64

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

मूल रूप से आप फिर से एन्क्रिप्ट करने के लिए नए सर्वर कुंजी है, जो इस स्क्रिप्ट के साथ किया जा सकता है के खिलाफ डेटाबेस मास्टर कुंजी (व्यवस्थापक विशेषाधिकार का प्रयोग करके) हैं:

-- Reset database master key for server (if database was restored from backups on another server) 
OPEN MASTER KEY DECRYPTION BY PASSWORD = '---your database master key password---' 
ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY 
GO 

ध्यान दें कि जब आप एक डेटाबेस मास्टर कुंजी बनाने , आपको हमेशा एक पासवर्ड भी प्रदान करना चाहिए ताकि आप उस परिदृश्य में पासवर्ड का उपयोग करके कुंजी खोल सकें जहां सेवा मास्टर कुंजी का उपयोग नहीं किया जा सकता - उम्मीद है कि आपको वह पासवर्ड कहीं भी संग्रहीत किया गया है!

वैकल्पिक रूप से आप डेटाबेस मास्टर कुंजी का बैकअप पुनर्स्थापित कर सकते हैं - लेकिन आपको लक्ष्य सर्वर के लिए बनाए गए एक की आवश्यकता है, स्रोत सर्वर नहीं।

यदि आपके पास कोई बैकअप या पासवर्ड नहीं है तो मुझे यकीन नहीं है कि आप नए सर्वर पर एन्क्रिप्टेड डेटा पुनर्प्राप्त करने में सक्षम होंगे, क्योंकि आपको डेटाबेस मास्टर कुंजी को छोड़ना और फिर से बनाना होगा नया पासवर्ड, जो किसी भी निर्भर कुंजी और डेटा को मार देगा।

+3

पवित्र बकवास! तुम मेरे उद्धारक हो! अगर मैं उस तीर पर एक हजार बार क्लिक कर सकता, तो मैं करता! बहुत बहुत धन्यवाद! –

3

मेरे पास एक समान स्थिति थी, ओएस ड्राइव की मृत्यु के बाद एक सर्वर पुनर्निर्माण किया गया था। मैंने एसक्यूएल को दोबारा स्थापित किया और अनचाहे डेटा ड्राइव पर अपने सभी पुराने डेटाबेस से इसे दोबारा जोड़ा। सब कुछ मेरे एन्क्रिप्टेड कॉलम को छोड़कर काम करता था। लेकिन मेरा मुद्दा यह था कि मास्टर सेवा कुंजी को रोक दिया गया था। मैं पर वापस जाकर अपनी मास्टर सेवा कुंजी की मरम्मत करने में सक्षम था, उसी डोमेन क्रेडेंशियल जो चाल से पहले मेरा SQL सर्वर सेवा खाता था।

यह article ने मुझे अपने उत्कृष्ट लेख के लिए फिक्स (Matt Bowler पर क्यूडो) दिया। मुझे पता था कि स्थानीय मशीन कुंजी बदल गई थी, लेकिन मेरा उद्धार यह था कि मैं एक ही सेवा खाते का उपयोग कर सकता था।

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

कोई उपयोगकर्ता विन्यास इस कुंजी उससे संबंधित पासवर्ड रहे हैं - यह एसक्यूएल सर्वर सेवा खाते और स्थानीय मशीन कुंजी द्वारा एन्क्रिप्टेड है। स्टार्टअप पर SQL सर्वर इन डिक्रिप्शन में से किसी एक के साथ सेवा मास्टर कुंजी खोल सकता है। यदि उनमें से कोई विफल रहता है - SQL सर्वर दूसरे का उपयोग करेगा और असफल डिक्रिप्शन 'फिक्स' (यदि दोनों विफल हो - SQL सर्वर त्रुटि होगी)। यह क्लस्टर्स जैसी परिस्थितियों के लिए जिम्मेदार है जहां एक विफलता के बाद स्थानीय मशीन कुंजी अलग होगी। यह एक कारण है कि SQL सर्वर कॉन्फ़िगरेशन प्रबंधक का उपयोग कर सेवा खातों को बदला जाना चाहिए - क्योंकि तब सेवा मास्टर कुंजी एन्क्रिप्शन सही ढंग से पुन: उत्पन्न होता है।

http://mattsql.wordpress.com/2012/11/13/migrating-sql-server-databases-that-use-database-master-keys/