sql server डेटाबेस संलग्न करते समय एक्सेस अस्वीकार कर दी जाती है




sql-server security (24)

मेरे मामले में समस्या हल हो गई थी:

USE [master]
GO
CREATE DATABASE [AdventureWorks2008R2] ON
( FILENAME = 'C:\Program Files\Microsfot SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\AdventureWors2008R2_Data.mdf')
FOR ATTACH_REBUILD_LOG

मैं एसक्यूएल सर्वर 2008 डेवलपर संस्करण का उपयोग कर रहा हूँ। मैं AdventureWorks2008 डेटाबेस संलग्न करने की कोशिश कर रहा था।

जब मैंने संलग्न करने की कोशिश की, तो मुझे "पहुंच अस्वीकार कर दी गई" त्रुटि मिली। घटना लॉग के अनुसार, यह ओ / एस से आया था:

ओपन असफल: फ़ाइल संख्या 0 के लिए फ़ाइल डी: \ ProjectData \ AdventureWorks \ AdventureWorksLT2008_Data.mdf नहीं खोल सका। ओएस त्रुटि: 5 (एक्सेस अस्वीकृत है।)।

मैंने सोचा "एनटीएफएस समस्या", लेकिन सिस्टम (और I) ने दोनों फ़ाइलों तक पहुंच को संशोधित किया है।

मैंने पाया कि यदि मैं sa में लॉग इन करता हूं तो मैं डेटाबेस को सफलतापूर्वक संलग्न कर सकता हूं, लेकिन मेरा उपयोगकर्ता खाता काम नहीं करेगा।

मैं अपनी मशीन पर स्थानीय प्रशासक समूह का सदस्य हूं, और मैं SQL सर्वर इंस्टेंस में sysadmins भूमिका में हूं।

कोई विचार क्यों मुझे एस के रूप में लॉग इन करना पड़ा?


जब भी मैं SQL सर्वर में सेटअप की गई डिफ़ॉल्ट डेटाबेस निर्देशिका से एक अलग निर्देशिका में डेटाबेस को संलग्न करने का प्रयास करता हूं, तो इस समस्या में हर बार चलाया जाता था।

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


USE [master]
GO
CREATE DATABASE [DataBasename] ON 
( FILENAME = N'C:\data\DataBasename.mdf' )
 FOR ATTACH
GO

अटैच के लिए बदलें -> ATTACH_FORCE_REBUILD_LOG के लिए

USE [master]
GO
CREATE DATABASE [DataBasename] ON 
( FILENAME = N'C:\data\DataBasename.mdf' )
 FOR ATTACH_FORCE_REBUILD_LOG
GO

व्यवस्थापक के रूप में SQL सर्वर प्रबंधन स्टूडियो चलाएं। (राइट क्लिक-> व्यवस्थापक के रूप में चलाएं) विंडोज 7 के साथ मेरे लिए काम किया - एसक्यूएल सर्वर 2008 आर 2


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

CREATE DATABASE AdventureWorks2012
    ON PRIMARY (FILENAME='D:\Dev\SQL Server\AdventureWorks2012.mdf')
    FOR ATTACH;

यदि आप SQL Server 2012 चलाते हैं तो आप mdf-file के पुराने संस्करण को संलग्न करने का प्रयास करके यह त्रुटि प्राप्त कर सकते हैं। एसक्यूएल सर्वर 2008 से एक एमडीएफ फ़ाइल पूर्व।


मुझे यह समाधान मिला: फ़ोल्डर पर राइट क्लिक करें जहां आप अपनी .mdf फ़ाइल को स्टोर करते हैं -> गुण क्लिक करें -> सुरक्षा टैब चुनें, संपादित करें पर क्लिक करें ... और इसे पूर्ण नियंत्रण दें। उम्मीद है की यह मदद करेगा!


मैं बस इस जानकारी को भी जोड़ना चाहता था।

http://www.mssqltips.com/sqlservertip/2528/database-attach-failure-in-sql-server-2008-r2/

उपाय

आपको यह त्रुटि मिलती है क्योंकि दो अलग-अलग लॉग इन ने अलग किया और संचालन संलग्न किया। इसलिए फ़ाइलों को, जब अलग किया गया था, पहले लॉगिन के स्वामित्व में थे, लेकिन अनुलग्नक विफल रहा क्योंकि उपयोग किया गया लॉगिन एमडीएफ और एलडीएफ फाइलों का मालिक नहीं था।

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

"Filename.mdf" फ़ाइल पर राइट क्लिक करें और mdf फ़ाइल की अनुमतियों को देखने के लिए गुणों का चयन करें। यहां हम देख सकते हैं कि केवल एक खाते को "filename.mdf" फ़ाइल की अनुमति है क्योंकि वह खाता था जिसका उपयोग डेटाबेस को अलग करने के लिए किया गया था।

इस समस्या को हल करने के लिए, अन्य लॉगिन या किसी अन्य लॉगिन को जोड़ने के लिए जोड़ें ... बटन पर क्लिक करें और लॉगिन पूर्ण नियंत्रण दें। आपको इसे "एलडीएफ" फ़ाइल के लिए भी करना चाहिए। एक बार जब आप यह कार्य पूरा कर लें तो ठीक बटन पर क्लिक करें। (अन्य ओएस संस्करणों के लिए नोट आपके पास एक संपादन विकल्प हो सकता है, पहले इसे क्लिक करें और फिर आप जोड़ें ... विकल्प देखेंगे।)


सभी टिप्पणियों के लिए धन्यवाद। आप में से कुछ ने मुझे जवाब देने में मदद की। यहां मैंने जो पाया है:

यह एक एनटीएफएस अनुमति समस्या थी, और एक एसक्यूएल समस्या नहीं थी। इसके अलावा, यह तरह की बग की तरह दिखता है (और यह दोहराया जा सकता है)।

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

अगर मैं अनुलग्नक करने का प्रयास करता हूं, तो मेरे जैसे SQL सर्वर से कनेक्ट करें (जहां मैं व्यवस्थापक समूह में हूं), यह NTFS समस्या के साथ विफल रहता है।

हालांकि, अगर मैं वही फ़ाइल अनुमति देता हूं जो स्थानीय व्यवस्थापक समूह सीधे मेरे डोमेन खाते में है, तो मैं कोई समस्या नहीं ले सकता।

(ओह, और हाँ, मैंने इस मशीन पर स्थानीय समूहों की जांच की, और मैंने सत्यापित किया कि मेरा डोमेन खाता वास्तव में स्थानीय व्यवस्थापक समूह का सदस्य है)।

इसलिए, ऐसा लगता है कि त्रुटि तब होती है क्योंकि कुछ कोड (या तो SQL सर्वर या प्रबंधन स्टूडियो में) उपयोगकर्ता खाते की अनुमतियों के लिए जांच करता है, लेकिन यह उपयोगकर्ता खाते को प्राप्त समूह अनुमतियों को जांचने के लिए अब तक नहीं जाता है।

यह मेरे लिए अजीब लगता है, लेकिन मैं इसे बार-बार पुन: उत्पन्न कर सकता हूं, इसलिए मैंने निष्कर्ष निकाला है कि यह जवाब है।

अपडेट करें: मैंने इसे एक बग के रूप में रिपोर्ट किया है: https://connect.microsoft.com/SQLServer/feedback/details/539703/access-denied-attaching-a-database-when-permissions-are-inherited डेटा-when-permissions-are- https://connect.microsoft.com/SQLServer/feedback/details/539703/access-denied-attaching-a-database-when-permissions-are-inherited


मैं इस पेज को पढ़ रहा था और उनके पास एक दिलचस्प वाक्य है:

सावधानी: इन भूमिकाओं में उपयोगकर्ताओं को जोड़ते समय बहुत चुनिंदा रहें। उदाहरण के लिए, sysadmin प्रत्येक डेटाबेस में डीबीओ के लिए मानचित्र करता है और sa खाते का उपयोग कर लॉगिंग के बराबर है।

बेशक, उनके पास यह भी है:

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

तो यदि आप एक डोमेन व्यवस्थापक हैं और एसक्यूएल 'sysadmin' समूह में, दुनिया आपके क्रस्टेसियन होना चाहिए।

बेशक, माइक्रोसॉफ्ट के अनुसार, आपको इन दो पृष्ठों पर त्वरित रूप से देखना चाहिए:
डेटाबेस की आवश्यकताएँ से लिंक करें

डेटाबेस स्थापित करने के लिए लिंक

आप शरारती हो रहे हैं और उन्हें मैन्युअल रूप से संलग्न करने की कोशिश कर रहे हैं :) गंभीरता से, क्या आपके पास AdventureWorks2008 डेटाबेस के लिए सभी आवश्यक शर्तें हैं?
मुझे संदेह है कि यह सिर्फ एक और माइक्रोसॉफ्ट विषमता / एज केस है, लेकिन मैं गलत हो सकता था।


उन लोगों के लिए जो यहां अन्य समाधानों के साथ समस्या को ठीक नहीं कर सके, निम्नलिखित फिक्स मेरे लिए काम किया:

अपने SQL सर्वर स्थापना में अपने "डेटा" फ़ोल्डर पर जाएं, राइट क्लिक करें, गुण, सुरक्षा टैब, और "नेटवर्क सेवा" उपयोगकर्ता के लिए पूर्ण नियंत्रण अनुमतियां जोड़ें।

http://decoding.wordpress.com/2008/08/25/sql-server-2005-expess-how-to-fix-error-3417/

(उपरोक्त लिंक एसक्यूएल 2005 के लिए है, लेकिन यह मेरे लिए एक एसक्यूएल 2008 आर 2 स्थापना तय)।

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


यह वास्तव में एनटीएफएस अनुमतियां, और SQL सर्वर में एक अजीब बग है। मुझे यकीन नहीं है कि उपर्युक्त बग रिपोर्ट सटीक है, या एक अतिरिक्त बग का संदर्भ ले सकता है।

विंडोज 7 पर इसे हल करने के लिए, मैंने सामान्य रूप से SQL सर्वर प्रबंधन स्टूडियो चलाया (प्रशासक के रूप में नहीं)। मैंने फिर एमडीएफ फाइल को अटैच करने का प्रयास किया। इस प्रक्रिया में, मैंने पथ में पेस्ट करने के बजाय यूआई का उपयोग किया। मैंने देखा कि पथ मुझसे अलग हो गया था। ऐसा इसलिए है क्योंकि एमएस एसक्यूएल सर्वर (SQLServerMSSQLUser $ machinename $ SQLEXPRESS) उपयोगकर्ता जो सॉफ़्टवेयर आपके लिए जोड़ता है उसे फ़ोल्डर तक पहुंचने की अनुमति नहीं है (इस मामले में मेरे उपयोगकर्ता फ़ोल्डर्स में गहरा फ़ोल्डर)।

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

अंत में, मैंने एमएस एसक्यूएल सर्वर उपयोगकर्ता को डीबी के लिए .mdf और .ldf फ़ाइलों को संशोधित अनुमतियां दीं।

अब मैं डेटाबेस फ़ाइलों को संलग्न कर सकता हूं।


मैंने डेटाबेस पर राइट क्लिक करके और विज़ार्ड में लॉग फ़ाइल AdventureWorks2012_Data_log.ldf को हटाकर एमडीएफ फ़ाइल संलग्न की है। एमडीएफ फ़ाइल को निम्नलिखित स्थान पर रखा गया था

    C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA

उपर्युक्त विधि ने मुझे इस मुद्दे को हल करने में मदद की।


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


मुझे यह त्रुटि एस के रूप में मिली है। मेरे मामले में, सुरक्षा कोई फर्क नहीं पड़ता। मैंने एमडीएफ और एलडीएफ फाइलों पर सभी को पूर्ण नियंत्रण जोड़ा, और संलग्न ठीक हो गया।


डेटाबेस को जोड़ते समय मुझे एक ही समस्या थी। यह एक एसक्यूएल मुद्दा नहीं था यह एक खाता मुद्दा था। पैनल नियंत्रण / उपयोगकर्ता खाता नियंत्रण सेटिंग्स पर जाएं / "कभी सूचित न करें" पर सेट करें। अंत में, कंप्यूटर को पुनरारंभ करें और यह मेरे लिए काम किया।


मैंने डिफ़ॉल्ट डेटा फ़ोल्डर से एक डेटाबेस एमडीएफ को अपने asp.net app_data फ़ोल्डर में स्थानांतरित कर दिया और डेटाबेस को ऑनलाइन सेट करने का प्रयास करने में इस समस्या में भाग गया।

मैंने स्थानांतरित फ़ाइलों में मूल स्थान में अन्य फ़ाइल डेटाबेस की सुरक्षा सेटिंग्स की तुलना की और ध्यान दिया कि MSSQL $ SQLEXPRESS को उनके नए स्थान में फ़ाइलों को अनुमतियां असाइन नहीं की गई थीं। मैंने "एनटी सेवा \ MSSQL $ SQLEXPRESS" के लिए पूर्ण नियंत्रण जोड़ा (इसमें एनटी सेवा शामिल होना चाहिए) और यह ठीक जुड़ा हुआ है।

ऐसा प्रतीत होता है कि मूल डेटा फ़ोल्डर में इन अनुमतियां हैं और फ़ाइलों को इसका वारिस है। निश्चित रूप से फ़ाइलों और विरासत ब्रेक ले जाएँ।

मैंने एक और प्रोजेक्ट की एमडीएफ फाइल की जांच की जिसे मैंने सीधे अपने ऐप_डाटा फ़ोल्डर में बनाया था। इसमें MSSQL $ SQLEXPRESS अनुमतियां नहीं हैं। हममम। मुझे आश्चर्य है कि क्यों एसक्यूएल एक्सप्रेस एक पसंद करता है लेकिन दूसरा नहीं?


मेरे पास एक ही समस्या है जब इसे अलग करने के बाद डेटाबेस को दोबारा जोड़ना और ड्राइव सी से एफ तक एलडीएफ और एमडीएफ फाइलों को ले जाना।

इसे ठीक करने के लिए मुझे दोनों फाइलों के लिए स्वामी अधिकार प्रिंसिपल जोड़ना पड़ा और गुण संवाद के सुरक्षा टैब में उन्हें पूर्ण नियंत्रण दिया।


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


विंडोज 7 में इस तरह से एक SQL2005 डेटाबेस संलग्न किया जा सकता है:

start menu >
 all program >
  Microsoft sql server 2005 >
   sql server management studio >
    right click >
     run as administrator >
      click ok

और फिर संलग्न डेटाबेस सफलतापूर्वक पूरा हो गया।


डाटाबेस को किसी अन्य फ़ोल्डर में कॉपी करें और संलग्न करें या "विंडोज प्रमाणीकरण" के साथ SQLServer में लॉग इन करें


डाटा उपयोगकर्ता डेटाबेस फ़ाइलों तक पहुंचने के लिए एनटीएफएस अकाउंट्स SQLServerMSSQLUser$<computer_name>$<instance_name> और SQLServerSQLAgentUser$<computer_name>$<instance_name> का उपयोग करता है। आप इन उपयोगकर्ताओं में से एक या दोनों के लिए अनुमतियां जोड़ने का प्रयास करना चाह सकते हैं।

मुझे नहीं पता कि आपकी समस्या हल हो जाती है क्योंकि आप कहते हैं कि आपको sa उपयोगकर्ता के साथ कोई समस्या नहीं है, लेकिन मुझे आशा है कि इससे मदद मिलती है।


मेरे साथ - विंडो 8 पर चल रहा है - RIght SQL सर्वर प्रबंधक स्टूडियो पर क्लिक करें -> व्यवस्थापक के साथ चलाएं। -> कोई समस्या नहीं संलग्न करें


मैंने .mdf फ़ाइल को केवल उस स्थानांतरित करके समस्या हल कर दी है जिसे आप सार्वजनिक फ़ोल्डर से अटैच करना चाहते हैं, मेरे मामले में मैंने इसे उपयोगकर्ताओं / सार्वजनिक फ़ोल्डर में स्थानांतरित कर दिया है। तब मैं बिना किसी समस्या के इसे संलग्न करता हूं। उम्मीद है की यह मदद करेगा।





administration