मेरे पास है:
- एक एकल Microsoft SQL Server 2008 R2
- कुछ तालिकाओं वाले दो डेटाबेस:
DB1
तथाDB2
(दोनों एक ही मालिक के साथ) - DB1 में एक दृश्य,
DB1.dbo.View1
किSELECT * FROM DB2.dbo.Table1
- कोई भूमिका,
ViewRole
, DB1 में दृश्य (कोई अन्य अनुमति) के लिए चयनित अनुमति दी - एक Windows उपयोगकर्ता,
DOMAINuser
, सर्वर रोल के साथ सेट किया गयाpublic
, जो DB1 के अंतर्गत आता हैViewRole
जब उपयोगकर्ता दृश्य से चयन करने का प्रयास करता है, तो मुझे त्रुटि मिलती है:
सर्वर प्रिंसिपल "DOMAINuser" वर्तमान सुरक्षा संदर्भ के तहत डेटाबेस "DB2" तक पहुंचने में सक्षम नहीं है
मैंने क्रॉस डाटाबेस ओनरशिप चैनिंग को सक्रिय करने के लिए (और उम्मीद के मुताबिक सफल) दोनों का उपयोग करने की कोशिश की है:
EXEC sp_configure "Cross DB Ownership Chaining", "1";RECONFIGURE
तथा
EXEC sp_dboption DB1, "db chaining", "true"
EXEC sp_dboption DB2, "db chaining", "true"
यह सुनिश्चित करने के लिए कि सेटिंग की गई है, मैं चलाता हूं:
SELECT name, owner_sid, is_db_chaining_on FROM sys.databases
और नतीजा यह है:
name owner_sid is_db_chaining_on
DB1 0x0105...DCB510000 1
DB2 0x0105...DCB510000 1
तो, क्यों जीता गया "उपयोगकर्ता दृश्य से चयन करने में सक्षम होगा? कोई त्रुटि नहीं होगी यदि दृश्य केवल DB1 के भीतर एक तालिका से चयन करता है।
किसी के पास कोई सुझाव है कि मुझे क्या याद आया या गलत समझा गया?
उत्तर:
जवाब के लिए 2 № 1विंडोज़ उपयोगकर्ता को क्रॉस डेटाबेस स्वामित्व चाइनिंग का उपयोग करने में सक्षम होने के लिए दोनों डेटाबेस तक पहुंच प्राप्त करनी होगी।
आपको सुरक्षा के लिए सर्वर स्तर पर विकल्प को भी अक्षम करना चाहिए और केवल डेटाबेस में विकल्प को सक्षम करना चाहिए।
आप इसके बारे में यहां और अधिक पढ़ सकते हैं www.mssqltips.com/sqlservertip/1782/understanding-cross-database-ownership-chaining-in-sql-server/