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




sql-server security (20)

इस समस्या के विशेष बदलाव वाले किसी के लिए यह क्या मूल्यवान है:

  • एसक्यूएल एक्सप्रेस 2008
  • विजुअल स्टूडियो 2010 प्रीमियम

App_data फ़ोल्डर के संदर्भ मेनू के माध्यम से मैंने डीबगिंग उद्देश्यों के लिए एक SQL एक्सप्रेस डेटाबेस बनाया था। कनेक्शन स्ट्रिंग (NHibernate द्वारा उपयोग की गई) निम्नानुसार थी:

Server=.\SQLExpress;
AttachDbFilename=|DataDirectory|DebugDatabase.mdf;
Database=DebugDatabase;
Trusted_Connection=Yes;

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

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

पुनश्च। क्रेडिट इस ब्लॉग पोस्ट पर जाते हैं, मैंने पाया कि इस विशेष समस्या को गुमराह करते हुए, इस मुद्दे को हल करने के लिए डेटाबेस को संलग्न / अलग करने के विचार को ट्रिगर करना।

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

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

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

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

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

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

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


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


उस फ़ोल्डर में अनुमति जोड़ें जहां आपकी .mdf फ़ाइल है।

इस नाम को जांचें: NT Service\MSSQLSERVER

और Location को अपने सर्वर नाम में बदलें।


जब आप sa (या कोई SQL सर्वर खाता) के रूप में लॉगिन करते हैं, तो आप SQL सर्वर सेवा खाते के रूप में कार्य कर रहे होते हैं, जब आप लॉग इन होते हैं, तो आपके पास अपने खाते की अनुमतियां होती हैं। किसी कारण से आपके पास उचित फ़ाइल पहुंच नहीं है लेकिन सेवा खाता करता है।


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

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


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


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


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


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

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

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


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

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

मैं पोस्ट किए गए उत्तरों में अतिरिक्त जानकारी जोड़ना चाहता हूं।

डेटाबेस को अलग करते समय सावधान रहें क्योंकि आपके द्वारा लॉग इन किए गए विंडोज उपयोगकर्ता के रूप में .mdf फ़ाइल की अनुमति वाले एकमात्र उपयोगकर्ता बन जाते हैं! .mdf फ़ाइल में मूल अनुमतियां थीं जिसमें उपयोगकर्ता SQLServerMSSQLUser$<computer_name>$<instance_name> और व्यवस्थापक खाते को जो भी विंडोज उपयोगकर्ता आपने लॉग इन किया है (एसक्यूएल सर्वर उपयोगकर्ता नहीं) द्वारा ओवरराइट किया गया है। बूम, इस तरह की सभी अनुमतियां चली गईं। तो जैसा कि दूसरों ने कहा है और अपनी .mdf फ़ाइल पर राइट क्लिक करें और अनुमतियों को दोबारा जांचें।

मैं इस समस्या में भाग गया क्योंकि मैंने डेटाबेस से कनेक्ट करने के लिए एसएसएमएस का उपयोग किया था (इससे कोई फर्क नहीं पड़ता कि कौन सा एसक्यूएल सर्वर खाता है) और डेटाबेस को अलग कर दिया। ऐसा करने के बाद कि मेरे विंडोज उपयोगकर्ता एकमात्र ऐसा था जिसकी .mdf फ़ाइल में कोई अनुमति थी। तो बाद में जब मैंने एसए खाते का उपयोग करके डीबी संलग्न करने की कोशिश की, तो उसने "पहुंच से वंचित" त्रुटि फेंक दी।

मूल अनुमतियों को व्यवहार में रखने के लिए आपको डेटाबेस को ऑफ़लाइन लेना चाहिए, फिर अलग करें, फिर उस क्रम में संलग्न करें:

USE [master]
GO
-- kick all users out of the db
ALTER DATABASE mydb
SET SINGLE_USER WITH ROLLBACK IMMEDIATE 
GO

-- Take the Database Offline
ALTER DATABASE mydb SET OFFLINE WITH
ROLLBACK IMMEDIATE
GO

-- detach the db
EXEC master.dbo.sp_detach_db @dbname = N'mydb'
GO

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


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

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

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

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


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


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


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


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

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

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


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


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

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

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

अगर मैं अनुलग्नक करने का प्रयास करता हूं, तो मेरे जैसे 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





administration